Główny problem ze sprawdzaniem DESKTOP_SESSIONpolega na tym, że jest on ustawiany przez menedżera wyświetlania, a nie sesję pulpitu, i jest niespójny. W lightdmDebianie wartości pochodzą od nazw plików pod /usr/share/xsessions/. DESKTOP_SESSIONodzwierciedla środowisko pulpitu, jeśli podczas logowania dokonany zostanie określony wybór, jednak lightdm-xsessionzawsze używana jest sesja domyślna.
GDMSESSIONjest kolejną opcją, ale wydaje się mieć podobne położenie (to ta sama wartość, co DESKTOP_SESSIONdla mnie).
XDG_CURRENT_DESKTOPwygląda na dobry wybór, jednak obecnie nie jest on w standardzie XDG i dlatego nie zawsze jest implementowany. Zobacz tutaj do dyskusji o tym. Ta odpowiedź pokazuje jego wartości dla różnych dystrybucji / komputerów stacjonarnych, mogę również potwierdzić, że obecnie nie jest dla mnie dostępna w XFCE.
Uzasadnionym rozwiązaniem XDG_CURRENT_DESKTOPnieistniejącym byłoby spróbowanie XDG_DATA_DIRS. Pod warunkiem, że pliki danych dla środowiska pulpitu są zainstalowane w katalogu z jego nazwą, to podejście powinno działać. Miejmy nadzieję, że tak będzie w przypadku wszystkich dystrybucji / komputerów stacjonarnych!
Następujące (z GNU grep) testy dla XFCE, KDE i Gnome:
echo "$XDG_DATA_DIRS" | grep -Eo 'xfce|kde|gnome'
Kompatybilny z POSIX:
echo "$XDG_DATA_DIRS" | sed 's/.*\(xfce\|kde\|gnome\).*/\1/'
Aby połączyć z sprawdzaniem 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"