Antworten:
Wenn Sie wmctrl
installiert haben, wird die erste Zeile des Befehls ausgegeben
wmctrl -m
zeigt Ihnen den Namen des Fenstermanagers. Wenn Sie es nicht wmctrl
installiert haben, verwenden Sie den folgenden Befehl, um es zu installieren:
sudo apt-get install wmctrl
Beachten Sie, man wmctrl
(das heißt, die man
Seite für wmctrl
) sagt teilweise:
-m Informationen zum Fenstermanager anzeigen ...
Auf meinem Ubuntu 11.10 / Linux 3.0.0-14-generic # 23-Ubuntu x86_64 / metacity 2.34.1 System, die erste Zeile der Ausgabe von wmctrl -m
war: Name: Metacity
während echo $DESKTOP_SESSION
zeigte ubuntu-2d
und echo $XDG_CURRENT_DESKTOP
zeigte Unity
.
Auf einer neuen Ubuntu 15.10-Installation von Ubuntu desktop
Software auf einem alten Laptop wmctrl -m
lautete die erste Ausgabezeile von : Name: Compiz
while the DESKTOP_SESSION
and XDG_CURRENT_DESKTOP
values were ubuntu
andUnity
ssh -Y {host} 'wmctrl -m'
einige Werte zurück (z. B. "Name: Compiz" und mehrere N / A), aber es ist sinnvoll, dass ssh
nur begrenzte Informationen über den Fenstermanager vorliegen.
wmctrl -d
(Alle vom Fenstermanager verwalteten Desktops auflisten) oder wmctrl -l
(Die vom Fenstermanager verwalteten Fenster auflisten)?
Auf Linux - Systemen getestet I Umgebungsvariablen XDG_CURRENT_DESKTOP
und GDMSESSION
und bekam die folgenden Ergebnisse.
Sie können diese Zeile verwenden, um die Ausgabe zu erhalten:
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
Hinweis MIR_SERVER_NAME ist ebenfalls festgelegt
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
Im Terminaltyp werden env
alle Umgebungsvariablen angezeigt. Einige von ihnen sind:
XDG_CURRENT_DESKTOP - Gibt an , welche Desktopumgebung Sie verwenden
GDMSESSION - Zeigt an , welche Option Sie im lightdm-Begrüßer zum Anmelden ausgewählt haben.
Um sie zu benutzen, gehe zum Terminal und tippe:
echo $XDG_CURRENT_DESKTOP
(Gibt zum Beispiel 'unity' aus, wenn Sie Unity verwenden.)
oder
echo $GDMSESSION
(Gibt beispielsweise "ubuntu" aus, wenn Sie "ubuntu" im Login ausgewählt haben, oder "ubuntu-2d", wenn Sie "ubuntu-2d" im Login ausgewählt haben.)
Sie haben andere , wenn Sie den Ausgang näher betrachten env
wie DESKTOP_SESSION und COMPIZ_CONFIG_PROFILE
Da Sie nach dem Namen des verwendeten Fenstermanagers suchen, sehe ich dies nur in der Prozessliste. Dazu gibt es einen Befehl namens pgrep
( Wikipedia ). Ich habe Folgendes getan, um den Namen zu ermitteln, da der Parameter -l die Prozess-ID hinzufügt:
pgrep -l compiz |cut -d " " -f2
Da der Prozess von demselben Benutzer ausgeführt wird, muss dem sudo-Teil kein Präfix vorangestellt werden. Damit können Sie dann ein Skript erstellen, das eine auf dem Window Manager basierende Aktion ausführt.
Zur Suche nach anderen Arten, nur das Wort ändern , compiz
um ein anderen wie mutter
, kwin
, etc ..
$XDG_CURRENT_DESKTOP
ist die aktuelle Desktop-Umgebung, NICHT der Fenstermanager.
Ich fand pstree
es eine große Hilfe.
sudo apt-get install pstree
Das habe ich bekommen.
├─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
)
am Ende einen vermissen .
xprop -root -notype
alle Eigenschaften des Root-Fensters an (und lässt die Typen für eine einfachere Analyse aus). Die Ausgabe wird awk
per Pipe an gesendet. 2. Die awk
Anweisung $1=="_NET[blah]CK:"{print $5}'
vergleicht die erste Spalte jeder Zeile der Eingabe, die sie über die Pipe erhalten hat, mit einer bestimmten Zeichenfolge. Wenn sie die Übereinstimmung findet, führt sie den Code in Klammern aus, der die fünfte Spalte dieser Zeile ausgibt. Ich wette) um die ID des Atoms "_NET_SUPPORTING_WM_CHECK" zu sein; 3. Diese ID wird dann wieder verwendet , um mit den Eigenschaften des Windows Manager zu bekommenxprop -id
Ich habe auch mit KDE getestet und mein Fazit ist:
a) Grafische Darstellung mit HardInfo: Die Antwort lautet normalerweise "Betriebssystem"> "Desktop-Umgebung", andernfalls können Sie nach "Umgebungsvariablen" suchen. HardInfo ist mit allen getesteten Distributionen fertig, mit Ausnahme der mit KDE. Es kann jedoch einfach und schnell installiert werden (nur 2 Pakete in Linux Mint 13).
b) Befehlszeile, die mit diesem Befehl: ps -A | egrep -i "gnome|kde|mate|cinnamon|lx|xfce|jwm"
. Der Gegenstand, der in mehr Zeilen erscheint, sollte die Antwort sein (wenn es ein Unentschieden gibt, sollte der Gegenstand mit "Sitzung" die Lösung sein).
gnome-...
Prozesse (und ein KDE-Hit mit kdevtmpfs
)
Keines der oben genannten Probleme funktionierte tatsächlich für mich. Ich wollte nur wissen, ob Gnome als meine aktuelle Desktopsitzung ausgeführt wird.
Das hat funktioniert, öffnen Sie ein Terminal
lsb_release -a
(um zu überprüfen, welche Variante oder Version ich auf meinem UBUNTU-Rechner installiert habe)
ls /usr/bin/*session
(Startet die aktuell verwendete Desktop-Sitzung / Desktop-Umgebung.)
gnome-shell --version
(um herauszufinden, welche Version von Gnome installiert ist)
#! /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
Oder in einer Zeile:
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
Dies ist mit dbus und dem Accounts Service möglich (beide standardmäßig in Ubuntu).
$ qdbus --system org.freedesktop.Accounts \
> /org/freedesktop/Accounts/User1000 \
> org.freedesktop.Accounts.User.XSession
ubuntu
Erwähnenswert ist, dass ich dies mit der Anmeldung über lightdm (das ist der grafische Anmeldebildschirm) getestet habe. Dabei wurde ein klassischer Desktop wie Blackbox und offensichtlich Unity erkannt. Ich vermute, dies ist ein Wert dessen, was der Benutzer auf dem Anmeldebildschirm als Sitzung auswählt. Deshalb ist es ein bisschen einfacher, diese Überprüfung auf Prozesse zu verwenden
Das folgende Skript ergab die beste Antwort auf eine ähnliche Frage, die ich auf unix.se gestellt habe . Es funktioniert auch hervorragend mit Unity und 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"
Sie können das aufgerufene Werkzeug verwenden inxi
. Es kann von Ubuntu Repositories bezogen werden:
sudo apt install inxi
oder von github: https://github.com/smxi/inxi
Führen Sie den Befehl einfach wie folgt aus:
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)
Beachten Sie das Desktop: i3
Teil. In meinem Fall ist der von mir verwendete Fenstermanager i3
.
Option -S
zeigt Systeminformationen an und x
fügt Informationen zum Fenstermanager hinzu.
Ich kann nur daran denken, in den laufenden Prozessen nach bekannten Fenstermanagern zu suchen. Früher gab es in gconf einen Schlüssel, der auf den bevorzugten Fenstermanager eingestellt war, aber seit Gnome 2.12 veraltet ist.
Wenn dies zu Programmierzwecken ist, empfehle ich Ihnen, nach allen Linux-Fenstermanagern zu suchen. Einige beliebte sind:
Sie müssten für jeden Befehl eine Prüfung durchführen. pgrep -l $WINDOW_MANAGER
Dabei $WINDOW_MANAGER
handelt es sich um den Namen des Fenstermanagers, nach dem Sie suchen möchten. Der pgrep
Befehl prüft, ob Prozesse ausgeführt werden.
Ich bin nicht zu 100% sicher, ob Gnome Shell als Fenstermanager angesehen wird. Den Rest der Fenstermanager habe ich aus einer Liste im /usr/bin/gnome-wm
Skript bekommen. Dieses Skript sollte tatsächlich verwendbar sein (da es bei einer Neuinstallation vorhanden ist), aber in meinem Fall versucht es auszuführen, compiz
was nicht mein Standard-Fenstermanager ist (nicht in meiner Gnome-Sitzung).
BEARBEITEN:
Nun, @Anarcis Kommentar scheint genauer zu sein. In meinem Fall hat es gezeigt gnome-shell
.
pgrep -l "compiz|metacity|mutter|kwin|sawfish|fluxbox|openbox|xmonad"
$DISPLAY
Umgebung untersuchen).