Que se passe-t-il sous les couvertures pour me connecter et démarrer Unity ou une autre interface utilisateur graphique?

54

En cas de problème, il peut être utile de comprendre ce qui se passe sous les couvertures pour signer un utilisateur dans une session GUI et faire en sorte qu’un Unity (ou un autre gestionnaire de fenêtres) ouvre un bureau.

    
posée John S Gruber 13.06.2012 - 20:33
la source

1 réponse

84

Comment une session d’interface utilisateur graphique de bureau démarre avec Ubuntu 12.04-14.04

Voici la chaîne d’événements:

Le noyau et le démarrage d'Ubuntu Linux

Le noyau lance le processus d'initialisation en tant que processus numéro 1. C'est le cas pour Ubuntu 12.04.

Les travaux de démarrage sont dans /etc/init/

Page de manuel: man init

Journaux: journal du noyau ( dmesg ; copié dans /var/log/syslog ), /var/log/upstart/jobname.log , autres journaux déterminés par les travaux démarrés.

Source: /etc/init/lightdm.conf

Le travail upstart exécute /usr/sbin/lightdm . Nous pouvons probablement nous attendre à ce que cette unité soit convertie en une unité de service systemd au fil du temps.

Lightdm

Page de manuel: man lightdm , Aussi: Wiki Ubuntu: LightDM

Journaux:

/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

Source: man lightdm et /var/log/lightdm/lightdm.log

lightdm get est lancé assez tard dans le processus d'initialisation; Par exemple, le dbus système doit être déjà démarré, le système de fichiers doit être prêt et le système d’affichage graphique doit être prêt.

lightdm crée un fichier xauthority puis démarre X, en le démarrant sur VT 7, le terminal virtuel que vous obtenez si vous appuyez sur Alt + Ctrl + F7 . Lorsque X est démarré, les signaux lightdm du programme d'écran de démarrage de Plymouth doivent être fermés. Il est essentiel que cela se produise après le démarrage de tous les tty (1-6).

Depuis juillet 2013, les éléments de support Mir ont été ajoutés à lightdm, mais ceux-ci ne sont pas utilisés par défaut pour les systèmes de bureau à partir de 14.04.

X tente d'utiliser les pilotes les plus avancés possibles. Ses propres pilotes sont chargés à partir de /usr/lib/xorg/modules/ . Notez qu'il existe des pilotes de noyau et des pilotes xorg pour de nombreux périphériques, les pilotes xorg utilisant presque certainement les pilotes du noyau. dri et glx sont des caractéristiques importantes, en particulier pour les graphiques haute performance avancés. Les journaux sont stockés pour X dans /var/log/Xorg.0.log .

Il existe des communications sur le système dbus à propos de ce "siège" et d’éventuels noms d’utilisateur sont acquis. lightdm utilise X pour dessiner l'écran. L'unité-greeter est utilisée pour faciliter le processus.

Au fur et à mesure que vous sélectionnez les différents identifiants possibles de l’utilisateur, cette image backgound est utilisée.

lightdm obtient les noms des gestionnaires de fenêtres / systèmes potentiels de /usr/share/xsessions/*.desktop .

Les informations de compte sont acquises via le daemon accountservice accounts-via via dbus.

lightdm et le greeter utilisent PAM pour authentifier l'utilisateur. Une fois authentifié, PAM démarrera un démon gnome-keyring-daemon avec le --login option et lui donner le mot de passe de l'utilisateur afin qu'il puisse déverrouiller le trousseau de connexion de l'utilisateur, s'il est présent. Voir lien et man 8 pam_unix pour plus d'informations. PAM stocke les informations de journal dans /var/log/auth.log et est contrôlé par /etc/pam.conf (presque vide) et /etc/pam.d/* . En particulier, voir /etc/pam.d/lightdm et /etc/pam.d/lightdm-autologin .

Une fois l’utilisateur authentifié, les privilèges sont supprimés et un fichier est écrit dans ~user/.dmrc pour décrire la session. Par exemple:

[Desktop]
Session=ubuntu

ou

[Desktop]
Session=awesome

Les fichiers .desktop de /usr/share/xsessions/*.desktop déterminent maintenant le reste de la séquence de démarrage.

Par exemple, voici celui de 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

Le script /usr/sbin/lightdm-session shell est exécuté avec les arguments g nome-session --session=ubuntu (sic .-- "Ubuntu", pas "unité")

session lightdm

Logs:?
Journaux d'erreur: ~/.xsession-errors
Journaux de processus démarrés: ~/.cache/upstart/*
Source: /usr/sbin/lightdm-session

/usr/sbin/lightdm-session prend alors les mesures suivantes:

Exécute:

  • /etc/profile, $HOME/.profile
  • /etc/xprofile $HOME/.xprofile ;
  • charge les ressources de /etc/X11/Xresources et $HOME/.Xresources , si elles existent, charge la carte du clavier avec setxbmap en utilisant le contenu de /etc/X11/Xkbmap et $HOME/.Xkbmap ;
  • si vous n'utilisez pas XKB, xmodmap est utilisé contre tous les /etc/X11/Xmodmap et $HOME/.Xmodmap
  • existants
  • exécute les scripts dans /etc/X11/xinit/xinitrc.d ;
  • exécute les scripts Xsession dans /etc/X11/Xsession.d/* , en utilisant les options de /etc/X11/Xsession.options .

    L'un d'entre eux démarre ssh-agent (redondant), un autre exécute $HOME/.xsessionrc . Un autre démarre session-dbus (à la fois ssh-agent et session-dbus, comme autorisé dans le fichier Xsession.options ci-dessus). Cette session dbus est utile pour les communications entre processus concernant cette session mono-utilisateur.

ssh-agent peut contenir des clés ssh pour la session si elles sont ssh-add un peu au cours de la session, mais gnome-keyring-daemon fait la même chose.

/etc/X11/Xsession.d/50_check_unity_support exécute /usr/lib/nux/unity_support_test et s'il échoue, exporte LIBGL_ALWAYS_SOFTWARE=1 dans l'environnement afin que llvmpipe soit utilisé pour le rendu logiciel du bureau.

À partir d’Ubunu 13.10: /etc/X11/Xsession.d/00upstart définit la variable UPSTART à 1 . /etc/X11/Xsession.d/99upstart vérifie cette variable et si set substitute init --user aux autres éléments définis sur $STARTUP . Ainsi, le démarrage en mode utilisateur démarre ces travaux en% dans /usr/share/upstart/sessions . L'un d'entre eux est gnome-session.conf qui lance gnome-session.

Sauf si déjà fait, enfin lightdm-session lance un gestionnaire de fenêtres ou, pour des raisons d’unité, le gestionnaire de sessions gnome-session démarre.

Il semble que lightdm-session prenne le rôle traditionnel de xsession. Sa page de manuel est à lien . lightdm considère que c'est un wrapper de session.

gestionnaire de session gnome-session (Unity et Gnome Shells)

Manpage: lien
Journaux:?

Source: page de manuel

gnome-session est utilisé pour Unity, mais pas pour génial par défaut, par exemple. Voir les fichiers .desktop ci-dessus.

gnome-session lance le programme spécifié depuis / usr / share / gnome-session / sessions / et lance les applications depuis ~ / .config / autostart / et / etc / xdg / autostart.

Voici un exemple de / 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

Un autre programme, /etc/xdg/autostart/gnome-keyring-ssh.desktop, lance gnome-keyring-daemon avec l'option --start, termine le processus de ce démon et stocke des informations importantes dans l'environnement pour utilisation potentielle par ssh.

À partir d’une liste ps aux il apparaît que gnome-session lance les gestionnaires de fenêtres avec dbus-launch.

Gestionnaires de fenêtres

Awesome Window Manager

Page de manuel: lien
Journaux:?

Source: page de manuel, examen du fichier de configuration

Voici le fichier awesome.desktop dans / usr / share / xsessions / utilisé par lightdm-session:

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

Comme vous pouvez le voir, l'entrée provoque simplement l'exécution du gestionnaire de fenêtres génial. Il lit ses propres fichiers de configuration, y compris /etc/xdg/awesome/rc.lua du package génial. Il peut être configuré avec $ HOME / .config / awesome / rc.lua.

Unity

Source: examen du fichier de configuration

Voici le fichier ubuntu.desktop dans / 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

Cela démarre la session gnome décrite dans /usr/share/gnome-session/sessions/ubuntu.session

Voici ce fichier:

[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

Le programme IsRunnableHelper exécuté par gnome-session en 12.04 détermine si l'unité peut être exécutée ou si ubuntu-2d sera exécuté. Si elle commet une erreur et dit que l'unité peut fonctionner et qu'elle ne le peut pas, il y a des problèmes. Choisissez ubuntu-2d manuellement dans lightdm si cela vous arrive. Bien qu'il renvoie un code de retour, nous pouvons voir ce qu'il fait en l'exécutant avec l'option -p.

$ /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

Pour 12.10 et les versions ultérieures, le matériel non pris en charge utilise le logiciel llvmpipe pour rendre ce que le matériel ne peut pas faire. Son fichier de configuration est plus simple que ci-dessus. Voir ci-dessus pour savoir comment il est activé.

Nous pouvons voir dans les fichiers ci-dessus que gnome-session doit démarrer le démon des paramètres et démarrer compiz pour exécuter un gestionnaire de fenêtres et des panneaux.

compiz

Page de manuel: lien
Journaux:?
Source: lien , examen du système de fichiers

Une fois compiz démarré, il exécute plusieurs plugins. Avant 12.10, gnome-settings est utilisé pour définir ces paramètres. Ils peuvent être modifiés avec ccsm (gestionnaire de paramètres de configuration compiz) ou avec l'éditeur gconf. Les paramètres du plug-in sont stockés dans apps / compiz-1 / general / screen0 / options sous active_plugins. Les doublons m'ont amené à avoir des erreurs de segmentation avec compiz. Ceux-ci sont stockés dans le répertoire personnel de l'utilisateur dans le répertoire ~ / .gconf / organisé comme ci-dessus. Les valeurs réelles sont stockées dans les fichiers% gconf.xml.

Depuis 12.10, ces plugins sont stockés en binaire dans votre fichier ~ / .config / dconf / user. La méthode dconf ou gsettings de stockage des paramètres est plus récente. Vous pouvez voir tous ces paramètres avec dconf dump /org/gnome/ .

Unityshell est l'un de ces plugins. Il utilise le projet nux comme un toolkit intégré. Les images sont dessinées sur des textures dans un espace tridimensionnel avec des valeurs de transparence spécifiées. Celles-ci sont traitées par compiz et envoyées à llvm ou à des pilotes graphiques avancés pour afficher les moteurs graphiques du matériel graphique du système et les rendre. En règle générale, cela se compare à un rendu d'images directement sur un framebuffer, comme cela se faisait plus traditionnellement. Cette chaîne complexe d’événements nécessite des pilotes plus avancés et demande parfois l’utilisation de pilotes graphiques propriétaires dans Ubuntu.

    
réponse donnée John S Gruber 13.06.2012 - 20:33
la source

Lire d'autres questions sur les étiquettes