
So wie ich es verstehe, wird für die textbasierte Interaktion mit dem Linux-Kernel ein Programm namens (oder ) init
gestartet , das eine Verbindung zu einem der TTY-Geräte unter herstellt und zur Eingabe eines Benutzernamens auffordert. Danach wird ein Programm namens ausgeführt, das zur Eingabe des Benutzerkennworts auffordert und, wenn es korrekt ist, die bevorzugte Shell des Benutzers startet (z. B. oder ). An diesem Punkt interagiert Bash über das TTY-Gerät mit dem Kernel.getty
agetty
/dev
login
bash
csh
Wie funktioniert dieser Anmeldevorgang für X11? Interagiert X11 über ein TTY mit dem Kernel?
Antwort1
Die Shell verwendet ein TTY-Gerät (sofern sie an ein solches angeschlossen ist), um Benutzereingaben zu erhalten und Ausgaben zu erzeugen, und sonst nicht viel. Die Tatsache, dass eine Shell an ein TTY angeschlossen ist, wird bestimmt durch getty
(und bewahrt durch login
); die meiste Zeit ist es der Shell egal, ob sie an ein TTY angeschlossen ist oder nicht. Ihre Interaktion mit dem Kernel erfolgtüberSystemaufrufe.
Ein X11-Server kennt keine Logins (genau wie eine Shell). Der Login-Prozess in X11 funktioniert auf zwei Arten:
- entweder meldet sich der Benutzer am Terminal an und startet dann X (normalerweise mit
startx
); - oder ein X-Server wird mit einem „Display-Manager“ gestartet, der den Benutzer zur Eingabe von Login und Passwort (oder den erforderlichen Authentifizierungsinformationen) auffordert.
Die Art und Weise, wie X11-Server Eingaben erhalten und Ausgaben erzeugen, unterscheidet sich stark von einer Shell. Auf der Eingabeseite kennt X Geräte, die Shells nicht kennen, angefangen bei Mäusen; diese verwaltet es normalerweise direkt mit seinen eigenen Treibern. Sogar für Tastaturen hat X seine eigenen Treiber, die die Handhabung des Kernels ergänzen (so wie ich es verstehe, verwendet X unter Linux beispielsweise den TTY-Treiber, um Roheingaben von der Tastatur zu lesen, interpretiert diese dann aber mit seinem eigenen Treiber). Auf der Ausgabeseite steuert X Anzeigegeräte direkt an, mit oder ohne Hilfe des Kernels und ohne Umweg über ein TTY-Gerät.
X11-Server auf vielen SystemenTunVerwenden Sie jedoch TTY-Geräte, um mit dem Kernel zu synchronisieren: Auf Systemen, die virtuelle Terminals unterstützen, muss X das VT, auf dem es ausgeführt wird, „reservieren“ und die VT-Umschaltung handhaben. Dabei gibt es noch ein paar andere Feinheiten; unter Linux optimiert X das TTY, um GPM (ein Programm, das die Verwendung von Mäusen im Textmodus ermöglicht) zu deaktivieren. X kann auch ein VT gemeinsam nutzen ...
Auf manchen Workstations in der Vergangenheit gab es keine wirkliche Synchronisierung mit dem Kernel. Wenn Sie nicht ausgeführt haben xconsole
, konnte es passieren, dass Kernel-Meldungen im „Textmodus“ über Ihrem X11-Bildschirm angezeigt wurden.
Antwort2
Der Kernel hat absolut kein Konzept für eine Anmeldung oder dafür, wer angemeldet ist - er interessiert sich nur dafür, dass Prozesse unter einer bestimmten Benutzer-ID laufen (wer das ist, geht den Kernel auch nichts an!). Ein Anmeldeprogramm, sei es getty auf einem Terminal oder ein X11-Displaymanager, wird als Root ausgeführt und verwendet dann setuid() und verwandte Aufrufe, um eine Umgebung für die UID einzurichten, die der lokale Resolver (NSS- und libc-Zeug - geht den Kernel auch nichts an) für den gerade authentifizierten Benutzer vorgeschlagen hat.