Le principal problème lié à la vérification du DESKTOP_SESSIONest qu'il est défini par le gestionnaire d'affichage plutôt que par la session de bureau et est sujet à des incohérences. Pour lightdmsur Debian, les valeurs proviennent des noms des fichiers sous /usr/share/xsessions/. DESKTOP_SESSIONreflète l'environnement du bureau si une sélection spécifique est effectuée lors de la connexion, mais la lightdm-xsessionsession par défaut est toujours utilisée.
GDMSESSIONest une autre option, mais semble avoir une situation similaire (c'est la même valeur que DESKTOP_SESSIONpour moi).
XDG_CURRENT_DESKTOPsemble être un bon choix, mais il n'est actuellement pas dans la norme XDG et donc pas toujours implémenté. Voir ici pour une discussion à ce sujet. Cette réponse montre ses valeurs pour différentes distributions / ordinateurs de bureau, je peux également confirmer qu'elle n'est actuellement pas disponible pour moi sur XFCE.
La solution de rechange raisonnable pour XDG_CURRENT_DESKTOPne pas exister serait d'essayer XDG_DATA_DIRS. À condition que les fichiers de données de l'environnement de bureau soient installés dans un répertoire portant son nom, cette approche devrait fonctionner. Espérons que ce sera le cas pour toutes les distributions / ordinateurs de bureau!
Les tests suivants (avec GNU grep) pour XFCE, KDE et Gnome:
echo "$XDG_DATA_DIRS" | grep -Eo 'xfce|kde|gnome'
Compatible POSIX:
echo "$XDG_DATA_DIRS" | sed 's/.*\(xfce\|kde\|gnome\).*/\1/'
À combiner avec la vérification 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"