Das Hauptproblem bei der Überprüfung von DESKTOP_SESSIONist, dass es vom Anzeigemanager und nicht von der Desktopsitzung festgelegt wird und Inkonsistenzen unterliegt. Bei lightdmDebian stammen die Werte aus den Namen der Dateien unter /usr/share/xsessions/. DESKTOP_SESSIONspiegelt die Desktop-Umgebung wider, wenn beim Anmelden eine bestimmte Auswahl getroffen wird, es wird jedoch lightdm-xsessionimmer die Standard-Sitzung verwendet.
GDMSESSIONist eine andere Option, scheint aber eine ähnliche Situation zu haben (es ist der gleiche Wert wie DESKTOP_SESSIONfür mich).
XDG_CURRENT_DESKTOPsieht nach einer guten Wahl aus, ist aber derzeit nicht im XDG-Standard und daher nicht immer implementiert. Sehen Sie hier für eine Diskussion über diese. In dieser Antwort werden die Werte für verschiedene Distributionen / Desktops angezeigt. Ich kann auch bestätigen, dass sie für mich derzeit auf XFCE nicht verfügbar sind.
Der vernünftige Fallback für XDG_CURRENT_DESKTOPnicht existierende wäre, es zu versuchen XDG_DATA_DIRS. Vorausgesetzt, die Datendateien für die Desktop-Umgebung werden in einem Verzeichnis mit diesem Namen installiert, sollte dieser Ansatz funktionieren. Dies gilt hoffentlich für alle Distributionen / Desktops!
Die folgenden (mit GNU grep) Tests für XFCE, KDE und Gnome:
echo "$XDG_DATA_DIRS" | grep -Eo 'xfce|kde|gnome'
POSIX-kompatibel:
echo "$XDG_DATA_DIRS" | sed 's/.*\(xfce\|kde\|gnome\).*/\1/'
Mit dem Prüfen kombinieren 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"