Come determinare quale gestore di finestre è in esecuzione

150

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

    
posta Anonymous 26.10.2011 - 22:39

10 risposte

126

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

    wmctrl -m

ti mostrerà il nome del window manager. Se non hai installato wmctrl , utilizza il seguente comando per installarlo:

    sudo apt-get install wmctrl

Nota, man wmctrl (ovvero la pagina man per wmctrl ) dice in parte:

  

-m Mostra informazioni sul gestore finestre ...

Sul mio sistema Ubuntu 11.10 / Linux 3.0.0-14-generic # 23-Ubuntu x86_64 / metacity 2.34.1, la prima riga 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 Ubuntu 15.10 di Ubuntu desktop software su un vecchio laptop, la prima riga di output da wmctrl -m era: Name: Compiz
mentre i valori DESKTOP_SESSION e XDG_CURRENT_DESKTOP erano ubuntu e Unity

    
risposta data James Waldby - jwpat7 05.01.2012 - 08:57
83

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

  • XDG_CURRENT_DESKTOP=ubuntu:GNOME
  • GDMSESSION=ubuntu

Ubuntu 16.04

Unity (7)

  • XDG_CURRENT_DESKTOP=Unity
  • GDMSESSION=ubuntu

Ubuntu 14.04

Unity in esecuzione con Mir

  • XDG_CURRENT_DESKTOP=Unity
  • GDMSESSION=ubuntu

Nota anche MIR_SERVER_NAME è impostato

  • MIR_SERVER_NAME=session-$NUMBER

Unity 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

Unity 2d

  • XDG_CURRENT_DESKTOP=Unity
  • GDMSESSION=ubuntu-2d

Gnome

  • XDG_CURRENT_DESKTOP=GNOME
  • GDMSESSION=gnome-shell

Gnome Classic

  • XDG_CURRENT_DESKTOP=GNOME
  • GDMSESSION=gnome-classic

Gnome Classic (senza effetti)

  • XDG_CURRENT_DESKTOP=GNOME
  • GDMSESSION=gnome-fallback

Altre distribuzioni basate su Ubuntu

Mint 13 (cannella)

  • XDG_CURRENT_DESKTOP=GNOME
  • GDMSESSION=cinnamon

Mint 16 (edizione KDE)

  • XDG_CURRENT_DESKTOP=KDE
  • GDMSESSION=default

Mint 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
risposta data Tom 10.12.2012 - 21:38
39

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

XDG_CURRENT_DESKTOP : indica quale ambiente desktop stai usando

GDMSESSION : indica quale opzione hai selezionato da lightdm greeter per accedere.

Per usarli, vai al terminale e digita:

echo $XDG_CURRENT_DESKTOP

(Produrrà, ad esempio, 'unity' se si utilizza Unity)

o

echo $GDMSESSION  

(Produrrà per 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 come DESKTOP_SESSION e COMPIZ_CONFIG_PROFILE

Dato che quello che stai cercando è il nome di ciò che Window Manager è in uso, l'unico modo in cui vedo come ottenerlo è guardare nella lista dei processi. Per fare ciò esiste 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. Puoi quindi usarlo per creare uno script che faccia un'azione basata su Window Manager.

Per cercare altri tipi, modifica la parola compiz in un'altra come mutter , kwin , ecc.

    
risposta data Luis Alvarado 26.10.2011 - 23:57
18

Ho trovato pstree come un grande aiuto.

Installazione

sudo apt-get install pstree

uscita

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

risposta data Sridhar-Sarnobat 22.04.2014 - 06:59
8
xprop -id $(xprop -root -notype | awk '=="_NET_SUPPORTING_WM_CHECK:"{print }') -notype -f _NET_WM_NAME 8t 
    
risposta data ruario 15.05.2014 - 08:19
3

Ho provato anche con KDE e la mia conclusione è:

a) Modo grafico, con HardInfo: la risposta è normalmente in "Sistema operativo" & gt; "Ambiente desktop", ma se non si può guardare a "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).

    
risposta data Msedfi 16.04.2013 - 00:51
1

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

Questo è ciò che ha funzionato, apri 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)

    
risposta data NanuBuria 07.07.2017 - 18:26
-1

Il seguente script è risultato la migliore risposta a una domanda simile 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\).*//')
else
  desktop=$XDG_CURRENT_DESKTOP
fi

desktop=${desktop,,}  # convert to lower case
echo "$desktop"
    
risposta data Serge Stroobandt 24.02.2014 - 18:42
-1

Questo è un po 'possibile con dbus e il servizio 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 ho provato questo con l'accesso tramite lightdm (che è la schermata di accesso grafica), ha rilevato un desktop classico come blackbox e ovviamente rileva Unity. Sospetto che questo sia il valore di ciò che l'utente seleziona nella schermata di accesso come sessione, ecco perché è un po 'più facile usare quel controllo per i processi

    
risposta data Sergiy Kolodyazhnyy 03.04.2016 - 09:54
-3

Posso solo pensare di controllare i gestori di finestre conosciuti nei processi in esecuzione. C'era una chiave in gconf che era impostata sul gestore di finestre preferito, ma è deprecata da Gnome 2.12.

Quindi, se questo è per uno scopo di programmazione, ti suggerisco di cercare tutti i gestori di finestre di Linux; alcuni popolari sono:

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

Dovresti eseguire un controllo per ognuno con il comando pgrep -l $WINDOW_MANAGER , dove $WINDOW_MANAGER è il nome del gestore di finestre che vuoi controllare. Il comando pgrep 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 ricevuto da un elenco nello script /usr/bin/gnome-wm . Questo script infatti dovrebbe essere utilizzabile (dal momento che è presente su un'installazione pulita), ma nel mio caso cerca di eseguire compiz che non è il mio gestore di finestre predefinito (non nella mia sessione Gnome).

Modifica

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

    
risposta data Severo Raz 26.10.2011 - 23:32

Leggi altre domande sui tag