Jak X11 współdziała z jądrem / wykonuje logowanie

14

Jak rozumiem dla interakcji tekstowej z jądrem Linuksa, program o nazwie inituruchamia się getty(lub agetty), który łączy się z jednym z urządzeń TTY pod /devi pyta o nazwę użytkownika. Następnie loginuruchamiany jest program, który monituje o hasło użytkownika, a jeśli jest poprawny, uruchamia preferowaną powłokę użytkownika (np. bashLub csh). W tym momencie bash wchodzi w interakcje z jądrem za pośrednictwem urządzenia TTY.

Jak działa ten proces logowania dla X11? Czy X11 współdziała z jądrem przez TTY?

allsey87
źródło

Odpowiedzi:

15

Powłoka używa urządzenia TTY (jeśli jest podłączone do jednego), aby uzyskać dane wejściowe od użytkownika i uzyskać dane wyjściowe, i niewiele więcej. Fakt, że powłoka jest połączona z TTY jest określony przez getty(i zachowany przez login); przez większość czasu powłoka nie dba o to, czy jest połączona z TTY, czy nie. Jego interakcja z jądrem odbywa się za pośrednictwem wywołań systemowych.

Serwer X11 nie wie o logowaniu (podobnie jak powłoka). Proces logowania w X11 działa na dwa sposoby:

  • albo użytkownik loguje się na terminalu, a następnie uruchamia X (zwykle używa startx);
  • lub serwer X jest uruchamiany z „menedżerem wyświetlania”, który monituje użytkownika o login i hasło (lub wszelkie wymagane informacje uwierzytelniające).

Sposób, w jaki serwery X11 uzyskują dane wejściowe i generują dane wyjściowe, jest bardzo różny w porównaniu do powłoki. Po stronie wejściowej X wie o urządzeniach, których nie mają powłoki, zaczynając od myszy; zazwyczaj zarządza nimi bezpośrednio za pomocą własnych sterowników. Nawet w przypadku klawiatur X ma własne sterowniki, które uzupełniają obsługę jądra (tak jak rozumiem, na przykład w Linuksie X używa sterownika TTY do odczytu surowych danych wejściowych z klawiatury, ale następnie interpretuje to za pomocą własnego sterownika). Po stronie wyjściowej X napędza urządzenia wyświetlające bezpośrednio, z pomocą lub bez pomocy jądra i bez przechodzenia przez urządzenie TTY.

Serwery X11 na wielu systemach zrobić Urządzenia użycie TTY jednak, aby zsynchronizować z jądrem: w systemach, które obsługują wirtualnych terminali, X musi „rezerwy” VT to działa na rękojeść i przełączania VT. Po drodze jest jeszcze kilka innych subtelności; tak więc w Linuksie X poprawia TTY, aby wyłączyć GPM (program, który pozwala na użycie myszy w trybie tekstowym). X może także udostępniać VT ...

Na niektórych stacjach roboczych w przeszłości synchronizacja z jądrem nie była zbyt wyraźna; jeśli nie uruchomiłeś xconsole, możesz skończyć z komunikatami jądra wyświetlanymi w „trybie tekstowym” nad wyświetlaczem X11.

Stephen Kitt
źródło
2

Jądro absolutnie nie ma pojęcia o logowaniu ani o tym, kto jest zalogowany - zależy tylko na tym, aby procesy działały pod określonym identyfikatorem użytkownika (kto to też nie jest sprawa jądra!). Program do logowania, czy to getty na terminalu, czy na menedżerze wyświetlania X11, działa jako root, a następnie używa setuid () i powiązanych wywołań, aby skonfigurować środowisko dla dowolnego identyfikatora UID, jaki sugeruje lokalny resolver (NSS i libc - nie jest to także sprawa jądra) do użycia dla użytkownika, który właśnie się uwierzytelnił.

rackandboneman
źródło