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?
źródło
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?
Jeśli masz wmctrl
zainstalowany, pierwszy wiersz wyniku polecenia
wmctrl -m
pokaże nazwę menedżera okien. Jeśli nie masz wmctrl
zainstalowanego, użyj następującego polecenia, aby go zainstalować:
sudo apt-get install wmctrl
Uwaga man wmctrl
(czyli man
strona 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 -m
była: Name: Metacity
podczas echo $DESKTOP_SESSION
wyświetlania ubuntu-2d
i echo $XDG_CURRENT_DESKTOP
pokazywania Unity
.
Na świeżym Ubuntu 15.10 instalacja Ubuntu desktop
oprogramowania na starym laptopie, pierwsza linia wyjścia z wmctrl -m
brzmiała: Name: Compiz
podczas gdy DESKTOP_SESSION
i XDG_CURRENT_DESKTOP
wartości były ubuntu
iUnity
ssh -Y {host} 'wmctrl -m'
zwraca pewne wartości (np. „Nazwa: Compiz” i kilka N / A), ale ma sens, żessh
miałoby ograniczone informacje o menedżerze okien.wmctrl -d
(Lista wszystkich komputerów zarządzanych przez menedżera okien) lubwmctrl -l
(Lista okien zarządzanych przez menedżera okien) działa poprawnie na Xubuntu Wily z Window Maker?W systemach Linux I badane zmienne środowiskowe
XDG_CURRENT_DESKTOP
iGDMSESSION
otrzymał następujące wyniki.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
źródło
W typie terminala,
env
aby 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:
(Wyprowadzi na przykład „jedność”, jeśli używasz Unity)
lub
(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 wynikom
env
takich jak DESKTOP_SESSION i COMPIZ_CONFIG_PROFILEPonieważ 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 " " -f2
ponieważ 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
compiz
na inny podobnymutter
,kwin
itp ..źródło
$XDG_CURRENT_DESKTOP
to bieżące środowisko pulpitu, NIE menedżer okien.Okazało
pstree
się, że jestem dużą pomocą.Instalacja
wynik
Oto co mam.
źródło
źródło
)
na końcu brakuje .xprop -root -notype
wyświetla wszystkie właściwości okna głównego (i pomija typy dla łatwiejszego parsowania), dane wyjściowe są wysyłaneawk
za pośrednictwem potoku; 2.awk
instrukcja$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
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).źródło
gnome-...
procesów (i trafienie KDEkdevtmpfs
)Ż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
(aby sprawdzić, który smak lub wersję zainstalowałem na moim urządzeniu UBUNTU)
(uruchamia aktualnie używaną sesję pulpitu / środowisko pulpitu)
(aby dowiedzieć się, która wersja gnome jest zainstalowana)
źródło
Lub w jednym wierszu:
źródło
Jest to trochę możliwe w przypadku dbus i usługi kont (domyślnie w 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
źródło
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.
źródło
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:
Zwróć uwagę na
Desktop: i3
część. W moim przypadku używam menedżera okieni3
.Opcja
-S
wyświetla informacje o systemie ix
dodaje informacje o menedżerze okien.źródło
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:
Będziesz musiał uruchomić sprawdzanie każdego z poleceń
pgrep -l $WINDOW_MANAGER
, gdzie$WINDOW_MANAGER
jest nazwa menedżera okien, którego chcesz sprawdzić. Tepgrep
kontrole 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-wm
skrypcie. Ten skrypt w rzeczywistości powinien być użyteczny (ponieważ jest obecny podczas czystej instalacji), ale w moim przypadku próbuje się uruchomić,compiz
co 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
.źródło
pgrep -l "compiz|metacity|mutter|kwin|sawfish|fluxbox|openbox|xmonad"
$DISPLAY
w jego otoczeniu).