Основная проблема с проверкой 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"