Saltar al contenido

¿Cómo detectar el entorno de escritorio en un script bash?

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.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *