Respuestas:
Si ha wmctrl
instalado, la primera línea de salida del comando
wmctrl -m
le mostrará el nombre del administrador de ventanas. Si no lo ha wmctrl
instalado, use el siguiente comando para instalarlo:
sudo apt-get install wmctrl
Nota, man wmctrl
(es decir, la man
pá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 -m
fue: Name: Metacity
mientras se echo $DESKTOP_SESSION
muestra ubuntu-2d
y se echo $XDG_CURRENT_DESKTOP
muestra Unity
.
En un nuevo Ubuntu 15.10 instalación de Ubuntu desktop
software en un viejo ordenador portátil, la primera línea de salida wmctrl -m
fue: Name: Compiz
mientras que las DESKTOP_SESSION
y XDG_CURRENT_DESKTOP
los valores eran ubuntu
yUnity
ssh -Y {host} 'wmctrl -m'
devuelve algunos valores (por ejemplo, "Nombre: Compiz" y varias N / A), pero tiene sentido que ssh
tenga información limitada sobre el administrador de ventanas.
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?
En los sistemas Linux Probé variables de entorno XDG_CURRENT_DESKTOP
y GDMSESSION
y obtuve los siguientes resultados.
Puede usar esta línea para obtener la salida:
printf 'Desktop: %s\nSession: %s\n' "$XDG_CURRENT_DESKTOP" "$GDMSESSION"
XDG_CURRENT_DESKTOP=ubuntu:GNOME
GDMSESSION=ubuntu
XDG_CURRENT_DESKTOP=ubuntu:GNOME
GDMSESSION=ubuntu-wayland
XDG_CURRENT_DESKTOP=Unity
GDMSESSION=ubuntu
XDG_CURRENT_DESKTOP=Unity
GDMSESSION=ubuntu
Nota MIR_SERVER_NAME también está configurado
MIR_SERVER_NAME=session-$NUMBER
XDG_CURRENT_DESKTOP=Unity
GDMSESSION=ubuntu
XDG_CURRENT_DESKTOP=XFCE
GDMSESSION=xfce
XDG_CURRENT_DESKTOP=
GDMSESSION=kde-plasma
XDG_CURRENT_DESKTOP=Unity
GDMSESSION=ubuntu
XDG_CURRENT_DESKTOP=Unity
GDMSESSION=ubuntu-2d
XDG_CURRENT_DESKTOP=GNOME
GDMSESSION=gnome-shell
XDG_CURRENT_DESKTOP=GNOME
GDMSESSION=gnome-classic
XDG_CURRENT_DESKTOP=GNOME
GDMSESSION=gnome-fallback
XDG_CURRENT_DESKTOP=GNOME
GDMSESSION=cinnamon
XDG_CURRENT_DESKTOP=KDE
GDMSESSION=default
XDG_CURRENT_DESKTOP=X-Cinnamon
GDMSESSION=default
XDG_CURRENT_DESKTOP=LXDE
GDMSESSION=Lubuntu
XDG_CURRENT_DESKTOP=X-Cinnamon
GDMSESSION=cinnamon
XDG_CURRENT_DESKTOP=GNOME
GDMSESSION=gnome
XDG_CURRENT_DESKTOP=MATE
GDMSESSION=mate
XDG_CURRENT_DESKTOP=XFCE
GDMSESSION=xubuntu
En el terminal escriba env
para 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 env
como 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 " " -f2
Como 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 compiz
a otro como mutter
, kwin
etc ..
$XDG_CURRENT_DESKTOP
es el entorno de escritorio actual, NO el administrador de ventanas.
Me pareció pstree
de gran ayuda.
sudo apt-get install pstree
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}]
xprop -id $(xprop -root -notype | awk '$1=="_NET_SUPPORTING_WM_CHECK:"{print $5}') -notype -f _NET_WM_NAME 8t
)
al final.
xprop -root -notype
muestra todas las propiedades de la ventana raíz (y omite los tipos para facilitar el análisis), la salida se envía a awk
través de la tubería; 2. la awk
instrucció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
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).
gnome-...
procesos (y un éxito con kde kdevtmpfs
)
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)
#! /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
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
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"
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: i3
parte. En mi caso, el administrador de ventanas que uso es i3
.
La opción -S
muestra información del sistema y x
agrega información sobre el administrador de ventanas.
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:
Tendría que ejecutar una verificación para cada uno con el comando pgrep -l $WINDOW_MANAGER
, donde $WINDOW_MANAGER
está el nombre del administrador de ventanas que desea verificar. El pgrep
comando 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-wm
script. De hecho, este script debería ser utilizable (ya que está presente en una instalación limpia) pero en mi caso intenta ejecutarse, compiz
que 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
.
pgrep -l "compiz|metacity|mutter|kwin|sawfish|fluxbox|openbox|xmonad"
$DISPLAY
en su entorno).