Główny problem ze sprawdzaniem DESKTOP_SESSION
polega na tym, że jest on ustawiany przez menedżera wyświetlania, a nie sesję pulpitu, i jest niespójny. W lightdm
Debianie wartości pochodzą od nazw plików pod /usr/share/xsessions/
. DESKTOP_SESSION
odzwierciedla środowisko pulpitu, jeśli podczas logowania dokonany zostanie określony wybór, jednak lightdm-xsession
zawsze używana jest sesja domyślna.
GDMSESSION
jest kolejną opcją, ale wydaje się mieć podobne położenie (to ta sama wartość, co DESKTOP_SESSION
dla mnie).
XDG_CURRENT_DESKTOP
wyglą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_DESKTOP
nieistnieją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"