Was passiert unter dem Deckmantel, um mich einzuloggen und Unity oder eine andere grafische Benutzeroberfläche zu starten?

55

Wenn es Probleme gibt, ist es möglicherweise hilfreich zu verstehen, was im Hintergrund passiert, um einen Benutzer in eine GUI-Sitzung einzuloggen und eine Unity (oder einen anderen Fenstermanager) zum Aufrufen eines Desktops aufzurufen.

John S Gruber
quelle

Antworten:

86

So startet eine Desktop-Benutzer-GUI-Sitzung mit Ubuntu 12.04-14.04

Hier ist die Kette von Ereignissen:

Der Ubuntu Linux Kernel und Upstart

Der Kernel startet den Init-Prozess als Prozessnummer 1. Dies ist ein Upstart für Ubuntu 12.04.

Upstart-Jobs sind in /etc/init/


Manpage: man init

Protokolle: Kernel-Protokoll ( dmesg; kopiert nach /var/log/syslog) /var/log/upstart/jobname.log, andere Protokolle, die von gestarteten Jobs bestimmt werden.

Quelle: /etc/init/lightdm.conf


Der Startjob wird ausgeführt /usr/sbin/lightdm. Wir können wahrscheinlich damit rechnen, dass dies im systemdLaufe der Zeit in eine Serviceeinheit umgewandelt wird.

Lightdm


Manpage :,man lightdm Auch: Ubuntu Wiki: LightDM

Protokolle:

/var/log/syslog
/var/log/lightdm/lightdm.log
/var/log/lightdm/*

## for PAM:
/var/log/auth.log

## for the Xorg X server:
/var/log/Xorg.0.log

Quelle: man lightdm und/var/log/lightdm/lightdm.log


lightdm fängt ziemlich spät im init-Prozess an; Beispielsweise muss der System-D-Bus bereits gestartet sein, das Dateisystem muss bereit sein und das Grafikdisplaysystem muss bereit sein.

lightdm erstellt eine xauthority-Datei und startet dann X und startet sie auf VT 7, dem virtuellen Terminal, das Sie erhalten, wenn Sie Alt+ Ctrl+ drücken F7. Wenn X gestartet wird, signalisiert Lightdm, dass das Plymouth-Startbildschirmprogramm beendet werden soll. Es ist wichtig, dass dies geschieht, nachdem alle tty (1-6) begonnen haben.

Seit Juli 2013 wurden Mir-Support-Elemente zu lightdm hinzugefügt, die jedoch ab 14.04 nicht mehr standardmäßig für Desktop-Systeme verwendet werden.

X versucht, die fortschrittlichsten Treiber zu verwenden. Es werden eigene Treiber von geladen /usr/lib/xorg/modules/. Beachten Sie, dass es für viele Geräte sowohl Kerneltreiber als auch xorg-Treiber gibt, wobei die xorg-Treiber mit ziemlicher Sicherheit die Kerneltreiber verwenden. dri und glx sind wichtige Funktionen, insbesondere für fortschrittliche Hochleistungsgrafiken. Protokolle werden für X in gespeichert /var/log/Xorg.0.log.

Über den System-D-Bus wird über diesen "Sitz" kommuniziert und mögliche Benutzernamen ermittelt. lightdm verwendet X, um den Bildschirm zu zeichnen. Unity-Greeter wird verwendet, um den Prozess zu unterstützen.

Wenn Sie die verschiedenen möglichen Benutzer-IDs auswählen, wird das Hintergrundbild dieser Benutzer-ID verwendet.

lightdm gibt die Namen potentieller Window-Manager / Systeme aus /usr/share/xsessions/*.desktop.

Kontoinformationen werden über den accountsservice accounts-daemon über dbus abgerufen.

lightdm und der Begrüßer verwenden PAM, um den Benutzer zu authentifizieren. Nach der Authentifizierung startet PAM einen Gnome-Keyring-Daemon-Daemon mit der Option --login und gibt das Kennwort des Benutzers ein, damit der Anmeldeschlüsselbund des Benutzers entsperrt werden kann, falls vorhanden. Weitere Informationen finden Sie unter https://live.gnome.org/GnomeKeyring/Pam und man 8 pam_unix. PAM speichert Protokollinformationen in /var/log/auth.logund wird von /etc/pam.conf(fast leeren) und gesteuert /etc/pam.d/*. Insbesondere siehe /etc/pam.d/lightdmund /etc/pam.d/lightdm-autologin.

Sobald der Benutzer authentifiziert ist, werden die Berechtigungen gelöscht und eine Datei zur ~user/.dmrcBeschreibung der Sitzung erstellt. Zum Beispiel:

[Desktop]
Session=ubuntu

oder

[Desktop]
Session=awesome

Die .desktopDateien von /usr/share/xsessions/*.desktopnun an bestimmen den Rest der Startreihenfolge.

Zum Beispiel ist hier der für Unity:

[Desktop Entry]
Name=Ubuntu
Comment=This session logs you into Ubuntu
Exec=gnome-session --session=ubuntu
TryExec=unity
Icon=
Type=Application
X-Ubuntu-Gettext-Domain=gnome-session-3.0

Das /usr/sbin/lightdm-sessionShell-Skript wird mit den Argumenten g nome-session --session=ubuntu (sic .-- 'ubuntu', nicht 'unity') ausgeführt.

lightdm-session


Protokolle:?
Fehlerprotokolle: ~/.xsession-errors
Gestartete Prozessprotokolle: ~/.cache/upstart/*
Quelle:/usr/sbin/lightdm-session


/usr/sbin/lightdm-session führt dann diese Schritte aus:

Läuft:

  • /etc/profile, $HOME/.profile
  • /etc/xprofile $HOME/.xprofile;
  • lädt Ressourcen von /etc/X11/Xresourcesund lädt $HOME/.Xresources, falls vorhanden, die Tastaturbelegung mit setxbmap unter Verwendung der Inhalte von /etc/X11/Xkbmapund $HOME/.Xkbmap;
  • Wenn Sie XKB nicht verwenden, wird xmodmap für alle vorhandenen /etc/X11/Xmodmapund verwendet$HOME/.Xmodmap
  • führt Skripte aus /etc/X11/xinit/xinitrc.d;
  • Führt die Xsession-Skripte /etc/X11/Xsession.d/*unter Verwendung der Optionen in aus /etc/X11/Xsession.options.

    Einer davon startet ssh-agent (redundant), ein anderer wird ausgeführt $HOME/.xsessionrc. Ein anderer startet den Session-Dbus (sowohl ssh-agent als auch session-Dbus wie in der obigen Xsession.optionsDatei erlaubt ). Dieser Session-Bus ist nützlich für die Kommunikation zwischen Prozessen in Bezug auf diese Einzelbenutzersitzung.

ssh-agent kann ssh-schlüssel für die sitzung behalten, wenn sie während der sitzung ssh-addiert werden, aber der gnome-keyring-daemon tut dasselbe.

/etc/X11/Xsession.d/50_check_unity_supportLäuft /usr/lib/nux/unity_support_testund wenn es fehlschlägt, exportiert es LIBGL_ALWAYS_SOFTWARE=1in die Umgebung, so dass llvmpipedie Software den Desktop rendert.

Ab Ubunu 13.10: Setzt /etc/X11/Xsession.d/00upstartdie Variable UPSTARTauf 1. /etc/X11/Xsession.d/99upstartÜberprüft diese Variable und ersetzt, falls gesetzt init --user , die anderen auf gesetzten Elemente $STARTUP. Daher startet der Benutzermodus-Upstart diese Upstart-Jobs in /usr/share/upstart/sessions. Eine davon ist gnome-session.confdie Gnome-Session.

Sofern dies noch nicht geschehen ist, startet lightdm-session schließlich einen Fenstermanager oder aus Gründen von Unity den gnome-session session manager.

Es scheint, dass lightdm-session die traditionelle Rolle von xsession einnimmt. Die Manpage finden Sie unter http://manpages.ubuntu.com/manpages/precise/man5/Xsession.5.html . lightdm betrachtet es als Session-Wrapper.

gnome-session session manager (Unity und Gnome Shells)


Manpage: http://manpages.ubuntu.com/manpages/precise/de/man1/gnome-session.1.html
Logs :?

Quelle: Manpage


gnome-session wird zum Beispiel für Unity verwendet, aber nicht für awesome. Siehe die obigen .desktop-Dateien.

gnome-session startet das angegebene Programm aus / usr / share / gnome-session / sessions / und startet Anwendungen aus ~ / .config / autostart / und / etc / xdg / autostart.

Hier ist ein Beispiel aus / etc / xdg / autostart:

$cat /etc/xdg/autostart/nm-applet.desktop
[Desktop Entry]
Name=Network
Comment=Manage your network connections
Icon=nm-device-wireless
Exec=nm-applet
Terminal=false
Type=Application
NoDisplay=true
NotShowIn=KDE;
X-GNOME-Bugzilla-Bugzilla=GNOME
X-GNOME-Bugzilla-Component=general
X-GNOME-Autostart-enabled=true
X-Ubuntu-Gettext-Domain=nm-applet

Eine andere, /etc/xdg/autostart/gnome-keyring-ssh.desktop, startet den gnome-keyring-daemon mit der Option --start, schließt den Start dieses Daemon-Prozesses ab und speichert wichtige Informationen darüber in der Umgebung, die möglicherweise von verwendet werden können ssh.

Aus einer ps aux-Liste geht hervor, dass gnome-session Window Manager mit dbus-launch startet.

Fenstermanager

Ehrfürchtiger Fenstermanager


Manpage: http://manpages.ubuntu.com/manpages/precise/en/man1/awesome.1.html
Logs:?

Quelle: Manpage, Prüfung der Konfigurationsdatei


Hier ist die Datei awesome.desktop in / usr / share / xsessions /, die von lightdm-session verwendet wird:

[Desktop Entry] 
Encoding=UTF-8
Name=awesome
Comment=Highly configurable framework window manager
TryExec=awesome
Exec=awesome

Wie Sie sehen, führt der Eintrag einfach dazu, dass der fantastische Fenstermanager ausgeführt wird. Es liest seine eigenen Konfigurationsdateien, einschließlich /etc/xdg/awesome/rc.lua aus dem fantastischen Paket. Es kann mit $ HOME / .config / awesome / rc.lua konfiguriert werden.

Einheit


Quelle: Prüfung der Konfigurationsdatei


Hier ist die Datei ubuntu.desktop in / usr / share / xsessions /:

[Desktop Entry]
Name=Ubuntu
Comment=This session logs you into Ubuntu
Exec=gnome-session --session=ubuntu
TryExec=unity
Icon=
Type=Application
X-Ubuntu-Gettext-Domain=gnome-session-3.0

Dies startet die in /usr/share/gnome-session/sessions/ubuntu.session beschriebene Gnome-Sitzung

Hier ist diese Datei:

[GNOME Session]
Name=Ubuntu
RequiredComponents=gnome-settings-daemon;
RequiredProviders=windowmanager;panel;
DefaultProvider-windowmanager=compiz
DefaultProvider-panel=compiz
IsRunnableHelper=/usr/lib/nux/unity_support_test
FallbackSession=ubuntu-2d
DesktopName=Unity

Das von gnome-session in 12.04 ausgeführte Programm IsRunnableHelper bestimmt, ob Unity ausgeführt werden kann oder ob Ubuntu-2d ausgeführt wird. Wenn es einen Fehler macht und sagt, dass die Einheit laufen kann und nicht, gibt es Ärger. Wählen Sie ubuntu-2d manuell in lightdm, wenn Ihnen das passiert. Während es einen Rückkehrcode zurückgibt, können wir sehen, was es tut, indem wir es mit der Option -p ausführen.

$ /usr/lib/nux/unity_support_test -p
OpenGL vendor string:   X.Org R300 Project
OpenGL renderer string: Gallium 0.4 on ATI RS690
OpenGL version string:  2.1 Mesa 8.0.2

Not software rendered:    yes
Not blacklisted:          yes
GLX fbconfig:             yes
GLX texture from pixmap:  yes
GL npot or rect textures: yes
GL vertex program:        yes
GL fragment program:      yes
GL vertex buffer object:  yes
GL framebuffer object:    yes
GL version is 1.4+:       yes

Unity 3D supported:       yes

Nicht unterstützte Hardware verwendet ab 12.10 llvmpipe-Software, um das zu rendern, was die Hardware nicht kann. Die Konfigurationsdatei ist einfacher als oben. Siehe oben, wie es aktiviert ist.

Aus den obigen Dateien geht hervor, dass gnome-session den Einstellungsdämon starten und compiz starten muss, um einen Fenstermanager und alle Bedienfelder auszuführen.

compiz


Manpage: http://manpages.ubuntu.com/manpages/precise/en/man1/compiz.1.html
Logs:?
Quelle: http://en.wikipedia.org/wiki/Compiz , Dateisystemprüfung


Sobald compiz gestartet ist, werden verschiedene Plugins ausgeführt. Vor 12.10 werden Gnome-Einstellungen verwendet, um diese zu definieren. Sie können mit ccsm (compiz config settings manager) oder mit gconf-editor geändert werden. Die Plugin-Einstellungen werden in apps / compiz-1 / general / screen0 / options unter active_plugins gespeichert. Durch Duplikate habe ich Fehler mit compiz gemacht. Diese werden im Home-Verzeichnis des Benutzers im Verzeichnis ~ / .gconf / gespeichert, das wie oben beschrieben organisiert ist. Die tatsächlichen Werte werden dort in% gconf.xml-Dateien gespeichert.

Seit 12.10 sind diese Plugins in Ihrer ~ / .config / dconf / user-Datei binär gespeichert. Die Methode dconf oder gsettings zum Speichern von Einstellungen ist neuer. Sie können all diese Einstellungen mit sehen dconf dump /org/gnome/.

Unityshell ist eines dieser Plugins. Es verwendet das nux-Projekt als eingebettetes Toolkit. Bilder werden auf Texturen im dreidimensionalen Raum mit festgelegten Transparenzwerten gezeichnet. Diese werden von compiz verarbeitet und entweder an llvm oder an erweiterte Grafiktreiber gesendet, damit die Grafikmodule auf der Computergrafikhardware des Systems zusammengesetzt und gerendert werden. Im Allgemeinen ist dies im Gegensatz zum Rendern von Bildern direkt in einem Framebuffer, wie es herkömmlicher gemacht wurde. Diese komplizierte Kette von Ereignissen erfordert fortgeschrittenere Treiber und erfordert manchmal die Verwendung proprietärer Grafiktreiber in Ubuntu.

John S Gruber
quelle
Wie kann ich feststellen, ob auf meinem System Awesome, Unity oder compiz ausgeführt wird?
James
@james Wahrscheinlich können Sie in der Prozessliste nach Compiz oder Awesome suchen. Das bekommst du mit einem Befehl wie ps aux. Sie können auch die Datei ~ / .dmrc auf den Session-Parameter überprüfen cat ~/.dmrc. Siehe oben. Die Session = Ubuntu bedeutet, Sie verwenden Compiz und Unity zusammen (und das ist die Standardeinstellung.
John S Gruber
Außergewöhnliche Antwort, die es ermöglicht, den Prozess ohne Vorkenntnisse zu verstehen! Nach Ihrer Beschreibung habe ich versucht, die xsessions/ubuntu.desktopin einer anderen Datei zu replizieren und hoffte , dass ich das gleiche Verhalten, jedoch ohne Erfolg, erhalte (weitere Details in dieser Frage ). Hat die Standard- ubuntu.desktopxsession etwas Besonderes ?
Anzeige N
In der Tat würde +10, wenn ich könnte. Besser als der Arzt ...
Ring Ø
Vielen Dank für das Aufschreiben. Können Sie aktualisieren, wie sich die Dinge für neuere Ubuntu-Versionen geändert haben?
Exic