Domanda Come determinare quale gestore di finestre è in esecuzione


Esiste un modo (come un comando o una variabile ambientale) per determinare cosa gestore di finestre è quello che sta correndo attivamente nella sessione corrente?


151
2017-10-26 20:39


origine




risposte:


Se hai wmctrl installato, la prima riga di output dal comando

    wmctrl -m

ti mostrerà il nome del gestore di finestre. Se non lo hai wmctrl installato, utilizzare il seguente comando per installarlo:

    sudo apt-get install wmctrl

Nota, man wmctrl (questo è il man pagina per wmctrl) dice in parte:

-m Visualizza le informazioni sul window manager ...

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 da wmctrl -m era: Name: Metacity
mentre echo $DESKTOP_SESSION ha mostrato ubuntu-2d e echo $XDG_CURRENT_DESKTOP ha mostrato Unity.

In una nuova installazione di Ubuntu 15.10 di Ubuntu desktop software su un vecchio laptop, la prima linea di output di wmctrl -m era: Name: Compiz
mentre il DESKTOP_SESSION e XDG_CURRENT_DESKTOP i valori erano ubuntu e Unity


126
2018-01-05 07:57



Sfortunatamente questo non funziona su ssh anche se X11 è abilitato. - Sridhar-Sarnobat
@ Sridhar-Sarnobat su Ubuntu 15.04, in esecuzione ssh -Y {host} 'wmctrl -m' restituisce alcuni valori (ad es. "Nome: Compiz" e diversi N / A), ma ha senso ssh avrebbe informazioni limitate sul window manager. - michael
su debian in esecuzione cannella, questo non funziona. l'output di wmctrl -m è Name: Mutter (Muffin) mentre $ XDG_CURRENT_DESKTOP = X-Cinnamon - Floyd
Su Xubuntu Wily, con Window Maker 0.95.6 - wmctrl riporta N / A per tutte le voci. GDMSESSION è impostato su wmaker-common ma XDG_CURRENT_DESKTOP non è impostato. - Mei
@ Mihai, hai Windows Maker in esecuzione su qualsiasi altro sistema puoi confrontare? Inoltre, fare entrambi wmctrl -d (Elenca tutti i desktop gestiti dal gestore di finestre) o wmctrl -l (Elenca le finestre gestite dal window manager) funziona bene su Xubuntu Wily con Window Maker? - James Waldby - jwpat7


Sui sistemi Linux ho testato le variabili d'ambiente XDG_CURRENT_DESKTOP e GDMSESSION e ha 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

Unità 3d

  • XDG_CURRENT_DESKTOP=Unity
  • GDMSESSION=ubuntu

Unity 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

Mint 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

  • XDG_CURRENT_DESKTOP=X-Cinnamon 
  • GDMSESSION=cinnamon

Wasta 14.04 utilizzando 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

84
2017-12-10 20:38



Mint 13 (Cinnamon): XDG_CURRENT_DESKTOP = GNOME, GDMSESSION = cannella - rik-shaw
Lubuntu 12.04: XDG_CURRENT_DESKTOP = LXDE, GDMSESSION = Lubuntu - rik-shaw
Che dire di $ DESKTOP_SESSION? Come soluzione di backup :) - Savvas Radevic
Cosa succede se non utilizzo GDM? - Robert Siemer
E inoltre non risponde a cosa gestore di finestre Io uso! - Robert Siemer


Nel tipo di terminale env per vedere tutte le variabili d'ambiente. Alcuni di loro sono:

XDG_CURRENT_DESKTOP - Ti dice quale ambiente desktop stai usando

GDMSESSION - Ti dice quale opzione hai selezionato dal lightdm greeter per accedere.

Per usarli, vai al terminale e digita:

echo $XDG_CURRENT_DESKTOP

(Produrrà per esempio 'unity' se stai usando Unity)

o

echo $GDMSESSION  

(Produrrà ad esempio 'ubuntu' se hai selezionato ubuntu nel login o 'ubuntu-2d' se ne hai selezionato uno nel login.)

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

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

pgrep -l compiz |cut -d " " -f2 poiché il processo è in esecuzione dallo stesso utente, non è necessario anteporre la parte sudo. È quindi possibile utilizzarlo per creare uno script che esegua un'azione basata su Gestione finestre.

Per cercare altri tipi, cambia la parola compiz ad un altro simile mutter, kwin, eccetera..


39
2017-10-26 21:57



Questi 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 gestore di finestre con quel nome. - Anonymous
Ecco qua. Trovato un comando che può aiutare con la lista dei processi. pgrep. Arrivato a quella parte, almeno ti mostra il nome del gestore di finestre, se trovato. Cercando di verificare se riesco ad aggiungerli tutti insieme. La tua domanda è molto buona dato che Ubuntu 11.10 confonde un po 'usando Compiz (o mormora se è Gnome 3.x), quindi sarebbe bello indicare l'attuale Window Manager che è usato in Unity. - Luis Alvarado♦
$XDG_CURRENT_DESKTOPè l'ambiente desktop corrente, NON il gestore di finestre. - Ken Sharp


ho trovato pstree essere di 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}]

20
2018-04-22 04:59





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

8
2018-05-15 06:19



Puoi spiegare come funziona? Inoltre, penso che ti manchi un ) alla fine. - Louis Matthijssen
@LouisMatthijssen 1. xprop -root -notype visualizza tutte le proprietà della finestra radice (e omette i tipi per semplificare l'analisi), l'output viene inviato a awk via tubo; 2. awk istruzione $1=="_NET[blah]CK:"{print $5}' confronta la prima colonna di ogni riga dell'input ottenuto 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 - solo così accade (interamente per caso, scommetto) essere l'ID dell'atomo "_NET_SUPPORTING_WM_CHECK"; 3. questo ID viene quindi utilizzato nuovamente per ottenere le proprietà di Windows Manager con xprop -id - cprn


Ho provato anche con KDE e la mia conclusione è:

a) Modalità grafica, con HardInfo: la risposta è normalmente in "Sistema operativo"> ​​"Ambiente desktop", ma in caso contrario è possibile cercare "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).

b) Riga di comando, con questo comando: ps -A | egrep -i "gnome|kde|mate|cinnamon|lx|xfce|jwm". La voce che appare in più righe dovrebbe essere la risposta (se c'è un pareggio la voce con "sessione" dovrebbe essere la soluzione).


3
2018-04-15 22:51



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


Nessuno dei precedenti ha funzionato per me, volevo solo sapere se Gnome era in esecuzione come sessione desktop corrente.

Questo è ciò che ha funzionato, aprire un terminale

lsb_release -a

(per controllare quale aroma 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
2017-07-07 16:26





Il seguente script è risultato come la migliore risposta ad un simile domanda che ho postato su unix.se. Funziona anche alla grande 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"

-1
2018-02-24 17:42