Estoy escribiendo un bash
script que necesita saber qué entorno de escritorio (XFCE, Unity, KDE, LXDE, Mate, Cinnamon, GNOME2, GNOME3, ...) se está ejecutando.
¿Cómo puedo obtener esa información?
bash
desktop-environment
bash-script
Serge Stroobandt
fuente
fuente
xplanet
y me gustaría actualizar automáticamente el fondo del escritorio con comandos específicos para el entorno de escritorio. Si desea publicar una respuesta a ese problema , siga el enlace.Respuestas:
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. Enlightdm
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 queDESKTOP_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 intentarloXDG_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:
POSIX compatible:
Para combinar con la comprobación
XDG_CURRENT_DESKTOP
:fuente
apt-file
también es una buena herramienta para ver dónde se instalan los distintos escritorios.XDG_DATA_DIRS
no existe o simplemente no contiene nada útil?||
estilo. Aún así, esta pregunta se ha hecho en otros sitios de SE, creo que tenemos el mejor conjunto de respuestas.Método # 1 - $ DESKTOP_SESSION
Creo que puedes averiguarlo interrogando la variable de entorno
$DESKTOP_SESSION
. No estoy del todo seguro de cuán ampliamente es compatible, pero en mis pruebas limitadas parece estar disponible en Fedora y Ubuntu.Otra opción es la
$XDG_SESSION_DESKTOP
variable.Método # 2 - wmctrl
También existe este método que hace uso de
wmctrl
.Referencias
fuente
$GDMSESSION
me pone nervioso, ya que es probable que solo esté orientado a DE que estén utilizando GDM o DE basado en GNOME. GDM = Administrador de pantalla de GNOME.DESKTOP_SESSION
en xfce.default
(mint 15)default
por esto. Una instalación predeterminada de GNOME 3.$DESKTOP_SESSION
muestradefault
para KDE bajo Fedora 20.Puedes usar este script bash . Puede detectar el nombre y la versión del entorno de escritorio.
fuente
ps -e | grep -E '^.* xfce4-session$' > /dev/null
(($? == 0)) && ...
GNOME Shell 3.26.2
que tengoUNKNOWN
. No tengo ningún resultado quegnome-session --version
funcione para mí,gnome-shell --version | awk '{print $3}'
porque tampoco obtuve nadaps -e | grep -E '^.* gnome-session$'
. Esto parece ser debido-b
al final degnome-session-b
. Eliminando las$
obras o simplementeps -e | grep 'gnome-session'
. Con estos cambios, el script está funcionando. TengoGNOME 3.26.2
Eso probablemente depende de la situación. Si sabe qué administrador de pantalla se utiliza, puede ser que este coloque esta información en una variable de entorno.
Si ese no es el caso, entonces supongo que debe verificar cada DE que desea poder identificar. Todos ellos deben presentar sus propias variables de entorno.
fuente
echo ${DESKTOP_SESSION:0:1}
haría el truco. Por lo que pude probar, regresau
para Unity yx
para XFCE. Esperemos que algunas personas intervengan para KDE y otros escritorios.echo ${DESKTOP_SESSION} kde-plasma-safe
para mi KDE. Whyever "safe" ...Si la variable ambiental
XDG_CURRENT_DESKTOP
está disponible, debería decírselo.fuente
Podrías buscar
Xorg
procesos en ejecución . El padre de esto debería ser su administrador de pantalla. Sus descendientes deben dar una indicación de qué entorno de escritorio se está ejecutando. En mi sistema, el administrador de visualización se ejecuta solo (con diferentes parámetros). Esto generax-session-manager
el enlace simbólico axfce4-session
. Esto puede ser suficiente, pero todos los elementos secundarios de esto están relacionados con mi entorno de escritorio. Encontrarlos a través del árbol de procesos debería ser la mejor manera de excluir elementos de otros sistemas de ventanas iniciados por varios programas (o quizás deliberadamente).Mi primer pensamiento fue que sería mejor buscar el administrador de ventanas asociado con su entorno de escritorio, pero a menudo se puede configurar uno diferente para que se ejecute (por ejemplo,
xmonad
en Gnome), por lo que esto no es robusto. El mejor para buscar es probablemente el que administra el escritorio real, por ejemplo,xfdesktop
o cualquier elemento del entorno de escritorio que realmente necesite para que su script funcione :)Ejemplo
Aquí hay un ejemplo usando procps-ng (
-C
y--ppid
no son POSIX). Se supone que es solo una instancia deXorg
.Este es solo un ejemplo que funciona para el escritorio xfce. Un ejemplo de trabajo completo requiere una investigación de los procesos que utiliza cada sistema de escritorio, así como la mayoría de las otras soluciones requieren una investigación sobre cómo se establecen las variables ambientales en otros sistemas de escritorio.
fuente
unknown
en Ubuntu.another_desktop
resultado inacabado .De todos los experimentos reportados en los numerosos comentarios, creo que es mi deber como OP dar una respuesta consensuada. (Tenga la seguridad de que me complacería revisar esta respuesta en caso de que haya datos contrastantes disponibles).
Por ahora, parece mejor tomar nuestra iniciativa
$XDG_CURRENT_DESKTOP
cuando se define esta variable. Si no,$XDG_DATA_DIRS
puede proporcionar la información deseada, más que la primera letra de${DESKTOP_SESSION:0:1}
.fuente
XDG_CURRENT_DESKTOP
. Creo que el principal problema con estas variables es que las establece el administrador de pantalla en lugar del entorno de escritorio y, por lo tanto, hay cierta inconsistencia. Cuando elijo una sesión por defecto (Xfce) con LightDMecho $DESKTOP_SESSION
dalightdm-xsession
que es una amalgama delightdm
yx-session-manager
, el proceso utilizado para iniciar mi escritorio (enlace simbólico axfce4-session
). Me imagino que instalar con una sesión predeterminada diferente solo usará un enlace simbólico diferente y producirá lo mismoDESKTOP_SESSION
DESKTOP_SESSION
realidad diréxfce
ognome
Esto funciona tanto en Ubuntu 18.10 (cósmico) [tipo lxqt] como en Mint 19 (tara) [tipo canela]:
Capture el resultado en una variable y ejecute más código necesario a través de una lógica analítica capaz (caso, si / entonces) que incluye cualquiera / todos los tipos reconocidos desde allí; y / o funcionan correctamente cuando se usan tipos no reconocidos.
fuente