Das Hauptproblem bei der Überprüfung von DESKTOP_SESSION
ist, dass es vom Anzeigemanager und nicht von der Desktopsitzung festgelegt wird und Inkonsistenzen unterliegt. Bei lightdm
Debian stammen die Werte aus den Namen der Dateien unter /usr/share/xsessions/
. DESKTOP_SESSION
spiegelt die Desktop-Umgebung wider, wenn beim Anmelden eine bestimmte Auswahl getroffen wird, es wird jedoch lightdm-xsession
immer die Standard-Sitzung verwendet.
GDMSESSION
ist eine andere Option, scheint aber eine ähnliche Situation zu haben (es ist der gleiche Wert wie DESKTOP_SESSION
für mich).
XDG_CURRENT_DESKTOP
sieht 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_DESKTOP
nicht 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"