Odpowiedzi:
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, że ssh
miałoby ograniczone informacje o menedżerze okien.
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?
W systemach Linux I badane zmienne środowiskowe XDG_CURRENT_DESKTOP
i GDMSESSION
otrzymał następujące wyniki.
Możesz użyć tego wiersza, aby uzyskać wynik:
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
Uwaga: MIR_SERVER_NAME jest również ustawiony
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
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:
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 " " -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 podobny mutter
, kwin
itp ..
$XDG_CURRENT_DESKTOP
to bieżące środowisko pulpitu, NIE menedżer okien.
Okazało pstree
się, że jestem dużą pomocą.
sudo apt-get install pstree
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}]
xprop -id $(xprop -root -notype | awk '$1=="_NET_SUPPORTING_WM_CHECK:"{print $5}') -notype -f _NET_WM_NAME 8t
)
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łane awk
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).
gnome-...
procesów (i trafienie KDE kdevtmpfs
)
Ż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)
#! /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
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
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"
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: i3
część. W moim przypadku używam menedżera okien i3
.
Opcja -S
wyświetla informacje o systemie i x
dodaje informacje o menedżerze okien.
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ć. Te pgrep
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
.
pgrep -l "compiz|metacity|mutter|kwin|sawfish|fluxbox|openbox|xmonad"
$DISPLAY
w jego otoczeniu).