Czy istnieje proste polecenie linux, które powie mi, jaki jest mój menedżer wyświetlania?
Używam Xfce. Czy różne środowiska pulpitu są zwykle powiązane z różnymi menedżerami wyświetlania?
Czy istnieje proste polecenie linux, które powie mi, jaki jest mój menedżer wyświetlania?
Używam Xfce. Czy różne środowiska pulpitu są zwykle powiązane z różnymi menedżerami wyświetlania?
Odpowiedzi:
Niestety konfiguracja różni się dla każdej dystrybucji:
Debian / Ubuntu
/etc/X11/default-display-manager
RedHat (powinien również dotyczyć Fedory)
/etc/sysconfig/desktop
OpenSuSe
/etc/sysconfig/displaymanager
cat
.
/usr/bin/xdm
- Czy to znaczy, że xdm jest moim menedżerem wyświetlania?
Nie ma Menedżer wyświetlania niekoniecznie jest powiązany z niczym innym, co działa na tym samym serwerze X. Menedżer wyświetlania działa przed zalogowaniem; jest wybrany przez administratora systemu. Wszystko inne (menedżer okien, menedżer sesji, środowisko pulpitu, ...) jest wybierane przez użytkownika. Menedżer wyświetlania nie musi nawet istnieć: jeśli zalogujesz się w trybie tekstowym i uruchomisz interfejs GUI startx
, nie jest zaangażowany żaden menedżer wyświetlania.
Możesz sprawdzić, który menedżer wyświetlania jest domyślny w twoim systemie . To da właściwą odpowiedź tylko przy pewnych wspólnych, ale nie uniwersalnych założeniach. Jeśli z jakiegokolwiek powodu ręcznie uruchomiłeś innego menedżera, ta metoda ci nie powie.
Dobrym rozwiązaniem jest znalezienie identyfikatora procesu serwera X: jego proces nadrzędny jest prawdopodobnie menedżerem wyświetlania, jeśli taki istnieje. Wymaga to, aby klienci działali na tym samym komputerze co serwer X. lsof /tmp/.X11-unix/X${DISPLAY#:}
pokaże proces serwera X (zakładając, że gniazda X są włączone /tmp/.X11-unix
).
x=$(lsof -F '' /tmp/.X11-unix/X0); x=${x#p}
ps -p $(ps -o ppid -p $x)
(Objaśnienie: lsof -F ''
wypisuje dane wyjściowe jak p1234
. Ta -F
opcja oznacza format wyjściowy analizowany maszynowo i ''
oznacza wydrukowanie tylko PID, z literą p
przed nim. x=${x#p}
Usuwa początkową literę p
. Ostatni wiersz otrzymuje PID rodzica serwera X ( ps -o ppid -p $x
) i wezwania ps
do wyświetlenia informacji o tym procesie nadrzędnym).
Niektóre dystrybucje umożliwiają instalację wielu menedżerów wyświetlania. Będzie działał tylko jeden, chyba że masz system wielostanowiskowy. Aby wyświetlić listę wszystkich zainstalowanych pakietów menedżera wyświetlania w obszarze Debian i pochodne:
aptitude -F %p search '~i ~P^x-display-manager$'
lub
</var/lib/dpkg/status awk '
/^Package: / {package = $2}
/^Provides: .*x-display-manager/ {print package}'
Jeśli używasz dystrybucji systemowej . To polecenie podaje nazwę aktualnie skonfigurowanego menedżera wyświetlania, ponieważ może być zainstalowany więcej niż jeden menedżer wyświetlania.
grep '/usr/s\?bin' /etc/systemd/system/display-manager.service
WYJŚCIE będzie coś podobnego
ExecStart=/usr/bin/mdm
Wygląda na to, że używam menadżera wyświetlania mennicy.
grep '/usr/bin' /etc/systemd/system/display-manager.service
. (Ściśle mówiąc, ponieważ /usr/bin
nie zawiera żadnych znaków specjalnych dla powłoki, nie trzeba jej cytować - ale to nie boli.)
cat <file> | grep <searchterm>
zamiast drugiego grep <searchterm> <file>
podczas grepowania.
Nazwa menedżera wyświetlania powinna mieć wartość DESKTOP_SESSION
echo $DESKTOP_SESSION
zwraca dla mnie „gnome”.
EDYCJA
Masz rację. Oni tam iz powrotem na tym na XFCEs Bugzilla więc to chyba nie jest bardzo niezawodny.
$DESKTOP_SESSION
jest unknown
.
Jak powiedział @Gilles, menedżer wyświetlania uruchomi środowisko pulpitu.
Według Debian Wiki , większość z nich kończy się dm
, z wyjątkiem tylko jednego wyjątku slim
.
To powinno wystarczyć do zaspokojenia większości potrzeb ludzi:
ps auxf | awk '{print $11}' | \grep --color -e dm$ -e slim$
Lub, dla pewności, istnieje jako proces nadrzędny i nie jest rozwidlany (z wyjątkiem systemu init):
ps auxf | awk '{print $11}' | \grep -e "^/.*dm$" -e "/.*slim$"
lightdm
. Rozwiązanie RedHat / Fedora z pierwszej odpowiedzi nie działało, konfiguracja prawdopodobnie się zmieniła.
W niektórych przypadkach wmctrl może pomóc. To narzędzie jest kompatybilne z wieloma menedżerami systemu Windows.
wmcrt -m
powinien wyświetlać nazwę aktualnie używanego menedżera okien.
Jak już wspomniano, w tym wątku jest wiele zamieszania. Pierwotne pytanie dotyczy tego, który menedżer wyświetlania, a nie menedżer pulpitu lub menedżer okien. Obecnie używam Xfwm4, który jest menedżerem okien Xfce, i lxdm, który jest lekkim menedżerem wyświetlania X11 (z LXDE, a nie Xfce). Powinieneś być w stanie zobaczyć, jakiego menedżera ekranu używasz przez htop. Prawdopodobnie już dawno odkryłeś odpowiedź w ciągu ostatnich 4 lat :)
Możesz to zrobić za pomocą skryptu innej firmy o nazwie screenfetch
Screenfetch to skrypt bash dostępny dla systemu Linux, który wyświetla informacje o systemie wraz z wersją ASCII dystrybucji systemu Linux Logo systemu
Zainstaluj za pomocą menedżera pakietów
sudo apt-get install screenfetch
(zakładając, że korzystasz z wariantów Debiana)
i po prostu uruchom w
screenfetch
swoim terminalu
Link do projektu https://github.com/KittyKatt/screenFetch
X jest wysoce modułowy, więc jeśli naprawdę tego chcesz, możesz mieszać środowiska pulpitu i menedżerów systemu Windows. W końcu menedżer okien to tylko sposób na malowanie okien (taki jest prosty widok).
Więc jeśli weźmiesz gnome, metacity był kiedyś menedżerem Windows, ale teraz został zastąpiony przez Mutter.
Problem z miksowaniem występuje we współczesnych środowiskach komputerowych, pulpit i menedżer okien są ze sobą ściśle powiązane. Zbyt dużo miksowania może skończyć się mniejszą funkcjonalnością.
Jak wspomniano, $ DESKTOP_SESSION działa, ale jeśli chcesz zapytać serwer X11, możesz to zrobić:
xprop -id $(xprop -root _NET_SUPPORTING_WM_CHECK | cut -d\# -f2) WM_NAME
Który rozkłada się na
xprop -root _NET_SUPPORTING_WM_CHECK | cut -d\# -f2
0x1000052
xprop -id 0x1000052 WM_NAME
WM_NAME(STRING) = "xfwm4"
Który pobiera identyfikator okna utworzonego przez menedżera okien. Specyfikacja mówi (http://standards.freedesktop.org/wm-spec/1.3/ar01s03.html):
_NET_SUPPORTING_WM_CHECK, WINDOW/32
The Window Manager MUST set this property on the root window to be the ID
of a child window created by himself, to indicate that a compliant window
manager is active.
A potem pytasz o właściwość WM_NAME wspomnianego okna.
WM_NAME jest:
The WM_NAME property is an uninterpreted string that the client wants the
window manager to display in association with the window (for example, in
a window headline bar).
_NET_SUPPORTING_WM_CHECK
podaje informacje o menedżerze okien, a nie o menedżerze wyświetlania. To nie zawsze działa; w moim systemie ta właściwość jest ustawiona na identyfikator okna, ale okno to nie ma nazwy.