Cómo determinar qué administrador de ventanas se está ejecutando

180

¿Hay alguna forma (como un comando o una variable de entorno) para determinar qué administrador de ventanas se está ejecutando activamente en la sesión actual?

Anónimo
fuente

Respuestas:

145

Si ha wmctrlinstalado, la primera línea de salida del comando

    wmctrl -m

le mostrará el nombre del administrador de ventanas. Si no lo ha wmctrlinstalado, use el siguiente comando para instalarlo:

    sudo apt-get install wmctrl

Nota, man wmctrl(es decir, la manpágina para wmctrl) dice en parte:

-m Muestra información sobre el administrador de ventanas ...

En mi sistema Ubuntu 11.10 / Linux 3.0.0-14-generic # 23-Ubuntu x86_64 / metacity 2.34.1, la primera línea de salida de wmctrl -mfue: Name: Metacity
mientras se echo $DESKTOP_SESSIONmuestra ubuntu-2dy se echo $XDG_CURRENT_DESKTOPmuestra Unity.

En un nuevo Ubuntu 15.10 instalación de Ubuntu desktopsoftware en un viejo ordenador portátil, la primera línea de salida wmctrl -mfue: Name: Compiz
mientras que las DESKTOP_SESSIONy XDG_CURRENT_DESKTOPlos valores eran ubuntuyUnity

James Waldby - jwpat7
fuente
44
Lamentablemente, esto no funciona a través de ssh incluso si X11 está habilitado.
Sridhar Sarnobat
1
@ Sridhar-Sarnobat en ubuntu 15.04, la ejecución ssh -Y {host} 'wmctrl -m'devuelve algunos valores (por ejemplo, "Nombre: Compiz" y varias N / A), pero tiene sentido que sshtenga información limitada sobre el administrador de ventanas.
Michael
en debian ejecutando canela, esto no funciona. la salida de wmctrl -m es Name: Mutter (Muffin) mientras $ XDG_CURRENT_DESKTOP = X-Cinnamon
Floyd el
En Xubuntu Wily, ejecutando Window Maker 0.95.6 - wmctrl informa N / A para todas las entradas. GDMSESSION está configurado en wmaker-common pero XDG_CURRENT_DESKTOP no está configurado en absoluto.
Mei
@Mei, ¿tienes Window Maker ejecutándose en algún otro sistema que puedas comparar? Además, ¿funciona bien wmctrl -d(Listar todos los escritorios administrados por el administrador de ventanas) o wmctrl -l(Listar las ventanas administradas por el administrador de ventanas) en Xubuntu Wily con Window Maker?
James Waldby - jwpat7
102

En los sistemas Linux Probé variables de entorno XDG_CURRENT_DESKTOPy GDMSESSIONy obtuve los siguientes resultados.

Puede usar esta línea para obtener la salida:

printf 'Desktop: %s\nSession: %s\n' "$XDG_CURRENT_DESKTOP" "$GDMSESSION"

Ubuntu 18.04 (Ubuntu)

  • XDG_CURRENT_DESKTOP=ubuntu:GNOME
  • GDMSESSION=ubuntu

Ubuntu 18.04 (Ubuntu en Wayland)

  • XDG_CURRENT_DESKTOP=ubuntu:GNOME
  • GDMSESSION=ubuntu-wayland

Ubuntu 16.04


Unidad (7)

  • XDG_CURRENT_DESKTOP=Unity
  • GDMSESSION=ubuntu

Ubuntu 14.04


Unidad corriendo con Mir

  • XDG_CURRENT_DESKTOP=Unity
  • GDMSESSION=ubuntu

Nota MIR_SERVER_NAME también está configurado

  • MIR_SERVER_NAME=session-$NUMBER

Unidad corriendo sin Mir

  • XDG_CURRENT_DESKTOP=Unity
  • GDMSESSION=ubuntu

XFCE

  • XDG_CURRENT_DESKTOP=XFCE
  • GDMSESSION=xfce

Ubuntu 12.04


KDE

  • XDG_CURRENT_DESKTOP=
  • GDMSESSION=kde-plasma

Unidad 3d

  • XDG_CURRENT_DESKTOP=Unity
  • GDMSESSION=ubuntu

Unidad 2d

  • XDG_CURRENT_DESKTOP=Unity
  • GDMSESSION=ubuntu-2d

Gnomo

  • XDG_CURRENT_DESKTOP=GNOME
  • GDMSESSION=gnome-shell

Gnomo clásico

  • XDG_CURRENT_DESKTOP=GNOME
  • GDMSESSION=gnome-classic

Gnome Classic (sin efectos)

  • XDG_CURRENT_DESKTOP=GNOME
  • GDMSESSION=gnome-fallback

Otras distribuciones basadas en Ubuntu


Menta 13 (Canela)

  • XDG_CURRENT_DESKTOP=GNOME
  • GDMSESSION=cinnamon

Menta 16 (edición KDE)

  • XDG_CURRENT_DESKTOP=KDE
  • GDMSESSION=default

Menta 17 (Canela)

  • XDG_CURRENT_DESKTOP=X-Cinnamon
  • GDMSESSION=default

Lubuntu 12.04

  • XDG_CURRENT_DESKTOP=LXDE
  • GDMSESSION=Lubuntu

Wasta 14.04 / 18.04

  • XDG_CURRENT_DESKTOP=X-Cinnamon
  • GDMSESSION=cinnamon

Wasta 14.04 usando el escritorio Gnome.

  • XDG_CURRENT_DESKTOP=GNOME
  • GDMSESSION=gnome

Ubuntu Mate 18.04

  • XDG_CURRENT_DESKTOP=MATE
  • GDMSESSION=mate

Xubuntu 18.04

  • XDG_CURRENT_DESKTOP=XFCE
  • GDMSESSION=xubuntu
Tom
fuente
44
Menta 13 (Canela): XDG_CURRENT_DESKTOP = GNOME, GDMSESSION = canela
rik-shaw
1
Lubuntu 12.04: XDG_CURRENT_DESKTOP = LXDE, GDMSESSION = Lubuntu
rik-shaw
¿Qué pasa con $ DESKTOP_SESSION? Como solución de respaldo :)
Savvas Radevic
1
¿Qué pasa si no uso GDM?
Robert Siemer
66
¡Y además no responde qué gestor de ventanas uso!
Robert Siemer
42

En el terminal escriba envpara ver todas las variables de entorno. Algunos de ellos son:

XDG_CURRENT_DESKTOP : le indica qué entorno de escritorio está utilizando

GDMSESSION : le indica qué opción seleccionó de lightdm greeter para iniciar sesión.

Para usarlos, vaya a la terminal y escriba:

echo $XDG_CURRENT_DESKTOP

(Producirá, por ejemplo, 'unidad' si está utilizando Unity)

o

echo $GDMSESSION  

(Producirá, por ejemplo, 'ubuntu' si seleccionó ubuntu en el inicio de sesión o 'ubuntu-2d' si seleccionó ese en el inicio de sesión).

Tiene otros si se mira de cerca a la salida del envcomo DESKTOP_SESSION y COMPIZ_CONFIG_PROFILE

Dado que lo que está buscando es el nombre de qué Administrador de ventanas está en uso, la única forma en que veo cómo obtener esto es buscando en la lista de procesos. Para hacer esto hay un comando llamado pgrep( Wikipedia ). Hice lo siguiente para obtener el nombre ya que el parámetro -l agrega la ID del proceso:

pgrep -l compiz |cut -d " " -f2Como el proceso lo ejecuta el mismo usuario, no es necesario prefijar la parte sudo. Luego puede usar esto para crear un script que realice una acción basada en el Administrador de ventanas.

Para buscar otros tipos, basta con cambiar la palabra compiza otro como mutter, kwinetc ..

Luis Alvarado
fuente
2
Esos solo me dicen el nombre de la sesión y el entorno de escritorio. Ejemplo, dice "GNOME", que es un entorno de escritorio que puede usar Metacity, Mutter, Compiz u otros administradores de ventanas. Dice "gnome-classic", que es el nombre de una sesión, no existe dicho administrador de ventanas con ese nombre.
Anónimo
1
Ahí tienes. Encontré un comando que puede ayudar con la lista de procesos. pgrep. Llegué a esa parte, al menos le muestra el nombre del administrador de ventanas si se encuentra. Tratando de verificar si puedo agregarlos todos allí. Su pregunta es muy buena ya que Ubuntu 11.10 confunde un poco al usar Compiz (o murmurar si es Gnome 3.x), por lo que sería bueno señalar el Administrador de ventanas real que se usa en Unity.
Luis Alvarado
$XDG_CURRENT_DESKTOPes el entorno de escritorio actual, NO el administrador de ventanas.
Ken Sharp
24

Me pareció pstreede gran ayuda.

Instalación

sudo apt-get install pstree

salida

Esto es lo que conseguí.

 ├─lightdm─┬─Xorg───2*[{Xorg}]
 │         ├─lightdm─┬─gnome-session─┬─bluetooth-apple───2*[{bluetooth-apple}]
 │         │         │               ├─compiz─┬─sh───gtk-window-deco───2*[{gtk-window-deco}]
 │         │         │               │        └─5*[{compiz}]
 │         │         │               ├─deja-dup-monito───2*[{deja-dup-monito}]
 │         │         │               ├─gnome-fallback-───2*[{gnome-fallback-}]
 │         │         │               ├─gnome-screensav───2*[{gnome-screensav}]
 │         │         │               ├─gnome-settings-───2*[{gnome-settings-}]
 │         │         │               ├─nautilus───2*[{nautilus}]
 │         │         │               ├─nm-applet───2*[{nm-applet}]
 │         │         │               ├─polkit-gnome-au───2*[{polkit-gnome-au}]
 │         │         │               ├─ssh-agent
 │         │         │               ├─telepathy-indic───2*[{telepathy-indic}]
 │         │         │               ├─update-notifier───2*[{update-notifier}]
 │         │         │               ├─vino-server───2*[{vino-server}]
 │         │         │               ├─zeitgeist-datah───{zeitgeist-datah}
 │         │         │               └─3*[{gnome-session}]
 │         │         └─{lightdm}
 │         └─2*[{lightdm}]
Sridhar Sarnobat
fuente
1
Esto me llevó allí con mi sistema de compilación personalizada.
jc__
11
xprop -id $(xprop -root -notype | awk '$1=="_NET_SUPPORTING_WM_CHECK:"{print $5}') -notype -f _NET_WM_NAME 8t 
ruario
fuente
1
¿Puedes explicar cómo funciona esto? Además, creo que te estás perdiendo un )al final.
Louis Matthijssen
@LouisMatthijssen 1. xprop -root -notypemuestra todas las propiedades de la ventana raíz (y omite los tipos para facilitar el análisis), la salida se envía a awktravés de la tubería; 2. la awkinstrucción $1=="_NET[blah]CK:"{print $5}'compara la primera columna de cada fila de la entrada que ingresó a través de la tubería con una cadena dada y si encuentra la coincidencia, ejecuta el código entre paréntesis que imprime la quinta columna de esta fila; solo sucede (completamente por accidente, Apuesto) a ser el ID del átomo "_NET_SUPPORTING_WM_CHECK"; 3. Esta ID se usa nuevamente para obtener las propiedades del Administrador de Windows conxprop -id
cprn
4

He estado probando también con KDE y mi conclusión es:

a) De forma gráfica, con HardInfo: la respuesta normalmente está en "Sistema operativo"> ​​"Entorno de escritorio", pero si no puede ver "Variables de entorno". HardInfo está listo con todas las distribuciones probadas, excepto la que tiene KDE, pero se puede instalar fácil y rápidamente (solo 2 paquetes en Linux Mint 13).

b) Línea de comandos, con este comando: ps -A | egrep -i "gnome|kde|mate|cinnamon|lx|xfce|jwm". El elemento que aparece en más líneas debería ser la respuesta (si hay un sorteo, el elemento con "sesión" debería ser la solución).

Msedfi
fuente
XFCE también tiene varios gnome-...procesos (y un éxito con kde kdevtmpfs)
Xen2050
2

Nada de lo anterior realmente funcionó para mí, solo quería saber si tenía a Gnome ejecutándose como mi sesión de escritorio actual.

Esto es lo que funcionó, abrir una terminal

lsb_release -a

(para verificar qué sabor o versión había instalado en mi máquina UBUNTU)

ls /usr/bin/*session

(inicia qué sesión de escritorio / entorno de escritorio actualmente en uso)

gnome-shell --version 

(para saber qué versión de gnome está instalada)

NanuBuria
fuente
1
#! /bin/bash
#  (GPL3+) Alberto Salvia Novella (es20490446e.wordpress.com)


windowManagerName () {
    window=$(xprop -root -notype)
    identifier=$(echo "${window}" | awk '$1=="_NET_SUPPORTING_WM_CHECK:"{print $5}')
    attributes=$(xprop -id "${identifier}" -notype -f _NET_WM_NAME 8t)

    echo "${attributes}" |
        grep "_NET_WM_NAME = " |
        cut --delimiter=' ' --fields=3 |
        cut --delimiter='"' --fields=2
}


windowManagerName

O en una línea:

id = $ (xprop -root -notype | awk '$ 1 == "_ NET_SUPPORTING_WM_CHECK:" {print $ 5}'); xprop -id "$ {id}" -notype -f _NET_WM_NAME 8t | grep "_NET_WM_NAME =" | cortar --delimitador = '' --campos = 3 | cortar --delimitador = '"' --campos = 2

Alberto Salvia Novella
fuente
0

Esto es posible con dbus y el Servicio de Cuentas (ambos por defecto en Ubuntu).

$ qdbus --system org.freedesktop.Accounts \                                                                
> /org/freedesktop/Accounts/User1000 \                                                                                     
> org.freedesktop.Accounts.User.XSession                                                                                   
ubuntu

Vale la pena señalar que he probado esto al iniciar sesión a través de lightdm (que es la pantalla de inicio de sesión gráfica), detectó un escritorio clásico como blackbox, y obviamente detecta Unity. Sospecho que este es un valor de lo que el usuario selecciona en la pantalla de inicio de sesión como sesión, por eso es un poco más fácil usar esa verificación de procesos

Sergiy Kolodyazhnyy
fuente
0

Guión

La siguiente secuencia de comandos resultó como la mejor respuesta a un semejante pregunta que he publicado sobre al unix.se . También funciona muy bien con Unity y LXDE.

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"
Serge Stroobandt
fuente
0

Puedes usar la herramienta llamada inxi. Se puede obtener de los repositorios de Ubuntu por:

sudo apt install inxi

o desde github: https://github.com/smxi/inxi

Simplemente ejecute el comando de la siguiente manera:

inxi -Sx
System:    Host: blackhole Kernel: 5.1.15-050115-lowlatency x86_64 bits: 64 compiler: gcc v: 8.3.0
           Desktop: i3 4.16.1-178-g31c0f1b8 Distro: Ubuntu 19.04 (Disco Dingo)

Tenga en cuenta la Desktop: i3parte. En mi caso, el administrador de ventanas que uso es i3.

La opción -Smuestra información del sistema y xagrega información sobre el administrador de ventanas.

Michal Przybylowicz
fuente
-3

Solo puedo pensar en buscar administradores de ventanas conocidos en los procesos en ejecución. Solía ​​haber una clave en gconf que se configuró en el administrador de ventanas preferido, pero está en desuso desde Gnome 2.12.

Entonces, si esto es para fines de programación, le sugiero que investigue todos los administradores de ventanas de Linux; algunos populares son:

  • gnome-shell *
  • compiz
  • metaciudad
  • murmurar
  • pez sierra

Tendría que ejecutar una verificación para cada uno con el comando pgrep -l $WINDOW_MANAGER, donde $WINDOW_MANAGERestá el nombre del administrador de ventanas que desea verificar. El pgrepcomando verifica los procesos en ejecución.

No estoy 100% seguro de si Gnome Shell se considera un administrador de ventanas; El resto de los gestores de ventanas que obtuve de una lista en el /usr/bin/gnome-wmscript. De hecho, este script debería ser utilizable (ya que está presente en una instalación limpia) pero en mi caso intenta ejecutarse, compizque no es mi administrador de ventanas predeterminado (no en mi sesión de Gnome).

EDITAR:

Bueno, el comentario de @Anarci parece ser más preciso. En mi caso se demostró gnome-shell.

Severo Raz
fuente
1
Parece que pgrep admite expresiones regulares, por lo que se puede usar un patrón con alternancias. pgrep -l "compiz|metacity|mutter|kwin|sawfish|fluxbox|openbox|xmonad"
Anónimo
1
Eso no es suficiente: ¿qué pasa si el usuario ejecuta varias sesiones X con diferentes administradores? Al menos debe verificar que el administrador de ventanas esté funcionando en la pantalla que le interesa (puede hacerlo examinando $DISPLAYen su entorno).
Gilles
Ubuntu 18.04 LTS Desktop: Unidad: Unity7: ubuntu Sesión: unity
user2584621