Dokumentation: Architektur der Linux-Sitzung

20

Ich suche eine gute Übersichtsdokumentation, die den Stapel von Daemons und Diensten beschreibt, die in einer modernen Linux-Sitzung enthalten sind. Obwohl ich verschiedene Dokumentationen über dbusund gelesen habe systemd, verstehe ich immer noch nicht den Überblick.

Insbesondere suche ich nach Antworten auf diese Fragen (beantworte die Fragen nicht, sie sollten nur klarstellen, nach welcher Art von Dokumentation ich suche):

  • Welcher Prozess ist nach der Anmeldung der Stamm der Benutzersitzung?

  • Welche Prozesse sollen gestartet werden und warum? Ich suche nach einer Desktop-agnostischen Antwort, egal ob Gnome, KDE, FVWM oder eine einfache Shell gestartet wird.

  • Welche Rolle spielen all diese Dämonen? Welche von ihnen würden alleine laufen, welche von anderen abhängen? Welches sollte von wem, warum und wie lange gestartet werden? Und wer sollte diesen Zoo unterhalten?

Ich frage, weil ich fand , dass ich einen ganzen Zoo von Dämonen haben direkt nach dem Booten ausgeführt wird : systemd-journald, systemd-udevd, dbus-daemon, systemd-logind. Doch damit nicht genug: Abgesehen von diesem Laufultraleichte PDF-Betrachter zathura weiter auffüllt meiner Sitzung mit dbus-launch, dbus-daemon, at-spi2-registryd, und at-spi-bus-launcher, letztere Start noch einem anderen dbus-daemon. Keiner von ihnen war schon einmal dort, keiner wurde eingeladen, aber sie werden im Haus bleiben und mir ein gruseliges Gefühl geben, bis ich mich auslogge. Ich bin mir sicher, dass ich hier etwas vermisse ...

Ein weiteres Beispiel: Nach der Anmeldung systemdläuft eine mit meiner Benutzer-UID, aber ich habe keine Ahnung, was sie tun soll (seit Version 206 sollte ich das nicht mehr als Sitzungsmanager verwenden, oder?). Es gibt einen untergeordneten Prozess (sd-pam), über den ich keine Dokumentation gefunden habe.

Was machen Sie? Welche Idee steckt hinter diesem Setup?

Um meine Sichtweise zu verdeutlichen: In „alten Zeiten“ reichte es zu wissen, dass loginmeine Anmeldeshell gestartet ( bashausgeführt ~/.profile) wurde, und von diesem Punkt an konnte ich eine Sitzung aufbauen, abhängig von den Umständen, möglicherweise starten screenoder startx.

stefan
quelle
4
Diese Frage kann nicht beantwortet werden, da jede Distribution ihre eigenen Sachen macht. Schlimmer noch, die Desktop-Umgebungen von KDE und GNOME unterscheiden sich erheblich. Dies hängt davon ab, was nach dem Start des X Windowing Systems passiert. Schlimmer noch, Distributionen ändern ihre Arbeitsweise - Sie erwähnen systemd, das relativ neu ist. Wenn Sie nun eine verteilungsunabhängige Antwort wünschen, ist dies "Der Linux-Kernel startet init, und alles andere hängt davon ab, wie init konfiguriert ist". Diese Antwort ist so flach wie breit, während Sie für jede ausführliche Antwort Ihre Frage zumindest auf Distributionsversionen eingrenzen müssen.
Thorsten Staerk
1
Bitte teilen Sie Ihre Frage auf. Zum Beispiel könnte ich Ihnen sagen, dass Sie nach gnome-session und startkde als "root session" -Prozess suchen sollen, der weitere Erklärungen benötigt.
Thorsten Staerk
1
@ thorsten-staerk: "kann nicht beantwortet werden, weil jede Distribution ihre eigenen Sachen macht" Du sagst also, dass ich keine Vermutung darüber machen kann, welche Deamons laufen? Das kann ich nicht wirklich glauben. Entschuldigung, aber das Aufteilen der Frage würde nicht die Antwort geben, nach der ich suche. Aber ich werde versuchen, "Desktop-agnostisch" umzudrücken: Ich suche den kleinsten gemeinsamen Nenner oder die minimale Anzahl von ausgeführten Dämonen (und die Begründung für jede von ihnen), die in einer Sitzung erwartet werden. Wie sie interagieren und wie sich dieser Satz bei verschiedenen Arten von Sitzungen ändert (gibt es einen dbusd in einer Terminalsitzung? Über SSH?)
Stefan
1
Linux läuft auf Geräten, die nur eine LCD-Anzeige haben. Es läuft auch auf Mobiltelefonen, die weder einen AppStore noch eine Kamera haben. Es läuft auch auf einem Samsung Galaxy und auf Großrechnern. Es kann sinnvoll sein, mehrere Terabyte RAM zu belegen, und es kann in einige Kilobyte passen. Ich fürchte, der kleinste gemeinsame Nenner einer Linux-Sitzung ist Linux, und Sie haben die "Wahlfreiheit", die manchmal hässlich ist, um auszuwählen, was Sie sonst noch brauchen. Für einen Desktop werde ich versuchen, die kleinsten gemeinsamen Nenner aufzulisten, aber Sie werden besser Fragen zu dbus stellen als "alles".
Thorsten Staerk

Antworten:

8

Ich bin so fasziniert von Ihrer Frage, dass ich sie auf linuxintro beantwortet habe . Hier ist die Antwort, die auf Ihre Frage zugeschnitten ist:

Wenn ein typischer PC mit Linux wie Fedora, SUSE oder Ubuntu hochfährt, sind die Schritte wie folgt:

  1. Das BIOS führt einen Selbsttest durch
  2. Das BIOS lädt den Bootsektor und führt ihn aus
  3. Bootloader wie grub oder lilo werden ausgeführt
  4. Bootmenü wird angezeigt (optional)
  5. Kernel wird geladen
  6. Die anfängliche RAM-Disk ist geladen
  7. Kernel wird ausgeführt
  8. Kernel führt init aus
  9. init wird abhängig von Ihrer Distribution, Version und Konfiguration ausgeführt

    • SysV-Init-Skripte oder
    • systemd oder
    • Emporkömmling

Der Sinn all dieser Programme ist es, Dienste wie zu starten

  • dbus , der die Kommunikation zwischen Anwendungen ermöglicht, sodass eine Anwendung Funktionen von einer anderen ausgeführten Anwendung aufrufen kann. Dies ist normalerweise für Benutzer nicht sichtbar, z. B. eine Anwendung, die den Fenstermanager aufruft, um das eigene Fenster in den Fokus zu rücken
  • Login , mit dem sich Benutzer an den CTRL_ALT_F * -Terminals anmelden können. Der Login-Prozess, wie er von ps-A gesehen wird, wird im Falle von systemd systemd-logind sein (kann wiederum von Distribution zu Distribution variieren).
  • udev das hat viele namen, zB für mich finde ich es mit ps-a als systemd-udevd. Es weist z. B. die Geräte-Handles in / dev / Geräten zu, die Sie anschließen, z. B. einem USB-Datenträger
  • Cron , der Befehle basierend auf einem Zeitplan in / etc / crontab ausführt und außerdem über die Funktion "@reboot" verfügt, um Befehle beim Booten zu starten.

10) Der Anmeldevorgang, der von systemd ausgeführt wird, wartet auf eine Anmeldung an einem virtuellen Terminal. Eine Anmeldung ist normalerweise durch Drücken von CTRL_ALT_F1 erreichbar

11) Normalerweise und standardmäßig startet der Init-Prozess jetzt den Anzeigemanager, z. B. kdm (KDE-Anzeigemanager) oder xdm

12) Der Display Manager startet nun das grafische System. Es gibt praktisch kein grafisches System außer Xorg (hildon ist für eingebettete Geräte).

13) Der Anzeigemanager weist den Xorg-Server an, einen Anmeldebildschirm anzuzeigen


Jetzt ist der Startvorgang abgeschlossen und der Computer wartet auf die Anmeldung des Benutzers.


14) Beim Anmelden des Benutzers im Display-Manager wird eine Desktop-Umgebung wie KDE, GNOME oder XFCE4 gestartet. Der Root-Prozess für die KDE-Sitzung eines Benutzers heißt startkde, der Root-Prozess für GNOME heißt gnome-session, der Root-Prozess für XFCE4 heißt xfce4-session

15) KDE startet normalerweise alle ausführbaren Dateien von ~ / .kde / Autostart und die .desktop-Dateien von / etc / xdg / autostart (siehe Aufgaben planen ).

16) Wenn sich der Benutzer grafisch angemeldet hat und auf ein Symbol klickt, um eine Konsole zu öffnen, wird in der Regel eine Bash ausgeführt. Bash führt dann zuerst .bashrc aus

17) Wenn der Benutzer eine Anmeldeshell öffnet, bedeutet dies, dass er sich über ein Kennwort oder einen autorisierten Schlüssel anmelden muss. Er kann dies auf der CTRL_ALT_F1-Konsole oder durch Senden an einen Computer, z. B. localhost, tun. Dann werden die .sh-Skripte aus /etc/profile.d und .bashrc ausgeführt.

Thorsten Staerk
quelle
1
Dies ist eine gute, allgemeine Übersicht über die Schritte zum Starten eines Linux-Systems. Die spezifische Software (zB grub, lilo, u-boot) ändert sich, aber die Funktion ist dieselbe. Ich vermute, Sie sind am meisten am Init-Prozess interessiert, konzentrieren Sie sich also auf die Schritte 8 und 9. sysvinit (/ etc / inittab) ist zugunsten von systemd ODER upstart so gut wie überholt. Beide können sysvinit-Dienste ausführen / überwachen.
Dturvene
Keine App ruft über den D-Bus an, um das Fenster im Fokus zu haben. -
Robert Siemer
0

Die Antwort ist 42. Thorsten Staerk hat das Hauptproblem bereits in den Kommentaren erläutert.

Damit Sie sich einen Überblick verschaffen können, müssen Sie wissen, dass Linux- und Open Source-Software von Millionen von Freiwilligen und Unternehmen entwickelt und gepflegt wird. Es ist also nicht einfach, mit dem Wachstum Schritt zu halten.

Auf der anderen Seite gibt es eine Menge Dokumentation: die Man-Pages für jede Software, eine gute Erklärung, was D-Bus ist, die Entwickler-Mailinglisten, Google und so weiter. Nehmen Sie sich also einige Jahre Zeit und lesen Sie alle Dokumente der Pakete, an denen Sie interessiert sind. Wenn Sie es schneller benötigen, stellen Sie einfach einige gute Fragen bei Unix & Linux .

Viel Glück.

Gemeinschaft
quelle
Wenn ich weiß, wie man einen elektrischen Schneebesen bedient, weiß ich nicht, wie der Kuchen hergestellt wird. "Lesen Sie alle Dokumente der Pakete, die Sie interessieren" - dies ist eine ziemlich nutzlose Antwort. Die Dokumentation, die Sie erwähnen, sagte mir, was diese Dinge tun. Aber ich möchte wissen, wofür sie verwendet werden. "Stell einfach ein paar gute Fragen" - meine Frage ist einfach und klar: Wo ist die Dokumentation?
Stefan
1
Vielleicht müssen Sie lernen, wie Sie Fragen stellen, um die erwartete Antwort zu erhalten. In diesem Fall möchte ich Sie auf eine sehr nützliche FAQ hinweisen. So stellen Sie Fragen The Smart Way
0

Bevor ich meine Version der Antwort gebe, möchte ich mit ein paar Definitionen beginnen

Linux == 'Ein Betriebssystem-Kernel "Linux-System ==" Eine Art System, das um den Linux-Kernel herum aufgebaut ist "Sitzung auf einem Linux-System ==" Einige verwandte Benutzerprogramme, die auf einem Linux-System ausgeführt werden "

Je weiter Sie sich vom Kernel entfernen, desto unwahrscheinlicher ist es, dass zwei "Systeme" tatsächlich etwas gemeinsam haben. Was bedeutet, dass es keine vernünftige Definition einer "Modern Linux Session" gibt

Ehrlich gesagt ist die Erwartung, dass es eine übergreifende Systemdokumentation geben sollte, die alle Komponenten enthält, eine Erwartung, die in den meisten Teilen der Open-Source-Welt nicht erfüllt werden kann. Open Source-Entwickler schreiben Programme, um die spezifischen Probleme zu lösen (oder neu zu lösen!), Die ihnen wichtig sind - also dokumentieren sie nur das Teil davon - wenn das so ist! :-)

Vielleicht haben Sie mehr Glück mit den Handbüchern, die mit kommerziellen Linux-Distributionen erhältlich sind. Angesichts des konservativen Charakters der meisten von ihnen können Sie jedoch argumentieren, dass ihre Veröffentlichungen nicht "modern" sind!

Der Schlüssel Rat , den ich geben würde ist , dass un ein sehr allgemeinen Sinn Unix / Linux - Systeme heirachical sind. Früher habe ich den Leuten gesagt, dass ich nix systems mag, weil ich mit init anfangen und von dort aus alles verstehen kann, was auf einem System vor sich geht. Systemd und seine Freunde haben dies ein wenig geändert, aber das Grundprinzip ist dasselbe - beginnen Sie oben und arbeiten Sie nach unten - die "Programme, die eine Sitzung bilden" sind im Allgemeinen diejenigen, die von dem Punkt an begannen, an dem Sie in die Erbe eintreten. Also, wenn Sie in ssh sind, werden Sie wahrscheinlich nur das bekommen, was Ihre Standard-Shell ist, wie ssh funktioniert. Wenn Sie sich über eine grafische Oberfläche anmelden, erhalten Sie alles, was von Ihrem Anmeldemanager gestartet wurde, so wie Ihr Anmeldemanager funktioniert

Viele Desktop - Frameworks erschweren dies, indem sie verschiedene Service - Daemons auf Benutzer - oder Systemebene ausführen. Manchmal werden diese bei Bedarf durch einen Blick auf die Befehlszeilenoptionen von gestartet, wenn das erste Programm gestartet wird, das sie benötigt Programme, die Sie ausführen, gibt es sehr wahrscheinlich Optionen, um dieses Verhalten zu beenden und die Anwendung im "nackten" Modus auszuführen.

Leider bedeutet dies, dass "Lesen der Dokumentation der einzelnen Programme" der einzige Weg ist, alles zu verstehen, und dass es für eine Sitzung keine "Mindestanzahl von Daemons" gibt - es gibt nur die Art und Weise, wie eine bestimmte Distribution für eine bestimmte Sitzung funktioniert Anmelde- / Zugriffsmethode und deren Verteilung, Desktop und Anmeldemethode.

tjb63
quelle