El principal problema con la comprobación DESKTOP_SESSION
es que lo configura el administrador de pantalla en lugar de la sesión de escritorio y está sujeto a inconsistencias. En lightdm
Debian, los valores provienen de los nombres de los archivos debajo /usr/share/xsessions/
. DESKTOP_SESSION
refleja el entorno del escritorio si se realiza una selección específica al iniciar sesión, sin embargo, lightdm-xsession
siempre se usa la sesión predeterminada.
GDMSESSION
es otra opción, pero parece tener una situación similar (es el mismo valor que DESKTOP_SESSION
para mí).
XDG_CURRENT_DESKTOP
parece 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_DESKTOP
no 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"