Jak działa „swich user” w systemach Unix / Linux i X11

3

W systemach Unix / Linux + X11 możesz mieć wiele sesji użytkownika, (a) zmieniając poszczególne okna za pomocą su, sudoa nawet sshlub (b) uruchamiając dwa środowiska pulpitu za pomocą czegoś takiego jak menu „przełącz użytkownika”. Moje pytanie brzmi: jak działa (b). Pytanie występuje w dwóch wersjach:

Praktyczna wersja: Łatwo jest przełączać użytkowników za pomocą jawnego interfejsu użytkownika na pełnym pulpicie, takim jak Gnome lub KDE. Ale jak to zrobić z alternatywnego menedżera okien? ( Niesamowite w moim przypadku).

Wersja teoretyczna: Jak faktycznie działa instalacja wodno-kanalizacyjna? Czy wiele procesów serwera X współdzieli ten sam sprzęt? Czy też współczesne wersje Xorg obsługują tylko koncepcję wielu sesji. A może to coś innego?

Adrian Ratnapala
źródło

Odpowiedzi:

3

Zarówno GNOME, jak i KDE mają „menedżery wyświetlania”, odpowiednio GDM i KDM, które mają w tym duży udział. Zadaniem menedżera wyświetlania jest w zasadzie uruchamianie serwera X11 (obecnie Xorg, Xfree86 lub oryginalny serwer X wcześniej) na każdym fizycznym wyświetlaczu i wyświetlanie na nich ekranów logowania. Xdm jest prawdopodobnie najstarszy.

Nowoczesne menedżery wyświetlania zostały rozszerzone, aby obsługiwać wiele serwerów X11 na tym samym stanowisku - dla każdej sesji użytkownika, plus jeden dla samego ekranu logowania („powitania”). Tylko jedna z tych sesji jest aktywna w dowolnym momencie i kontroluje sprzęt graficzny; inni się poddają. [1]

W systemie Linux służy do tego funkcja „wirtualnej konsoli” - technicznie możliwe jest przełączanie między tymi sesjami za pomocą powszechnie znanych CtrlAltF12345…kluczy, chociaż nie wiadomo, który ekran X11 użytkownika działa na której konsoli wirtualnej. [2]

Zwykle jest inny demon, zwykle ConsoleKit lub „systemd-logind”, który ma za zadanie śledzić, którzy użytkownicy są zalogowani, dla wszystkich rodzajów sesji tekstowych i graficznych (tty, ssh, X11, Wayland i c).

Sama sesja tak naprawdę nie musi wiele robić; zależy tylko od „logind”, a czasem od konkretnego menedżera wyświetlania.

  • Jeśli chcesz wyświetlić listę użytkowników (podobnie jak Unity), demonów „logind” lub ConsoleKit można użyć za pośrednictwem DBus, aby uzyskać listę zalogowanych użytkowników i aktywować wybraną sesję. Bieżąca sesja powinna się po tym zablokować (np. Po uruchomieniu wygaszacza ekranu; zarówno GNOME, jak i KDE mają zintegrowaną blokadę ekranu w samym menedżerze okien).

  • W GNOME nie ma listy użytkowników, tylko jeden element menu „Przełącz użytkowników”. Wykorzystuje libgdmgreeterdo aktywowania „login” (sesja sesji, który ma ekran logowania) używając „logind” lub ConsoleKit; jeśli nie jest uruchomiona „sesja logowania”, libgdmgreeter kontaktuje się z GDM przez DBus, aby rozpocząć nową. Myślę, że można to zrobić, uruchamiając gdmflexiserverpolecenie.


[1] Dobrowolnie, przynajmniej w obecnej implementacji Linuksa; planuje się zaostrzyć, aby składnik systemu faktycznie odebrał dostęp. Podobnie, jeśli sesje prowadzisz PulseAudio, dobrowolnie rezygnuje z dostępu do urządzeń audio. Z czystym ALSA nic nie zrobiłoby, więc dostęp audio z przełączaniem sesji to gra szczęścia. Oznacza to, że nawet jeśli nieaktywne sesje nie są w stanie otworzyć urządzeń audio po wykonaniu polecenia „logind”, nadal mogą odtwarzać dźwięk przez wcześniej otwarte urządzenia i nic nie może jeszcze zmusić ich do zamknięcia (dopóki jądro nie uzyska revoke()wsparcia).

[2] Wirtualne konsole Linuksa są dostępne tylko na 0 „siedzeniu”; jeśli masz więcej wyświetlaczy i klawiatur, mogą mieć własne serwery X11 - sprawdź dema wielostanowiskowej Fedory 19 - ale myślę, że nie mogą przełączać sesji. Ale w tej chwili jest wiele do zrobienia, między innymi, aby uczynić pracę wielostanowiskową.

grawitacja
źródło