Odpowiedzi:
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
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.
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_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"
XDG_CURRENT_DESKTOP=ubuntu:GNOMEGDMSESSION=ubuntuXDG_CURRENT_DESKTOP=ubuntu:GNOMEGDMSESSION=ubuntu-waylandXDG_CURRENT_DESKTOP=UnityGDMSESSION=ubuntuXDG_CURRENT_DESKTOP=UnityGDMSESSION=ubuntuUwaga: MIR_SERVER_NAME jest również ustawiony
MIR_SERVER_NAME=session-$NUMBERXDG_CURRENT_DESKTOP=UnityGDMSESSION=ubuntuXDG_CURRENT_DESKTOP=XFCEGDMSESSION=xfceXDG_CURRENT_DESKTOP=GDMSESSION=kde-plasmaXDG_CURRENT_DESKTOP=UnityGDMSESSION=ubuntuXDG_CURRENT_DESKTOP=UnityGDMSESSION=ubuntu-2dXDG_CURRENT_DESKTOP=GNOMEGDMSESSION=gnome-shellXDG_CURRENT_DESKTOP=GNOMEGDMSESSION=gnome-classicXDG_CURRENT_DESKTOP=GNOMEGDMSESSION=gnome-fallbackXDG_CURRENT_DESKTOP=GNOMEGDMSESSION=cinnamonXDG_CURRENT_DESKTOP=KDEGDMSESSION=defaultXDG_CURRENT_DESKTOP=X-CinnamonGDMSESSION=defaultXDG_CURRENT_DESKTOP=LXDE GDMSESSION=LubuntuXDG_CURRENT_DESKTOP=X-Cinnamon GDMSESSION=cinnamonXDG_CURRENT_DESKTOP=GNOME GDMSESSION=gnomeXDG_CURRENT_DESKTOP=MATEGDMSESSION=mateXDG_CURRENT_DESKTOP=XFCEGDMSESSION=xubuntuW 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 ..
$XDG_CURRENT_DESKTOPto bieżące środowisko pulpitu, NIE menedżer okien.
Okazało pstreesię, ż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 -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
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: i3część. W moim przypadku używam menedżera okien i3.
Opcja -Swyświetla informacje o systemie i xdodaje 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_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.
pgrep -l "compiz|metacity|mutter|kwin|sawfish|fluxbox|openbox|xmonad"
$DISPLAYw jego otoczeniu).