So ermitteln Sie, welcher Fenstermanager ausgeführt wird


180

Gibt es eine Möglichkeit (z. B. einen Befehl oder eine Umgebungsvariable) zu bestimmen, welcher Fenstermanager in der aktuellen Sitzung aktiv ist?

Antworten:


145

Wenn Sie wmctrlinstalliert haben, wird die erste Zeile des Befehls ausgegeben

    wmctrl -m

zeigt Ihnen den Namen des Fenstermanagers. Wenn Sie es nicht wmctrlinstalliert haben, verwenden Sie den folgenden Befehl, um es zu installieren:

    sudo apt-get install wmctrl

Beachten Sie, man wmctrl(das heißt, die manSeite 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 -mwar: Name: Metacity
während echo $DESKTOP_SESSIONzeigte ubuntu-2dund echo $XDG_CURRENT_DESKTOPzeigte Unity.

Auf einer neuen Ubuntu 15.10-Installation von Ubuntu desktopSoftware auf einem alten Laptop wmctrl -mlautete die erste Ausgabezeile von : Name: Compiz
while the DESKTOP_SESSIONand XDG_CURRENT_DESKTOPvalues ​​were ubuntuandUnity


4
Leider funktioniert dies nicht über ssh, auch wenn X11 aktiviert ist.
Sridhar Sarnobat

1
@ Sridhar-Sarnobat unter Ubuntu 15.04 gibt das Ausführen ssh -Y {host} 'wmctrl -m'einige Werte zurück (z. B. "Name: Compiz" und mehrere N / A), aber es ist sinnvoll, dass sshnur begrenzte Informationen über den Fenstermanager vorliegen.
Michael

auf debian running cinnamon funktioniert das nicht. Ausgabe von wmctrl -m ist Name: Mutter (Muffin), während $ XDG_CURRENT_DESKTOP = X-Cinnamon
Floyd

Auf Xubuntu Wily meldet das Ausführen von Window Maker 0.95.6 - wmctrl N / A für alle Einträge. GDMSESSION ist auf wmaker-common gesetzt, aber XDG_CURRENT_DESKTOP ist überhaupt nicht gesetzt.
Mei

@Mei, läuft Window Maker auf anderen Systemen, die Sie vergleichen können? Funktionieren unter Xubuntu Wily mit Window Maker auch entweder wmctrl -d(Alle vom Fenstermanager verwalteten Desktops auflisten) oder wmctrl -l(Die vom Fenstermanager verwalteten Fenster auflisten)?
James Waldby - jwpat7

102

Auf Linux - Systemen getestet I Umgebungsvariablen XDG_CURRENT_DESKTOPund GDMSESSIONund 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"

Ubuntu 18.04 (Ubuntu)

  • XDG_CURRENT_DESKTOP=ubuntu:GNOME
  • GDMSESSION=ubuntu

Ubuntu 18.04 (Ubuntu auf Wayland)

  • XDG_CURRENT_DESKTOP=ubuntu:GNOME
  • GDMSESSION=ubuntu-wayland

Ubuntu 16.04


Einheit (7)

  • XDG_CURRENT_DESKTOP=Unity
  • GDMSESSION=ubuntu

Ubuntu 14.04


Einigkeit läuft mit Mir

  • XDG_CURRENT_DESKTOP=Unity
  • GDMSESSION=ubuntu

Hinweis MIR_SERVER_NAME ist ebenfalls festgelegt

  • MIR_SERVER_NAME=session-$NUMBER

Einheit läuft ohne Mir

  • XDG_CURRENT_DESKTOP=Unity
  • GDMSESSION=ubuntu

XFCE

  • XDG_CURRENT_DESKTOP=XFCE
  • GDMSESSION=xfce

Ubuntu 12.04


KDE

  • XDG_CURRENT_DESKTOP=
  • GDMSESSION=kde-plasma

Einheit 3d

  • XDG_CURRENT_DESKTOP=Unity
  • GDMSESSION=ubuntu

Einheit 2d

  • XDG_CURRENT_DESKTOP=Unity
  • GDMSESSION=ubuntu-2d

Gnom

  • XDG_CURRENT_DESKTOP=GNOME
  • GDMSESSION=gnome-shell

Gnome Classic

  • XDG_CURRENT_DESKTOP=GNOME
  • GDMSESSION=gnome-classic

Gnome Classic (keine Effekte)

  • XDG_CURRENT_DESKTOP=GNOME
  • GDMSESSION=gnome-fallback

Andere Ubuntu-basierte Distributionen


Minze 13 (Zimt)

  • XDG_CURRENT_DESKTOP=GNOME
  • GDMSESSION=cinnamon

Postfrisch 16 (KDE-Ausgabe)

  • XDG_CURRENT_DESKTOP=KDE
  • GDMSESSION=default

Minze 17 (Zimt)

  • XDG_CURRENT_DESKTOP=X-Cinnamon
  • GDMSESSION=default

Lubuntu 12.04

  • XDG_CURRENT_DESKTOP=LXDE
  • GDMSESSION=Lubuntu

Wasta 14.04 / 18.04

  • XDG_CURRENT_DESKTOP=X-Cinnamon
  • GDMSESSION=cinnamon

Wasta 14.04 mit Gnome Desktop.

  • 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

4
Münze 13 (Zimt): XDG_CURRENT_DESKTOP = GNOME, GDMSESSION = Zimt
rik-shaw

1
Lubuntu 12.04: XDG_CURRENT_DESKTOP = LXDE, GDMSESSION = Lubuntu
rik-shaw

Was ist mit $ DESKTOP_SESSION? Als Backup-Lösung :)
Savvas Radevic

1
Was ist, wenn ich kein GDM verwende?
Robert Siemer

6
Und weiter antwortet es nicht, welchen Fenstermanager ich benutze!
Robert Siemer

42

Im Terminaltyp werden envalle 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 envwie 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 " " -f2Da 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 , compizum ein anderen wie mutter, kwin, etc ..


2
Diese nennen mir nur den Sitzungsnamen und die Desktop-Umgebung. Beispiel: "GNOME" ist eine Desktop-Umgebung, in der Metacity, Mutter, Compiz oder andere Fenstermanager verwendet werden können. Es heißt "gnome-classic", ein Sitzungsname, es gibt keinen solchen Fenstermanager mit diesem Namen.
Anonym

1
Es geht los. Fand einen Befehl, der mit der Prozessliste helfen kann. pgrep. Zu diesem Teil gelangt, zumindest wird der Name des Fenstermanagers angezeigt, falls er gefunden wurde. Ich versuche zu überprüfen, ob ich alle dort zusammenfassen kann. Ihre Frage ist sehr gut, da Ubuntu 11.10 ein bisschen durch die Verwendung von Compiz verwirrt (oder murmelt, wenn Gnome 3.x verwendet). Es wäre also schön, darauf hinzuweisen, welcher Windows-Manager in Unity verwendet wird.
Luis Alvarado

$XDG_CURRENT_DESKTOPist die aktuelle Desktop-Umgebung, NICHT der Fenstermanager.
Ken Sharp

24

Ich fand pstreees eine große Hilfe.

Installation

sudo apt-get install pstree

Ausgabe

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

1
Das hat mich mit meinem benutzerdefinierten Buildroot-System dorthin gebracht.
5.

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

1
Können Sie erklären, wie das funktioniert? Ich denke auch, dass Sie )am Ende einen vermissen .
Louis Matthijssen

@LouisMatthijssen 1. Zeigt xprop -root -notypealle Eigenschaften des Root-Fensters an (und lässt die Typen für eine einfachere Analyse aus). Die Ausgabe wird awkper Pipe an gesendet. 2. Die awkAnweisung $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
CpRn

4

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).


XFCE hat auch mehrere gnome-...Prozesse (und ein KDE-Hit mit kdevtmpfs)
Xen2050

2

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)


1
#! /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


0

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


0

Skript

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"

0

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: i3Teil. In meinem Fall ist der von mir verwendete Fenstermanager i3.

Option -Szeigt Systeminformationen an und xfügt Informationen zum Fenstermanager hinzu.


-3

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:

  • Gnom-Muschel *
  • compiz
  • Metacity
  • murmeln
  • Sägefisch

Sie müssten für jeden Befehl eine Prüfung durchführen. pgrep -l $WINDOW_MANAGERDabei $WINDOW_MANAGERhandelt es sich um den Namen des Fenstermanagers, nach dem Sie suchen möchten. Der pgrepBefehl 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-wmSkript bekommen. Dieses Skript sollte tatsächlich verwendbar sein (da es bei einer Neuinstallation vorhanden ist), aber in meinem Fall versucht es auszuführen, compizwas 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.


1
Pgrep unterstützt anscheinend reguläre Ausdrücke, sodass ein Muster mit Abwechslungen verwendet werden kann. pgrep -l "compiz|metacity|mutter|kwin|sawfish|fluxbox|openbox|xmonad"
Anonym

1
Das reicht nicht: Was ist, wenn der Benutzer mehrere X-Sitzungen mit verschiedenen Managern ausführt? Sie sollten zumindest überprüfen, ob der Window Manager auf dem Display funktioniert, an dem Sie interessiert sind (Sie können dies tun, indem Sie die $DISPLAYUmgebung untersuchen).
Gilles

Ubuntu 18.04 LTS Desktop: Unity: Unity7: ubuntu Sitzung: unity
user2584621
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.