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.
quelle
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.
Hier ist die Kette von Ereignissen:
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 systemd
Laufe der Zeit in eine Serviceeinheit umgewandelt wird.
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.log
und wird von /etc/pam.conf
(fast leeren) und gesteuert /etc/pam.d/*
. Insbesondere siehe /etc/pam.d/lightdm
und /etc/pam.d/lightdm-autologin
.
Sobald der Benutzer authentifiziert ist, werden die Berechtigungen gelöscht und eine Datei zur ~user/.dmrc
Beschreibung der Sitzung erstellt. Zum Beispiel:
[Desktop]
Session=ubuntu
oder
[Desktop]
Session=awesome
Die .desktop
Dateien von /usr/share/xsessions/*.desktop
nun 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-session
Shell-Skript wird mit den Argumenten g nome-session --session=ubuntu
(sic .-- 'ubuntu', nicht 'unity') ausgeführt.
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
; /etc/X11/Xresources
und lädt $HOME/.Xresources
, falls vorhanden, die Tastaturbelegung mit setxbmap unter Verwendung der Inhalte von
/etc/X11/Xkbmap
und $HOME/.Xkbmap
; /etc/X11/Xmodmap
und verwendet$HOME/.Xmodmap
/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.options
Datei 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_support
Läuft /usr/lib/nux/unity_support_test
und wenn es fehlschlägt, exportiert es LIBGL_ALWAYS_SOFTWARE=1
in die Umgebung, so dass llvmpipe
die Software den Desktop rendert.
Ab Ubunu 13.10: Setzt
/etc/X11/Xsession.d/00upstart
die Variable UPSTART
auf 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.conf
die 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.
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.
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.
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.
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.
ps aux
. Sie können auch die Datei ~ / .dmrc auf den Session-Parameter überprüfencat ~/.dmrc
. Siehe oben. Die Session = Ubuntu bedeutet, Sie verwenden Compiz und Unity zusammen (und das ist die Standardeinstellung.xsessions/ubuntu.desktop
in 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.desktop
xsession etwas Besonderes ?