Estoy escribiendo un bashscript 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

xplanety 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_SESSIONes que lo configura el administrador de pantalla en lugar de la sesión de escritorio y está sujeto a inconsistencias. EnlightdmDebian, 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 queDESKTOP_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 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-filetambién es una buena herramienta para ver dónde se instalan los distintos escritorios.XDG_DATA_DIRSno 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_DESKTOPvariable.Método # 2 - wmctrl
También existe este método que hace uso de
wmctrl.Referencias
fuente
$GDMSESSIONme 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_SESSIONen xfce.default(mint 15)defaultpor esto. Una instalación predeterminada de GNOME 3.$DESKTOP_SESSIONmuestradefaultpara 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.2que tengoUNKNOWN. No tengo ningún resultado quegnome-session --versionfuncione para mí,gnome-shell --version | awk '{print $3}'porque tampoco obtuve nadaps -e | grep -E '^.* gnome-session$'. Esto parece ser debido-bal final degnome-session-b. Eliminando las$obras o simplementeps -e | grep 'gnome-session'. Con estos cambios, el script está funcionando. TengoGNOME 3.26.2Eso 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, regresaupara Unity yxpara XFCE. Esperemos que algunas personas intervengan para KDE y otros escritorios.echo ${DESKTOP_SESSION} kde-plasma-safepara mi KDE. Whyever "safe" ...Si la variable ambiental
XDG_CURRENT_DESKTOPestá disponible, debería decírselo.fuente
Podrías buscar
Xorgprocesos 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-managerel 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,
xmonaden Gnome), por lo que esto no es robusto. El mejor para buscar es probablemente el que administra el escritorio real, por ejemplo,xfdesktopo cualquier elemento del entorno de escritorio que realmente necesite para que su script funcione :)Ejemplo
Aquí hay un ejemplo usando procps-ng (
-Cy--ppidno 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
unknownen Ubuntu.another_desktopresultado 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_DESKTOPcuando se define esta variable. Si no,$XDG_DATA_DIRSpuede 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_SESSIONdalightdm-xsessionque es una amalgama delightdmyx-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_SESSIONDESKTOP_SESSIONrealidad diréxfceognomeEsto 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