Risposte:
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
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.
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_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"
XDG_CURRENT_DESKTOP=ubuntu:GNOMEGDMSESSION=ubuntuXDG_CURRENT_DESKTOP=ubuntu:GNOMEGDMSESSION=ubuntu-waylandXDG_CURRENT_DESKTOP=UnityGDMSESSION=ubuntuXDG_CURRENT_DESKTOP=UnityGDMSESSION=ubuntuNota Anche MIR_SERVER_NAME è impostato
MIR_SERVER_NAME=session-$NUMBERXDG_CURRENT_DESKTOP=UnityGDMSESSION=ubuntuXDG_CURRENT_DESKTOP=XFCEGDMSESSION=xfceXDG_CURRENT_DESKTOP=GDMSESSION=kde-plasmaXDG_CURRENT_DESKTOP=UnityGDMSESSION=ubuntuXDG_CURRENT_DESKTOP=UnityGDMSESSION=ubuntu-2dXDG_CURRENT_DESKTOP=GNOMEGDMSESSION=gnome-shellXDG_CURRENT_DESKTOP=GNOMEGDMSESSION=gnome-classicXDG_CURRENT_DESKTOP=GNOMEGDMSESSION=gnome-fallbackXDG_CURRENT_DESKTOP=GNOMEGDMSESSION=cinnamonXDG_CURRENT_DESKTOP=KDEGDMSESSION=defaultXDG_CURRENT_DESKTOP=X-CinnamonGDMSESSION=defaultXDG_CURRENT_DESKTOP=LXDE GDMSESSION=LubuntuXDG_CURRENT_DESKTOP=X-Cinnamon GDMSESSION=cinnamonXDG_CURRENT_DESKTOP=GNOME GDMSESSION=gnomeXDG_CURRENT_DESKTOP=MATEGDMSESSION=mateXDG_CURRENT_DESKTOP=XFCEGDMSESSION=xubuntuNel 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 ..
$XDG_CURRENT_DESKTOPè l'ambiente desktop corrente, NON il gestore delle finestre.
Ho trovato pstreeun 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 -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
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: 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.
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_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.
pgrep -l "compiz|metacity|mutter|kwin|sawfish|fluxbox|openbox|xmonad"
$DISPLAYnel suo ambiente).