Il problema principale con il controllo DESKTOP_SESSION
è che è impostato dal display manager piuttosto che dalla sessione desktop ed è soggetto a incongruenze. Per lightdm
Debian, i valori provengono dai nomi dei file in /usr/share/xsessions/
. DESKTOP_SESSION
riflette l'ambiente desktop se viene effettuata una selezione specifica all'accesso, tuttavia lightdm-xsession
viene sempre utilizzata la sessione predefinita.
GDMSESSION
è un'altra opzione, ma sembra avere una situazione simile (è lo stesso valore DESKTOP_SESSION
per me).
XDG_CURRENT_DESKTOP
sembra una buona scelta, tuttavia non è attualmente nello standard XDG e quindi non sempre implementato. Vedi qui per una discussione di questo. Questa risposta mostra i suoi valori per diverse distro / desktop, posso anche confermare che al momento non è disponibile per me su XFCE.
Il fallback ragionevole per XDG_CURRENT_DESKTOP
non esistere sarebbe provare XDG_DATA_DIRS
. Se i file di dati per l'ambiente desktop sono installati in una directory che porta il suo nome, questo approccio dovrebbe funzionare. Speriamo che questo sia il caso di tutte le distro / desktop!
I seguenti test (con GNU grep) per XFCE, KDE e Gnome:
echo "$XDG_DATA_DIRS" | grep -Eo 'xfce|kde|gnome'
POSIX compatibile:
echo "$XDG_DATA_DIRS" | sed 's/.*\(xfce\|kde\|gnome\).*/\1/'
Da combinare con il controllo 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"