El principal problema con la comprobación DESKTOP_SESSIONes que lo configura el administrador de pantalla en lugar de la sesión de escritorio y está sujeto a inconsistencias. En lightdmDebian, los valores provienen de los nombres de los archivos debajo /usr/share/xsessions/. DESKTOP_SESSIONrefleja el entorno del escritorio si se realiza una selección específica al iniciar sesión, sin embargo, lightdm-xsessionsiempre se usa la sesión predeterminada.
GDMSESSIONes otra opción, pero parece tener una situación similar (es el mismo valor que DESKTOP_SESSIONpara mí).
XDG_CURRENT_DESKTOPparece una buena opción, sin embargo, actualmente no está en el estándar XDG y, por lo tanto, no siempre se implementa. Ver aquí para una discusión de esto. Esta respuesta muestra sus valores para diferentes distribuciones / escritorios, también puedo confirmar que actualmente no está disponible para mí en XFCE.
La alternativa razonable para XDG_CURRENT_DESKTOPno existir sería intentarlo XDG_DATA_DIRS. Siempre que los archivos de datos para el entorno de escritorio estén instalados en un directorio con su nombre, este enfoque debería funcionar. ¡Esperemos que este sea el caso para todas las distribuciones / escritorios!
Las siguientes pruebas (con GNU grep) para XFCE, KDE y Gnome:
echo "$XDG_DATA_DIRS" | grep -Eo 'xfce|kde|gnome'
POSIX compatible:
echo "$XDG_DATA_DIRS" | sed 's/.*\(xfce\|kde\|gnome\).*/\1/'
Para combinar con la comprobación 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"