Основна проблема при перевірці DESKTOP_SESSION
полягає в тому, що він встановлюється диспетчером дисплеїв, а не сеансом робочого столу і є предметом невідповідностей. Для lightdm
Debian значення походять від імен файлів під /usr/share/xsessions/
. DESKTOP_SESSION
відображає середовище робочого столу, якщо під час входу робиться певний вибір, проте lightdm-xsession
сеанс завжди використовується за замовчуванням.
GDMSESSION
інший варіант, але, схоже, має схоже становище (це те саме значення, що і DESKTOP_SESSION
для мене).
XDG_CURRENT_DESKTOP
виглядає як хороший вибір, однак на даний момент він не відповідає стандарту XDG і тому не завжди реалізується. Дивіться тут для обговорення цього питання. Ця відповідь показує її значення для різних дистрибутивів / настільних ПК, я також можу підтвердити, що вона наразі недоступна для мене на XFCE.
Справжнім запасом для XDG_CURRENT_DESKTOP
неіснуючих було б спробувати XDG_DATA_DIRS
. Якщо файли даних для середовища робочого столу встановлені в каталозі, що має його ім'я, такий підхід повинен працювати. Сподіваємось, це стосується всіх дистрибутивів / настільних комп'ютерів!
Наступні (з GNU grep) тести для XFCE, KDE та Gnome:
echo "$XDG_DATA_DIRS" | grep -Eo 'xfce|kde|gnome'
POSIX сумісний:
echo "$XDG_DATA_DIRS" | sed 's/.*\(xfce\|kde\|gnome\).*/\1/'
Щоб поєднати з перевіркою XDG_CURRENT_DESKTOP
:
if [ "$XDG_CURRENT_DESKTOP" = "" ]
then
desktop=$(echo "$XDG_DATA_DIRS" | sed 's/.*\(xfce\|kde\|gnome\).*/\1/')
else
desktop=$XDG_CURRENT_DESKTOP
fi
desktop=${desktop,,} # convert to lower case
echo "$desktop"