Основная проблема с проверкой DESKTOP_SESSIONсостоит в том, что она задается диспетчером отображения, а не сеансом рабочего стола, и в ней возможны несоответствия. Для lightdmDebian значения берутся из имен файлов в /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"