56 votes

Que se passe-t-il sous la couverture pour me connecter et lancer Unity ou une autre interface utilisateur graphique ?

En cas de problème, il peut être utile de comprendre ce qui se passe sous la couverture pour inscrire un utilisateur dans une session d'interface graphique et faire en sorte qu'Unity (ou un autre gestionnaire de fenêtres) fasse apparaître un bureau.

87voto

John S Gruber Points 12997

Comment une session GUI d'un utilisateur de bureau démarre avec Ubuntu 12.04-14.04

Voici l'enchaînement des événements :

Le noyau Linux Ubuntu et upstart

Le noyau démarre le processus init en tant que processus numéro 1. C'est le upstart pour Ubuntu 12.04.

Les emplois d'avant-garde sont à la mode /etc/init/


Page homme : man init

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

Source : /etc/init/lightdm.conf


Le job upstart s'exécute /usr/sbin/lightdm . On peut probablement s'attendre à ce qu'elle soit convertie en une systemd unité de service au fil du temps.

Lightdm


Page homme : man lightdm Aussi : Ubuntu Wiki : LightDM

Les 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 : homme léger et /var/log/lightdm/lightdm.log


lightdm est lancé assez tard dans le processus d'init ; Par exemple, le système dbus doit être déjà lancé, 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 lance 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é, lightdm signale au programme de l'écran d'accueil de Plymouth de quitter. Il est essentiel que cela se produise après que tous les terminaux (1-6) aient démarré.

Depuis juillet 2013, des é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 à la fois des pilotes du noyau et des pilotes xorg pour de nombreux périphériques, les pilotes xorg utilisant presque certainement ceux du noyau. dri et glx sont des fonctionnalités importantes, en particulier pour les graphiques avancés à haute performance. Les journaux sont stockés pour X dans /var/log/Xorg.0.log .

Il y a une communication via le système dbus à propos de ce "siège" et les noms d'utilisateurs possibles sont acquis. lightdm utilise X pour dessiner l'écran. unity-greeter est utilisé pour assister le processus.

Lorsque vous sélectionnez les différents identifiants possibles, l'image de fond de l'identifiant est utilisée.

lightdm récupère les noms des gestionnaires de fenêtres/systèmes potentiels à partir de /usr/share/xsessions/*.desktop .

Les informations sur les comptes sont acquises via le accountsservice accounts-daemon over dbus.

lightdm et le greeter utilisent PAM pour authentifier l'utilisateur. Une fois authentifié, PAM lancera un démon gnome-keyring-daemon avec la commande --login et lui fournira 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 https://live.gnome.org/GnomeKeyring/Pam et man 8 pam_unix pour plus d'informations. PAM stocke les informations du 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 que l'utilisateur est authentifié, les privilèges sont abandonnés et un fichier est écrit dans le dossier de l'utilisateur. ~user/.dmrc décrivant la session. Par exemple :

[Desktop]
Session=ubuntu

o

[Desktop]
Session=awesome

En .desktop des fichiers de /usr/share/xsessions/*.desktop détermine 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

En /usr/sbin/lightdm-session Shell Shell est exécuté avec les arguments g nome-session --session=ubuntu (sic.-- "ubuntu", pas "unity")

lightdm-session


Journaux : ?
Journaux d'erreurs : ~/.xsession-errors
Démarrage des journaux de processus : ~/.cache/upstart/*
Source : /usr/sbin/lightdm-session


/usr/sbin/lightdm-session puis prend ces mesures :

Les courses :

  • /etc/profile, $HOME/.profile

  • /etc/xprofile $HOME/.xprofile ;

  • charge les ressources de /etc/X11/Xresources et $HOME/.Xresources s'ils existent, charge la carte du clavier avec setxbmap en utilisant le contenu du fichier /etc/X11/Xkbmap et $HOME/.Xkbmap ;

  • si on n'utilise pas XKB, on utilise xmodmap contre tout existant /etc/X11/Xmodmap et $HOME/.Xmodmap

  • exécute des scripts en /etc/X11/xinit/xinitrc.d ;

  • exécute les scripts de l'Xsession en /etc/X11/Xsession.d/* en utilisant les options de /etc/X11/Xsession.options .

    L'un d'entre eux lance 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 la commande ci-dessus). Xsession.options fichier). Ce bus de session est utile pour les communications entre les processus concernant cette session utilisateur unique.

ssh-agent peut conserver les clés ssh pour la session si elles sont ajoutées par ssh 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 à l'environnement afin que llvmpipe sera utilisé pour le rendu logiciel du bureau.

Démarrage avec Ubunu 13.10 : /etc/X11/Xsession.d/00upstart fixe la variable UPSTART a 1 . /etc/X11/Xsession.d/99upstart vérifie cette variable et, si elle est définie, la remplace par init --user aux autres éléments réglés sur $STARTUP . Ainsi, le mode utilisateur upstart démarre ces travaux upstart en /usr/share/upstart/sessions . L'un d'entre eux est gnome-session.conf qui démarre gnome-session.

À moins que cela n'ait déjà été fait, lightdm-session démarre un gestionnaire de fenêtre, ou pour l'unité, la commande ci-dessus démarre le gestionnaire de session gnome-session.

Il semble que lightdm-session reprenne le rôle traditionnel de xsession. Sa page de manuel se trouve à http://manpages.ubuntu.com/manpages/precise/man5/Xsession.5.html . lightdm le considère comme un enveloppeur de session.

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


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

Source : page de manuel


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

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

Voici un exemple tiré 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, /etc/xdg/autostart/gnome-keyring-ssh.desktop, lance gnome-keyring-daemon avec l'option --start, achevant le démarrage de ce processus démon et stockant des informations importantes à son sujet dans l'environnement pour une utilisation potentielle par ssh.

D'après une liste ps aux, il semble que gnome-session lance les gestionnaires de fenêtres avec dbus-launch.

Gestionnaires de fenêtres

Gestionnaire de fenêtres génial


Page homme : http://manpages.ubuntu.com/manpages/precise/en/man1/awesome.1.html
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 constater, l'entrée provoque simplement l'exécution du gestionnaire de fenêtres awesome. Il lit ses propres fichiers de configuration, y compris /etc/xdg/awesome/rc.lua du paquetage awesome. Il peut être configuré avec $HOME/.config/awesome/rc.lua.

Unité


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

Ceci 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 dans 12.04 détermine si unity peut être exécuté ou si ubuntu-2d le sera. S'il fait une erreur et dit qu'unity peut fonctionner alors qu'il ne le peut pas, il y a un problème. 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 la version 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 le précédent. Voir ci-dessus pour savoir comment l'activer.

Nous pouvons voir dans les fichiers ci-dessus que gnome-session doit démarrer le démon de configuration, et démarrer compiz dans le but d'exécuter un gestionnaire de fenêtre et tout panneau.

compiz


Page homme : http://manpages.ubuntu.com/manpages/precise/en/man1/compiz.1.html
Journaux : ?
Source : http://en.wikipedia.org/wiki/Compiz examen du système de fichiers


Une fois que compiz est lancé, il exécute divers plugins. Avant 12.10, gnome-settings est utilisé pour les définir. Ils peuvent être modifiés avec ccsm (compiz config settings manager) ou avec gconf-editor. Les paramètres des plugins sont stockés dans apps/compiz-1/general/screen0/options sous active_plugins. Les doublons m'ont causé des erreurs de segmentation avec compiz. Ils 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 la 12.10, ces plugins sont stockés en binaire dans votre fichier ~/.config/dconf/user. La méthode dconf, ou gsettings, pour stocker les 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 boîte à outils embarquée. Les images sont dessinées sur des textures dans un espace tridimensionnel avec des valeurs de transparence spécifiées. Elles sont traitées par compiz et envoyées soit à llvm soit à des pilotes graphiques avancés pour que les moteurs graphiques du matériel informatique du système les composent et les rendent. En général, cela s'oppose au rendu des images directement dans un framebuffer comme cela se faisait plus traditionnellement. Cette chaîne complexe d'événements est ce qui nécessite des pilotes plus avancés, et incite parfois à l'utilisation de pilotes graphiques propriétaires dans Ubuntu.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X