Bug 43236

Summary: Пустые переменные XDG_DATA_DIRS и XDG_CONFIG_DIR в ALW p9 и p10
Product: Sisyphus Reporter: Nikolay Strelkov <nrbrtx>
Component: mate-sessionAssignee: Nobody's working on this, feel free to take it <nobody>
Status: REOPENED --- QA Contact: qa-sisyphus
Severity: normal    
Priority: P5    
Version: unstable   
Hardware: x86_64   
OS: Linux   

Description Nikolay Strelkov 2022-07-13 17:14:39 MSK
Обнаружил, что переменные окружения `XDG_DATA_DIRS` и `XDG_CONFIG_DIR` не инициализированы на чистой максимально полной установке ALTLinux Workstation p9 и p10 со всеми обновлениями. И на StarterKit MATE p10 тоже, но это не так важно.

Для сравнения состояние этих переменных на свежей установке Ubuntu MATE 20.04 LTS такое:

```
$ export | grep -E "XDG_(CONFIG|DATA)"
declare -x XDG_CONFIG_DIRS="/etc/xdg/xdg-mate:/etc/xdg"
declare -x XDG_DATA_DIRS="/usr/share/mate:/usr/local/share:/usr/share:/var/lib/snapd/desktop"
```

В этом контексте Snap и Flatpak не обсуждаю, т.к. оба работоспособны в p10, а в p9 для второго в MATE достаточно выполнить `sudo chmod +x /etc/profile.d/flatpak.sh` (обход https://bugzilla.altlinux.org/38397).

Определены переменные в UM с нужным содержимым в следующих конфигурационных файлах:

```
$ grep -Er "XDG_(CONFIG|DATA)_DIR.*local" /etc/ 2>/dev/null
/etc/profile.d/apps-bin-path.sh:    export XDG_DATA_DIRS="/usr/local/share:/usr/share"
/etc/openal/alsoft.conf:#  $XDG_DATA_DIRS/openal/hrtf  (defaults to /usr/local/share/openal/hrtf and
/etc/X11/Xsession.d/55mate-session_materc:      XDG_DATA_DIRS=/usr/share/mate:/usr/local/share/:/usr/share/
/etc/X11/Xsession.d/60x11-common_xdg_path:DEFAULT_XDG_DATA_DIRS='/usr/local/share/:/usr/share/'
```

Текущая реализация в ALT приводит к потере ярлыков из `/usr/local/share/applications`.
Comment 1 Антон Мидюков 2022-07-13 19:17:51 MSK
На Сизифе точно также.
Comment 2 Sergey V Turchin 2022-07-15 16:59:33 MSK
Они не должны быть инициализированы. У них есть умолчательные значения по спецификации.
Comment 3 Nikolay Strelkov 2022-07-16 10:38:22 MSK
Попробуйте сами. То есть в Debian их зря уже лет 5 инициализируют?!

Текущая реализация в ALT приводит к потере ярлыков из `/usr/local/share/applications`.
Инициализируйте, пожалуйста, эти переменные нормально.
Comment 4 Nikolay Strelkov 2022-07-16 18:52:54 MSK
Привожу полный разбор ситуации. Прошу отнестись серьезно и повторить в результате решение, применяемое в Debian/Ubuntu MATE.

# Состояние 0

На свежей установке ALW у вас получаются неопределенными обе переменные `XDG_DATA_DIRS` и `XDG_CONFIG_DIR`. 
Вы цитируете спецификацию в том аспекте, что среда MATE DE, поставляемая по умолчанию, увидит, что переменные пустые,
и сама заполнит их значениями по умолчанию в виде `XDG_CONFIG_DIRS="/etc/xdg/xdg-mate:/etc/xdg"` и `XDG_DATA_DIRS="/usr/share/mate:/usr/local/share:/usr/share"`.
Это правильно, но лишь отчасти.

Стоит в процесс переопределения этих переменных включиться другому DE - и вся эта идея благополучно рассыпется.

# Состояние++

Доустановка пакета `kde5-profile` приведет к таким значениям:

```
$ export | grep -E "XDG_(CONFIG|DATA)"
declare -x XDG_CONFIG_DIRS="/etc/kf5/xdg:/etc/xdg"
declare -x XDG_DATA_DIRS="/usr/share/kf5:/usr/share"
```

^^^ в выводе выше обратите внимание на отсутствие в переменной `XDG_DATA_DIRS` директорий `/usr/share/mate` и `/usr/local/share`. То есть часть директорий уже потерялась.

# Состояние++

Доустановка пакета `flatpak` приведет к таким значениям:

```
$ export | grep -E "XDG_(CONFIG|DATA)"
declare -x XDG_CONFIG_DIRS="/etc/kf5/xdg:/etc/xdg"
declare -x XDG_DATA_DIRS="/usr/share/kf5:/home/$USER/.local/share/flatpak/exports/share:/var/lib/flatpak/exports/share:/usr/local/share:/usr/share"
```

^^^ в выводе выше в переменной `XDG_DATA_DIRS` появилась директория `/usr/local/share`, но `/usr/share/mate` по-прежнему отсутствует.

# Состояние++

Доустановка пакета `snapd` приведет к таким значениям:

```
$ export | grep -E "XDG_(CONFIG|DATA)"
declare -x XDG_CONFIG_DIRS="/etc/kf5/xdg:/etc/xdg"
declare -x XDG_DATA_DIRS="/usr/share/kf5:/home/$USER/.local/share/flatpak/exports/share:/var/lib/flatpak/exports/share:/usr/local/share:/usr/share:/var/lib/snapd/desktop"
```

^^^ в выводе выше в переменной `XDG_DATA_DIRS` есть директория `/usr/local/share`, но `/usr/share/mate` по-прежнему отсутствует.

# Вывод

Вы не можете предугадать поведение реального пользователя ALTW, поэтому, пожалуйста, просто повторите решение Debian/Ubuntu с инкрементным дозаполнением указанных переменных. 
Значения по умолчанию должны отражать специфику рабочего стола, установленного по умолчанию, т.е. для ALW с MATE это `XDG_CONFIG_DIRS="/etc/xdg/xdg-mate:/etc/xdg"` и `XDG_DATA_DIRS="/usr/share/mate:/usr/local/share:/usr/share"`. На присутствии директории `/etc/xdg/xdg-mate` я не настаиваю, похоже что в ALT (да и Debian) нет пакетов с файлами в этой директории.
Comment 5 Sergey V Turchin 2022-07-18 09:29:17 MSK
(Ответ для Norbert X на комментарий #3)
> Попробуйте сами. То есть в Debian их зря уже лет 5 инициализируют?!
Это не запрещено.

> Текущая реализация в ALT приводит к потере ярлыков из
> `/usr/local/share/applications`.
Это личная пробема того, кто туда их кладёт.
Comment 6 Nikolay Strelkov 2022-07-18 09:36:24 MSK
Вы не можете предугадать поведение реального пользователя ALTW, поэтому, пожалуйста, просто повторите решение Debian/Ubuntu с инкрементным дозаполнением указанных переменных. 
Значения по умолчанию должны отражать специфику рабочего стола, установленного по умолчанию, т.е. для ALW с MATE это `XDG_CONFIG_DIRS="/etc/xdg/xdg-mate:/etc/xdg"` и `XDG_DATA_DIRS="/usr/share/mate:/usr/local/share:/usr/share"`. На присутствии директории `/etc/xdg/xdg-mate` я не настаиваю, похоже что в ALT (да и Debian) нет пакетов с файлами в этой директории.
Comment 7 Nikolay Strelkov 2022-07-18 09:41:33 MSK
Прошу еще раз внимательно прочитать комментарий 4 (https://bugzilla.altlinux.org/show_bug.cgi?id=43236#c4) и сделать как там написано.
В Ubuntu MATE (где я вхожу в команду и делаю QA) мы бы такого отношения к пользователем не допустили.

Если вы будете продолжать игнорировать возможные проблемы сосуществования сред рабочего стола, то ALTLinux дальше поликлиник не пойдет, универсальной конкурентносбособной импортозамещающей системой не станет.

Поэтому, просто сделайте нормально, как в Ubuntu/Debian.
Comment 8 Sergey V Turchin 2022-07-18 09:49:21 MSK
Все необходимые вам изменения на вашей системе вы можете сделать самостоятельно.
Comment 9 Nikolay Strelkov 2022-07-18 09:50:45 MSK
Дефолты должны быть правильными. Просто реализуйте их.
Я этот баг 3 вылавливал. Сделайте нормально для людей.
Comment 10 Nikolay Strelkov 2022-07-18 09:51:24 MSK
Дефолты должны быть правильными. Просто реализуйте их.
Я этот баг 3 дня вылавливал. Сделайте нормально для людей.
Comment 11 Nikolay Strelkov 2022-07-18 13:24:42 MSK
Многократное упрямое переключение бага в RESOLVED NOTABUG считаю неконструктивным. Я 18 лет администрирую системы Linux, 10 лет использую MATE, 3 года QA в Ubuntu MATE, значит что-то знаю...

Два последних момента добавляю:
1. В SimplyLinux у вас все нормально сделано, там переменные не пустые.
2. Для систем с MATE предлагаю разместить скрипт по пути /etc/profile.d/mate, решающий проблему, одной командой это можно сделать так:

```
cat << \EOF | sudo tee /etc/profile.d/mate.sh
if [ "$DESKTOP_SESSION" == "mate" ]; then
  if [ -z "$XDG_DATA_DIRS" ]; then
    XDG_DATA_DIRS=/usr/share/mate:/usr/local/share/:/usr/share/
  else
    XDG_DATA_DIRS=/usr/share/mate:"$XDG_DATA_DIRS"
  fi
  export XDG_DATA_DIRS

  if [ -z "$XDG_CONFIG_DIRS" ]; then
    export XDG_CONFIG_DIRS=/etc/xdg/xdg-mate:/etc/xdg
  fi
fi

EOF
sudo chmod +x /etc/profile.d/mate.sh
```

За основу скрипта взял https://sources.debian.org/src/mate-session-manager/1.26.0-1/debian/55mate-session_materc/?hl=17#L17 и некоторые строки из https://git.launchpad.net/ubuntu/+source/xorg/tree/debian/local/Xsession.d/60x11-common_xdg_path?h=ubuntu/focal .

Ожидаю включения скрипта выше в дистрибутивы с MATE.

П.С. Если я не учел какие-то особенности ALTLinux, и скрипт нужно переместить в другое место по типу /etc/xdg/mate/xinitrc или добавить какие-то еще переменные, то прошу меня извинить, переместите тогда куда следует и поправьте по месту.