Il problema principale con il controllo DESKTOP_SESSIONè che è impostato dal display manager piuttosto che dalla sessione desktop ed è soggetto a incongruenze. Per lightdmDebian, i valori provengono dai nomi dei file in /usr/share/xsessions/. DESKTOP_SESSIONriflette l'ambiente desktop se viene effettuata una selezione specifica all'accesso, tuttavia lightdm-xsessionviene sempre utilizzata la sessione predefinita.
GDMSESSIONè un'altra opzione, ma sembra avere una situazione simile (è lo stesso valore DESKTOP_SESSIONper me).
XDG_CURRENT_DESKTOPsembra 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_DESKTOPnon 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"