Risposte:
Se è stato wmctrl
installato, la prima riga di output dal comando
wmctrl -m
ti mostrerà il nome del gestore delle finestre. Se non hai wmctrl
installato, usa il seguente comando per installarlo:
sudo apt-get install wmctrl
Nota, man wmctrl
(cioè la man
pagina 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 -m
stata: Name: Metacity
mentre echo $DESKTOP_SESSION
mostrata ubuntu-2d
e echo $XDG_CURRENT_DESKTOP
mostrata Unity
.
Su una nuova Ubuntu 15.10 di installazione del Ubuntu desktop
software su un vecchio computer portatile, la prima linea di uscita dal wmctrl -m
era: Name: Compiz
mentre i DESKTOP_SESSION
ei XDG_CURRENT_DESKTOP
valori erano ubuntu
eUnity
ssh -Y {host} 'wmctrl -m'
restituisce alcuni valori (ad esempio, "Nome: Compiz" e diversi N / A), ma ha senso che ssh
avrebbe informazioni limitate sul gestore delle finestre.
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?
Sui sistemi Linux ho provato le variabili d'ambiente XDG_CURRENT_DESKTOP
e GDMSESSION
ed ho ottenuto i seguenti risultati.
Puoi usare questa linea per ottenere l'output:
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 Anche MIR_SERVER_NAME è impostato
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
Nel terminale digitare env
per 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 env
come 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 " " -f2
poiché 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 compiz
ad un altro come mutter
, kwin
, ecc ..
$XDG_CURRENT_DESKTOP
è l'ambiente desktop corrente, NON il gestore delle finestre.
Ho trovato pstree
un grande aiuto.
sudo apt-get install pstree
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}]
xprop -id $(xprop -root -notype | awk '$1=="_NET_SUPPORTING_WM_CHECK:"{print $5}') -notype -f _NET_WM_NAME 8t
)
alla fine.
xprop -root -notype
visualizza tutte le proprietà della finestra di root (e omette i tipi per un analisi più semplice), l'output viene inviato awk
tramite pipe; 2. L' awk
istruzione $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
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).
gnome-...
processi (e un colpo kde con kdevtmpfs
)
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)
#! /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
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
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"
È 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: i3
parte. Nel mio caso il gestore delle finestre che uso è i3
.
L'opzione -S
visualizza le informazioni di sistema e x
aggiunge informazioni sul gestore delle finestre.
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:
Dovresti eseguire un controllo per ognuno con il comando pgrep -l $WINDOW_MANAGER
, dove si $WINDOW_MANAGER
trova il nome del gestore di finestre che vuoi controllare. Il pgrep
comando 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-wm
script. Questo script infatti dovrebbe essere utilizzabile (dal momento che è presente su un'installazione pulita) ma nel mio caso tenta di eseguire compiz
che 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
.
pgrep -l "compiz|metacity|mutter|kwin|sawfish|fluxbox|openbox|xmonad"
$DISPLAY
nel suo ambiente).