Te sugerimos que revises esta resolución en un entorno controlado antes de pasarlo a producción, un saludo.
Solución:
El principal problema de comprobar el DESKTOP_SESSION
es que lo establece el administrador de pantalla en lugar de la sesión de escritorio y está sujeto a inconsistencias. Para lightdm
en Debian, los valores provienen de los nombres de los archivos bajo /usr/share/xsessions/
. DESKTOP_SESSION
refleja el entorno de escritorio si se realiza una selección específica al iniciar sesión, sin embargo, el lightdm-xsession
siempre se utiliza 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 se encuentra en el estándar XDG y, por lo tanto, no siempre se implementa. Vea 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 seria intentar XDG_DATA_DIRS
. Siempre que los archivos de datos para el entorno de escritorio estén instalados en un directorio que lleve su nombre, este enfoque debería funcionar. ¡Con suerte, este será el caso para todas las distribuciones / computadoras de escritorio!
Las siguientes pruebas (con GNU grep) para XFCE, KDE y Gnome:
echo "$XDG_DATA_DIRS" | grep -Eo 'xfce|kde|gnome'
Compatible con POSIX:
echo "$XDG_DATA_DIRS" | sed 's/.*(xfce|kde|gnome).*/1/'
Para combinar con cheque 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"
Método n. ° 1 – $ DESKTOP_SESSION
Creo que puedes averiguarlo interrogando la variable de entorno. $DESKTOP_SESSION
. No estoy del todo seguro de cuán ampliamente admitido es esto, pero en mis pruebas limitadas parece estar disponible en Fedora y Ubuntu.
$ echo $DESKTOP_SESSION
gnome
Otra eleccion es la $XDG_SESSION_DESKTOP
variable.
Método # 2 – wmctrl
También existe este método que hace uso de wmctrl
.
$ wmctrl -m
Name: GNOME Shell
Class: N/A
PID: N/A
Window manager's "showing the desktop" mode: N/A
Referencias
- Cómo determinar qué administrador de ventanas se está ejecutando
Puede utilizar este script bash. Puede detectar el nombre y la versión del entorno de escritorio.
#!/bin/bash
function detect_gnome()
awk 'print $2'`
DESKTOP="GNOME"
return 1
function detect_kde()
awk 'print $1'`
DESKTOP="KDE"
return 1
fi
function detect_unity()
grep -E 'unity-panel' > /dev/null
if [ $? -ne 0 ];
then
return 0
fi
VERSION=`unity --version
function detect_xfce()
ps -e
function detect_cinnamon()
awk 'print $2'`
DESKTOP="CINNAMON"
return 1
function detect_mate()
awk 'print $4'`
DESKTOP="MATE"
return 1
function detect_lxde()
awk 'print $2'
function detect_sugar()
if [ "$DESKTOP_SESSION" == "sugar" ];
then
VERSION=`python -c "from jarabe import config; print config.version"`
DESKTOP="SUGAR"
else
return 0
fi
DESKTOP="UNKNOWN"
if detect_unity;
then
if detect_kde;
then
if detect_gnome;
then
if detect_xfce;
then
if detect_cinnamon;
then
if detect_mate;
then
if detect_lxde;
then
detect_sugar
fi
fi
fi
fi
fi
fi
fi
if [ "$1" == '-v' ];
then
echo $VERSION
else
if [ "$1" == '-n' ];
then
echo $DESKTOP
else
echo $DESKTOP $VERSION
fi
fi
Si guardas alguna sospecha y disposición de progresar nuestro escrito eres capaz de ejecutar una disquisición y con gusto lo analizaremos.