Le principal problème lié à la vérification du DESKTOP_SESSION
est 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 lightdm
sur Debian, les valeurs proviennent des noms des fichiers sous /usr/share/xsessions/
. DESKTOP_SESSION
reflète l'environnement du bureau si une sélection spécifique est effectuée lors de la connexion, mais la lightdm-xsession
session par défaut est toujours utilisée.
GDMSESSION
est une autre option, mais semble avoir une situation similaire (c'est la même valeur que DESKTOP_SESSION
pour moi).
XDG_CURRENT_DESKTOP
semble ê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_DESKTOP
ne 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"