Jak ustalić, który menedżer okien jest uruchomiony

179

Czy jest jakiś sposób (taki jak polecenie lub zmienna środowiskowa), aby określić, który menedżer okien jest tym, który aktywnie działa w bieżącej sesji?

Anonimowy
źródło

Odpowiedzi:

145

Jeśli masz wmctrlzainstalowany, pierwszy wiersz wyniku polecenia

    wmctrl -m

pokaże nazwę menedżera okien. Jeśli nie masz wmctrlzainstalowanego, użyj następującego polecenia, aby go zainstalować:

    sudo apt-get install wmctrl

Uwaga man wmctrl(czyli manstrona wmctrl) mówi częściowo:

-m Wyświetl informacje o menedżerze okien ...

W moim systemie Ubuntu 11.10 / Linux 3.0.0-14-generic # 23-Ubuntu x86_64 / metacity 2.34.1 pierwsza linia danych wyjściowych wmctrl -mbyła: Name: Metacity
podczas echo $DESKTOP_SESSIONwyświetlania ubuntu-2di echo $XDG_CURRENT_DESKTOPpokazywania Unity.

Na świeżym Ubuntu 15.10 instalacja Ubuntu desktopoprogramowania na starym laptopie, pierwsza linia wyjścia z wmctrl -mbrzmiała: Name: Compiz
podczas gdy DESKTOP_SESSIONi XDG_CURRENT_DESKTOPwartości były ubuntuiUnity

James Waldby - jwpat7
źródło
4
Niestety nie działa to w przypadku ssh, nawet jeśli X11 jest włączony.
Sridhar Sarnobat
1
@ Sridhar-Sarnobat na Ubuntu 15.04, uruchomienie ssh -Y {host} 'wmctrl -m'zwraca pewne wartości (np. „Nazwa: Compiz” i kilka N / A), ale ma sens, że sshmiałoby ograniczone informacje o menedżerze okien.
Michał
na debianie z cynamonem to nie działa. wyjściem wmctrl -m jest Nazwa: Mutter (Muffin), podczas gdy $ XDG_CURRENT_DESKTOP = X-Cinnamon
Floyd
Na Xubuntu Wily działający Window Maker 0.95.6 - wmctrl zgłasza nie dotyczy wszystkich wpisów. GDMSESSION jest ustawiony na wmaker-common, ale XDG_CURRENT_DESKTOP wcale nie jest ustawiony.
Mei
@Mei, czy Window Maker działa na innych systemach, które możesz porównać? Ponadto, czy wmctrl -d(Lista wszystkich komputerów zarządzanych przez menedżera okien) lub wmctrl -l(Lista okien zarządzanych przez menedżera okien) działa poprawnie na Xubuntu Wily z Window Maker?
James Waldby - jwpat7
101

W systemach Linux I badane zmienne środowiskowe XDG_CURRENT_DESKTOPi GDMSESSIONotrzymał następujące wyniki.

Możesz użyć tego wiersza, aby uzyskać wynik:

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 w Wayland)

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

Ubuntu 16.04


Jedność (7)

  • XDG_CURRENT_DESKTOP=Unity
  • GDMSESSION=ubuntu

Ubuntu 14.04


Jedność z Mirem

  • XDG_CURRENT_DESKTOP=Unity
  • GDMSESSION=ubuntu

Uwaga: MIR_SERVER_NAME jest również ustawiony

  • MIR_SERVER_NAME=session-$NUMBER

Jedność działa bez Mir

  • XDG_CURRENT_DESKTOP=Unity
  • GDMSESSION=ubuntu

XFCE

  • XDG_CURRENT_DESKTOP=XFCE
  • GDMSESSION=xfce

Ubuntu 12.04


KDE

  • XDG_CURRENT_DESKTOP=
  • GDMSESSION=kde-plasma

Jedność 3d

  • XDG_CURRENT_DESKTOP=Unity
  • GDMSESSION=ubuntu

Unity 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 (bez efektów)

  • XDG_CURRENT_DESKTOP=GNOME
  • GDMSESSION=gnome-fallback

Inne dystrybucje oparte na Ubuntu


Mięta 13 (cynamon)

  • XDG_CURRENT_DESKTOP=GNOME
  • GDMSESSION=cinnamon

Mennica 16 (edycja KDE)

  • XDG_CURRENT_DESKTOP=KDE
  • GDMSESSION=default

Mięta 17 (cynamon)

  • 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 za pomocą pulpitu Gnome.

  • 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
Tomek
źródło
4
Mennica 13 (cynamon): XDG_CURRENT_DESKTOP = GNOME, GDMSESSION = cynamon
rik-shaw
1
Lubuntu 12.04: XDG_CURRENT_DESKTOP = LXDE, GDMSESSION = Lubuntu
rik-shaw
Co z $ DESKTOP_SESSION? Jako rozwiązanie zapasowe :)
Savvas Radevic
1
Co jeśli nie używam GDM?
Robert Siemer
6
Co więcej, nie odpowiada, którego menedżera okien używam!
Robert Siemer,
42

W typie terminala, envaby zobaczyć wszystkie zmienne środowiskowe. Niektórzy z nich są:

XDG_CURRENT_DESKTOP - informuje o używanym środowisku pulpitu

GDMSESSION - Mówi, jaką opcję wybrałeś z gredm greeter, aby się zalogować.

Aby z nich skorzystać, przejdź do terminala i wpisz:

echo $XDG_CURRENT_DESKTOP

(Wyprowadzi na przykład „jedność”, jeśli używasz Unity)

lub

echo $GDMSESSION  

(Wyświetli na przykład „ubuntu”, jeśli wybrałeś ubuntu podczas logowania lub „ubuntu-2d”, jeśli wybrałeś ten login).

Masz inne, jeśli przyjrzysz się bliżej wynikomenv takich jak DESKTOP_SESSION i COMPIZ_CONFIG_PROFILE

Ponieważ to, czego szukasz, to nazwa używanego Menedżera okien, jedyny sposób, w jaki widzę, jak to uzyskać, to przeglądanie listy procesów. Aby to zrobić, istnieje polecenie o nazwie pgrep( Wikipedia ). Wykonałem następujące czynności, aby uzyskać nazwę, ponieważ parametr -l dodaje identyfikator procesu:

pgrep -l compiz |cut -d " " -f2ponieważ proces jest uruchamiany przez tego samego użytkownika, nie ma potrzeby poprzedzania części sudo. Następnie można użyć tego do utworzenia skryptu, który wykonuje akcję na podstawie Menedżera okien.

Szukać innych typów, wystarczy zmienić słowo compizna inny podobny mutter, kwinitp ..

Luis Alvarado
źródło
2
Po prostu mówią mi nazwę sesji i środowisko pulpitu. Przykład mówi „GNOME”, czyli środowisko pulpitu, które może korzystać z Metacity, Mutter, Compiz lub innych menedżerów okien. Mówi „gnome-classic”, który jest nazwą sesji, nie ma takiego menedżera okien o takiej nazwie.
Anonimowy
1
Proszę bardzo. Znaleziono polecenie, które może pomóc w liście procesów. pgrep. Przechodzę do tej części, przynajmniej pokazuje nazwę menedżera okien, jeśli zostanie znaleziona. Próbuję sprawdzić, czy mogę dodać je wszystkie razem. Twoje pytanie jest bardzo dobre, ponieważ Ubuntu 11.10 trochę myli przy użyciu Compiz (lub mamrocząc, jeśli w Gnome 3.x), więc miło byłoby wskazać rzeczywisty Menedżer okien, który jest używany w Unity.
Luis Alvarado
$XDG_CURRENT_DESKTOPto bieżące środowisko pulpitu, NIE menedżer okien.
Ken Sharp
24

Okazało pstreesię, że jestem dużą pomocą.

Instalacja

sudo apt-get install pstree

wynik

Oto co mam.

 ├─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}]
Sridhar Sarnobat
źródło
1
dostałem się tam z moim niestandardowym systemem budowania.
jc__
11
xprop -id $(xprop -root -notype | awk '$1=="_NET_SUPPORTING_WM_CHECK:"{print $5}') -notype -f _NET_WM_NAME 8t 
ruario
źródło
1
Czy możesz wyjaśnić, jak to działa? Poza tym myślę, że )na końcu brakuje .
Louis Matthijssen
@LouisMatthijssen 1. xprop -root -notypewyświetla wszystkie właściwości okna głównego (i pomija typy dla łatwiejszego parsowania), dane wyjściowe są wysyłane awkza pośrednictwem potoku; 2. awkinstrukcja $1=="_NET[blah]CK:"{print $5}'porównuje pierwszą kolumnę każdego wiersza wejścia, które przeszedł przez potok z danym ciągiem, a jeśli znajdzie dopasowanie, uruchamia kod w nawiasach, który wypisuje piątą kolumnę z tego wiersza - tak się dzieje (całkowicie przypadkowo, Założę się), aby być identyfikatorem atomu „_NET_SUPPORTING_WM_CHECK”; 3. Ten identyfikator jest następnie używany ponownie, aby uzyskać właściwości Menedżera systemu Windows za pomocąxprop -id
cprn
4

Testowałem również z KDE i mój wniosek jest następujący:

a) Graficzny sposób, z HardInfo: odpowiedź zwykle znajduje się w „System operacyjny”> „Środowisko pulpitu”, ale jeśli nie, możesz spojrzeć na „Zmienne środowiskowe”. HardInfo jest gotowe ze wszystkimi przetestowanymi dystrybucjami, z wyjątkiem KDE, ale można je łatwo i szybko zainstalować (tylko 2 pakiety w Linux Mint 13).

b) linia poleceń, z tym poleceniem: ps -A | egrep -i "gnome|kde|mate|cinnamon|lx|xfce|jwm". Element, który pojawia się w większej liczbie wierszy, powinien być odpowiedzią (w przypadku losowania rozwiązaniem z „sesją” powinno być rozwiązanie).

Msedfi
źródło
XFCE ma także kilka gnome-...procesów (i trafienie KDE kdevtmpfs)
Xen2050
2

Żadne z powyższych nie działało dla mnie, chciałem tylko wiedzieć, czy Gnome działa jako bieżąca sesja pulpitu.

To działało, otwórz terminal

lsb_release -a

(aby sprawdzić, który smak lub wersję zainstalowałem na moim urządzeniu UBUNTU)

ls /usr/bin/*session

(uruchamia aktualnie używaną sesję pulpitu / środowisko pulpitu)

gnome-shell --version 

(aby dowiedzieć się, która wersja gnome jest zainstalowana)

NanuBuria
źródło
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

Lub w jednym wierszu:

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

Alberto Salvia Novella
źródło
0

Jest to trochę możliwe w przypadku dbus i usługi kont (domyślnie w Ubuntu).

$ qdbus --system org.freedesktop.Accounts \                                                                
> /org/freedesktop/Accounts/User1000 \                                                                                     
> org.freedesktop.Accounts.User.XSession                                                                                   
ubuntu

Warto zauważyć, że przetestowałem to przy logowaniu przez lightdm (to jest graficzny ekran logowania), wykrył klasyczny pulpit, taki jak blackbox, i oczywiście wykrywa Unity. Podejrzewam, że jest to wartość wybierana przez użytkownika na ekranie logowania jako sesja, dlatego nieco łatwiej jest używać tego sprawdzania procesów

Sergiy Kolodyazhnyy
źródło
0

Scenariusz

Poniższy skrypt spowodowało jak najlepszą odpowiedzią na podobnym pytaniem napisałem na co unix.se . Działa również świetnie z Unity i 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"
Serge Stroobandt
źródło
0

Możesz użyć narzędzia o nazwie inxi. Można go uzyskać z repozytoriów Ubuntu poprzez:

sudo apt install inxi

lub z github: https://github.com/smxi/inxi

Po prostu uruchom polecenie w następujący sposób:

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)

Zwróć uwagę na Desktop: i3część. W moim przypadku używam menedżera okien i3.

Opcja -Swyświetla informacje o systemie i xdodaje informacje o menedżerze okien.

Michał Przybylowicz
źródło
-3

Mogę tylko myśleć o sprawdzeniu znanych menedżerów okien w uruchomionych procesach. W gconf był klucz, który był ustawiony na preferowany menedżer okien, ale był przestarzały od Gnome 2.12.

Tak więc, jeśli jest to w celach programistycznych, sugeruję, abyś zbadał wszystkie menedżery okien linux; niektóre popularne to:

  • gnome-shell *
  • compiz
  • metacity
  • mruczeć
  • ryba piła

Będziesz musiał uruchomić sprawdzanie każdego z poleceń pgrep -l $WINDOW_MANAGER, gdzie $WINDOW_MANAGERjest nazwa menedżera okien, którego chcesz sprawdzić. Te pgrepkontrole dowodzenia dla uruchomionych procesów.

Nie jestem w 100% pewien, czy Gnome Shell jest uważany za menedżera okien; resztę menedżerów okien mam z listy w /usr/bin/gnome-wmskrypcie. Ten skrypt w rzeczywistości powinien być użyteczny (ponieważ jest obecny podczas czystej instalacji), ale w moim przypadku próbuje się uruchomić, compizco nie jest moim domyślnym menedżerem okien (nie w mojej sesji Gnome).

EDYTOWAĆ:

Cóż, komentarz @Anarci wydaje się bardziej trafny. W moim przypadku to pokazało gnome-shell.

Severo Raz
źródło
1
Wydaje się, że pgrep obsługuje regex, więc można użyć wzorca z naprzemiennymi zmianami. pgrep -l "compiz|metacity|mutter|kwin|sawfish|fluxbox|openbox|xmonad"
Anonimowy
1
To nie wystarczy: co, jeśli użytkownik uruchomi kilka sesji X z różnymi menedżerami? Powinieneś przynajmniej sprawdzić, czy menedżer okien działa na ekranie, który Cię interesuje (możesz to zrobić, sprawdzając $DISPLAYw jego otoczeniu).
Gilles
Ubuntu 18.04 LTS Desktop: Unity: Unity7: ubuntu Sesja: jedność
użytkownik2584621