Come determinare quale gestore delle finestre è in esecuzione


180

Esiste un modo (come un comando o una variabile ambientale) per determinare quale gestore delle finestre è quello attualmente in esecuzione nella sessione corrente?

Risposte:


145

Se è stato wmctrlinstallato, la prima riga di output dal comando

    wmctrl -m

ti mostrerà il nome del gestore delle finestre. Se non hai wmctrlinstallato, usa il seguente comando per installarlo:

    sudo apt-get install wmctrl

Nota, man wmctrl(cioè la manpagina per wmctrl) dice in parte:

-m Visualizza le informazioni sul gestore delle finestre ...

Sul mio sistema Ubuntu 11.10 / Linux 3.0.0-14-generic # 23-Ubuntu x86_64 / metacity 2.34.1, la prima linea di output è wmctrl -mstata: Name: Metacity
mentre echo $DESKTOP_SESSIONmostrata ubuntu-2de echo $XDG_CURRENT_DESKTOPmostrata Unity.

Su una nuova Ubuntu 15.10 di installazione del Ubuntu desktopsoftware su un vecchio computer portatile, la prima linea di uscita dal wmctrl -mera: Name: Compiz
mentre i DESKTOP_SESSIONei XDG_CURRENT_DESKTOPvalori erano ubuntueUnity


4
Sfortunatamente questo non funziona su ssh anche se X11 è abilitato.
Sridhar Sarnobat,

1
@ Sridhar-Sarnobat su Ubuntu 15.04, l'esecuzione ssh -Y {host} 'wmctrl -m'restituisce alcuni valori (ad esempio, "Nome: Compiz" e diversi N / A), ma ha senso che sshavrebbe informazioni limitate sul gestore delle finestre.
michael

su debian che esegue cannella, questo non funziona. l'output di wmctrl -m è Name: Mutter (Muffin) mentre $ XDG_CURRENT_DESKTOP = X-Cinnamon
Floyd

Su Xubuntu Wily, eseguendo Window Maker 0.95.6 - wmctrl riporta N / D per tutte le voci. GDMSESSION è impostato su wmaker-common ma XDG_CURRENT_DESKTOP non è impostato affatto.
Mei,

@Mei, hai Window Maker in esecuzione su altri sistemi che puoi confrontare? Inoltre, wmctrl -d(Elenca tutti i desktop gestiti dal gestore delle finestre) o wmctrl -l(Elenca le finestre gestite dal gestore delle finestre) funzionano bene su Xubuntu Wily con Window Maker?
James Waldby - jwpat7,

102

Sui sistemi Linux ho provato le variabili d'ambiente XDG_CURRENT_DESKTOPe GDMSESSIONed ho ottenuto i seguenti risultati.

Puoi usare questa linea per ottenere l'output:

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 su Wayland)

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

Ubuntu 16.04


Unity (7)

  • XDG_CURRENT_DESKTOP=Unity
  • GDMSESSION=ubuntu

Ubuntu 14.04


Unità in esecuzione con Mir

  • XDG_CURRENT_DESKTOP=Unity
  • GDMSESSION=ubuntu

Nota Anche MIR_SERVER_NAME è impostato

  • MIR_SERVER_NAME=session-$NUMBER

Unità in esecuzione senza Mir

  • XDG_CURRENT_DESKTOP=Unity
  • GDMSESSION=ubuntu

XFCE

  • XDG_CURRENT_DESKTOP=XFCE
  • GDMSESSION=xfce

Ubuntu 12.04


KDE

  • XDG_CURRENT_DESKTOP=
  • GDMSESSION=kde-plasma

Unity 3d

  • XDG_CURRENT_DESKTOP=Unity
  • GDMSESSION=ubuntu

Unità 2d

  • XDG_CURRENT_DESKTOP=Unity
  • GDMSESSION=ubuntu-2d

gnomo

  • XDG_CURRENT_DESKTOP=GNOME
  • GDMSESSION=gnome-shell

Gnome Classic

  • XDG_CURRENT_DESKTOP=GNOME
  • GDMSESSION=gnome-classic

Gnome Classic (nessun effetto)

  • XDG_CURRENT_DESKTOP=GNOME
  • GDMSESSION=gnome-fallback

Altre distribuzioni basate su Ubuntu


Menta 13 (Cannella)

  • XDG_CURRENT_DESKTOP=GNOME
  • GDMSESSION=cinnamon

Menta 16 (edizione KDE)

  • XDG_CURRENT_DESKTOP=KDE
  • GDMSESSION=default

Menta 17 (Cannella)

  • 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 il desktop 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

4
Menta 13 (Cannella): XDG_CURRENT_DESKTOP = GNOME, GDMSESSION = cannella
rik-shaw,

1
Lubuntu 12.04: XDG_CURRENT_DESKTOP = LXDE, GDMSESSION = Lubuntu
rik-shaw l'

Che dire di $ DESKTOP_SESSION? Come soluzione di backup :)
Savvas Radevic,

1
Cosa succede se non utilizzo GDM?
Robert Siemer,

6
E inoltre non risponde a quale gestore di finestre che uso!
Robert Siemer,

42

Nel terminale digitare envper visualizzare tutte le variabili di ambiente. Alcuni di loro sono:

XDG_CURRENT_DESKTOP : indica quale ambiente desktop si sta utilizzando

GDMSESSION - Indica quale opzione è stata selezionata dalla schermata di benvenuto di lightdm per accedere.

Per usarli, vai al terminale e digita:

echo $XDG_CURRENT_DESKTOP

(Verrà prodotto, ad esempio, "unità" se si utilizza Unity)

o

echo $GDMSESSION  

(Verrà generato ad esempio 'Ubuntu' se hai selezionato Ubuntu nel login o 'Ubuntu-2d' se hai selezionato quello nel login.)

Ne hai altri se guardi più da vicino l'output di envcome DESKTOP_SESSION e COMPIZ_CONFIG_PROFILE

Dal momento che quello che stai cercando è il nome di ciò che Window Manager è in uso, l'unico modo in cui vedo come ottenerlo è guardando nell'elenco dei processi. Per fare questo c'è un comando chiamato pgrep( Wikipedia ). Ho fatto quanto segue per ottenere il nome poiché il parametro -l aggiunge l'ID processo:

pgrep -l compiz |cut -d " " -f2poiché il processo è in esecuzione dallo stesso utente non è necessario aggiungere il prefisso alla parte sudo. È quindi possibile utilizzare questo per creare uno script che esegue un'azione basata su Window Manager.

Per cercare altri tipi, basta cambiare la parola compizad un altro come mutter, kwin, ecc ..


2
Mi dicono solo il nome della sessione e l'ambiente desktop. Esempio dice "GNOME" che è un ambiente desktop che può usare Metacity, Mutter, Compiz o altri gestori di finestre. Dice "gnome-classic" che è un nome di sessione, non esiste un tale gestore di finestre con quel nome.
Anonimo il

1
Ecco qua Trovato un comando che può aiutare con l'elenco dei processi. pgrep. Arrivato a quella parte, almeno ti mostra il nome del gestore di finestre se trovato. Sto cercando di verificare se riesco ad aggiungerli tutti insieme. La tua domanda è molto buona dal momento che Ubuntu 11.10 confonde un po 'usando Compiz (o borbotta se quando Gnome 3.x) quindi sarebbe bello sottolineare l'attuale Window Manager che viene utilizzato in Unity.
Luis Alvarado,

$XDG_CURRENT_DESKTOPè l'ambiente desktop corrente, NON il gestore delle finestre.
Ken Sharp,

24

Ho trovato pstreeun grande aiuto.

Installazione

sudo apt-get install pstree

produzione

Questo è quello che ho ottenuto.

 ├─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}]

1
questo mi ha portato lì con il mio sistema buildroot personalizzato.
jc__

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

1
Puoi spiegare come funziona? Inoltre, penso che ti manchi un )alla fine.
Louis Matthijssen,

@LouisMatthijssen 1. xprop -root -notypevisualizza tutte le proprietà della finestra di root (e omette i tipi per un analisi più semplice), l'output viene inviato awktramite pipe; 2. L' awkistruzione $1=="_NET[blah]CK:"{print $5}'confronta la prima colonna di ogni riga dell'input che ha ricevuto attraverso la pipe con una determinata stringa e se trova la corrispondenza, esegue il codice tra parentesi che stampa la quinta colonna da questa riga - proprio così accade (interamente per caso, Scommetto) di essere l'ID dell'atomo "_NET_SUPPORTING_WM_CHECK"; 3. questo ID viene quindi riutilizzato per ottenere le proprietà di Windows Manager conxprop -id
cprn

4

Ho provato anche con KDE e la mia conclusione è:

a) Modo grafico, con HardInfo: la risposta è normalmente in "Sistema operativo"> ​​"Ambiente desktop", ma in caso contrario è possibile consultare "Variabili d'ambiente". HardInfo è pronto con tutte le distribuzioni testate, tranne quella con KDE, ma può essere installato facilmente e rapidamente (solo 2 pacchetti in Linux Mint 13).

Riga di comando b), con questo comando: ps -A | egrep -i "gnome|kde|mate|cinnamon|lx|xfce|jwm". L'elemento che appare in più righe dovrebbe essere la risposta (in caso di pareggio l'elemento con "sessione" dovrebbe essere la soluzione).


XFCE ha anche diversi gnome-...processi (e un colpo kde con kdevtmpfs)
Xen2050

2

Nessuna delle precedenti ha funzionato per me, volevo solo sapere se avevo Gnome in esecuzione come sessione desktop corrente.

Questo è ciò che ha funzionato, aprire un terminale

lsb_release -a

(per verificare quale sapore o versione avevo installato sul mio computer UBUNTU)

ls /usr/bin/*session

(avvia quale sessione desktop / ambiente desktop attualmente in uso)

gnome-shell --version 

(per scoprire quale versione di gnome è installata)


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 in una riga:

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 =" | cut --delimiter = '' --fields = 3 | cut --delimiter = '"' --fields = 2


0

Questo è possibile con dbus e il servizio di account (entrambi di default in Ubuntu).

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

Vale la pena notare che l'ho provato con l'accesso tramite lightdm (che è la schermata di accesso grafica), ha rilevato un desktop classico come blackbox e ovviamente rileva Unity. Ho il sospetto che questo sia un valore di ciò che l'utente seleziona nella schermata di accesso come sessione, ecco perché è un po 'più facile usare quel controllo dei processi


0

copione

Lo script che segue risultata la migliore risposta a una simile domanda che ho postato sopra a unix.se . Funziona alla grande anche con Unity e 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"

0

È possibile utilizzare lo strumento chiamato inxi. Può essere ottenuto dai repository Ubuntu da:

sudo apt install inxi

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

Basta eseguire il comando come segue:

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)

Nota la Desktop: i3parte. Nel mio caso il gestore delle finestre che uso è i3.

L'opzione -Svisualizza le informazioni di sistema e xaggiunge informazioni sul gestore delle finestre.


-3

Posso solo pensare di controllare i window manager noti nei processi in esecuzione. C'era una chiave in gconf che era impostata sul gestore delle finestre preferito, ma è obsoleta da Gnome 2.12.

Quindi, se questo è a scopo di programmazione, ti suggerisco di cercare tutti i window manager di Linux; alcuni popolari sono:

  • gnome-shell *
  • compiz
  • metacity
  • borbottio
  • pesce sega

Dovresti eseguire un controllo per ognuno con il comando pgrep -l $WINDOW_MANAGER, dove si $WINDOW_MANAGERtrova il nome del gestore di finestre che vuoi controllare. Il pgrepcomando controlla i processi in esecuzione.

Non sono sicuro al 100% se Gnome Shell è considerato un gestore di finestre; il resto dei gestori di finestre che ho ottenuto da un elenco nello /usr/bin/gnome-wmscript. Questo script infatti dovrebbe essere utilizzabile (dal momento che è presente su un'installazione pulita) ma nel mio caso tenta di eseguire compizche non è il mio gestore di finestre predefinito (non nella mia sessione di Gnome).

MODIFICARE:

Bene, il commento di @Anarci sembra essere più accurato. Nel mio caso ha mostrato gnome-shell.


1
Sembra che pgrep supporti regex in modo da poter usare un modello con alternanze. pgrep -l "compiz|metacity|mutter|kwin|sawfish|fluxbox|openbox|xmonad"
Anonimo il

1
Non è abbastanza: cosa succede se l'utente sta eseguendo diverse sessioni X con diversi gestori? Dovresti almeno controllare che il gestore di finestre stia funzionando sul display che ti interessa (puoi farlo esaminando $DISPLAYnel suo ambiente).
Gilles,

Ubuntu 18.04 LTS Desktop: Unity: Unity7: ubuntu Sessione: unità
user2584621
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.