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


55

En cas de problème, il peut être utile de comprendre ce qui se passe sous la couverture pour engager un utilisateur dans une session avec une interface graphique et obtenir un Unity (ou un autre gestionnaire de fenêtres) pour afficher un bureau.

Réponses:


86

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

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

Le noyau Linux Ubuntu et sa mise à jour

Le noyau démarre le processus init en tant que processus numéro 1. Il s'agit d'une procédure récente pour Ubuntu 12.04.

Les nouveaux emplois sont en /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.

La source: /etc/init/lightdm.conf


Le travail mis à jour est exécuté /usr/sbin/lightdm. Nous pouvons probablement nous attendre à ce que cela soit converti en une systemdunité de service au fil du temps.

Lightdm


Page de manuel :,man lightdm Aussi: Ubuntu Wiki: 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: homme lightdm et/var/log/lightdm/lightdm.log


lightdm get a commencé assez tard dans le processus init; Par exemple, le système dbus 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 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 lancé, lightdm signale au programme d’écran de démarrage de Plymouth de quitter. Il est essentiel que cela se produise une fois que tous les terminaux (1-6) ont commencé.

Depuis juillet 2013, des éléments de support Mir ont été ajoutés à lightdm, mais ils ne sont plus utilisés par défaut pour les systèmes bureautiques à partir de 14.04.

X tente d'utiliser les pilotes les plus avancés possibles. Ses propres pilotes sont chargés depuis /usr/lib/xorg/modules/. Notez qu'il existe à la fois des pilotes de 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 caractéristiques importantes, en particulier pour les graphiques avancés haute performance. Les journaux sont stockés pour X dans /var/log/Xorg.0.log.

Il existe des communications via le système sur ce "siège" et des noms d’utilisateur possibles sont acquis. lightdm utilise X pour dessiner l'écran. Unity-greeter est utilisé pour aider au processus.

Lorsque vous sélectionnez les différents ID utilisateur possibles, l'image d'arrière-plan de cet ID utilisateur est utilisée.

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

Les informations de compte sont acquises via le service accountsservice accounts-daemon sur dbus.

lightdm et la bannière utilisent PAM pour authentifier l'utilisateur. Une fois authentifié, PAM lancera un démon gnome-keyring-daemon avec l'option --login et lui fournira le mot de passe de l'utilisateur afin qu'il puisse déverrouiller le fichier de clés de connexion de l'utilisateur, le cas échéant. Voir https://live.gnome.org/GnomeKeyring/Pam et man 8 pam_unix pour plus d'informations. PAM stocke les informations de journalisation /var/log/auth.loget est contrôlé par /etc/pam.conf(presque vide) et /etc/pam.d/*. En particulier, voir /etc/pam.d/lightdmet /etc/pam.d/lightdm-autologin.

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

[Desktop]
Session=ubuntu

ou

[Desktop]
Session=awesome

Les .desktopfichiers à partir de /usr/share/xsessions/*.desktopmaintenant déterminent le reste de la séquence de démarrage.

Par exemple, voici celui pour 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 /usr/sbin/lightdm-sessionscript shell est exécuté avec les arguments g nome-session --session=ubuntu (sic .-- 'ubuntu', pas 'unit')

session lightdm


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


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

Courses:

  • /etc/profile, $HOME/.profile
  • /etc/xprofile $HOME/.xprofile;
  • charge les ressources depuis /etc/X11/Xresourceset $HOME/.Xresources, si elles existent, charge la carte du clavier avec setxbmap en utilisant le contenu de /etc/X11/Xkbmapet $HOME/.Xkbmap;
  • si vous n'utilisez pas XKB, utilisez xmodmap par rapport à tout type existant /etc/X11/Xmodmapet existant .$HOME/.Xmodmap
  • exécute des 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.

    Un de ceux-ci démarre ssh-agent (redondant), un autre s'exécute $HOME/.xsessionrc. Un autre démarre session-dbus (ssh-agent et session-dbus sont autorisés dans le Xsession.optionsfichier ci-dessus ). Cette session dbus est utile pour les communications entre processus concernant cette session utilisateur unique.

ssh-agent peut conserver des clés ssh pour la session si elles sont ajoutées quelque temps au cours de la session, mais gnome-keyring-daemon fait la même chose.

/etc/X11/Xsession.d/50_check_unity_supports’exécute /usr/lib/nux/unity_support_testet s’il échoue, les exportations LIBGL_ALWAYS_SOFTWARE=1vers l’environnement llvmpipesont utilisées pour restituer le poste de travail par logiciel.

À partir de Ubunu 13.10: /etc/X11/Xsession.d/00upstartdéfinit la variable UPSTARTsur 1. /etc/X11/Xsession.d/99upstartvérifie cette variable et, si elle est définie, se substitue init --user aux autres éléments définis $STARTUP. Ainsi, le démarrage en mode utilisateur démarre les travaux qui démarrent dans /usr/share/upstart/sessions. Un de ceux-là est gnome-session.confqui commence la session de gnome.

Sauf si cela est déjà fait, finalement lightdm-session démarre un gestionnaire de fenêtres ou, pour l'unité, le programme ci-dessus lance le gestionnaire de session gnome-session.

Il semble que lightdm-session assume le rôle traditionnel de xsession. Sa page de manuel est disponible à l' adresse http://manpages.ubuntu.com/manpages/precise/man5/Xsession.5.html . lightdm considère qu'il s'agit d'une session-wrapper.

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


Manpage: http://manpages.ubuntu.com/manpages/precise/fr/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 démarre 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 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 fichier, /etc/xdg/autostart/gnome-keyring-ssh.desktop, lance gnome-keyring-daemon avec l’option --start, complétant ainsi le démarrage de ce processus démon et stockant des informations importantes à son sujet dans l’environnement en vue de leur utilisation potentielle par ssh.

Dans une liste ps aux, il apparaît que gnome-session démarre les gestionnaires de fenêtres avec dbus-launch.

Gestionnaires de fenêtres

Gestionnaire de fenêtre impressionnant


Page de manuel: http://manpages.ubuntu.com/manpages/precise/fr/man1/awesome.1.html
Logs:?

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 entraîne 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 à partir du paquet génial. 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 l'unité peut être exécutée ou si ubuntu-2d sera exécuté. S'il commet une erreur et dit que l'unité peut fonctionner et ne peut pas fonctionner, il y a un problème. Choisissez manuellement ubuntu-2d dans lightdm si cela vous arrive. Tandis qu'il renvoie un code 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 les versions 12.10 et ultérieures, le matériel non supporté utilise le logiciel llvmpipe pour restituer ce que le matériel ne peut pas. Son fichier de configuration est plus simple que celui ci-dessus. Voir ci-dessus pour savoir comment cela est activé.

Les fichiers ci-dessus indiquent que gnome-session doit démarrer le démon de paramétrage et démarrer compiz afin d'exécuter un gestionnaire de fenêtres et des panneaux.

compiz


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


Une fois compiz lancé, il exécute divers plugins. Avant 12.10, les paramètres de gnome sont utilisés pour les définir. Ils peuvent être changés avec ccsm (compiz config settings manager) ou avec gconf-editor. Les paramètres du plug-in sont stockés dans apps / compiz-1 / general / screen0 / options sous active_plugins. Les doublons m'ont fait avoir des segfaults avec compiz. Ceux-ci sont stockés dans le répertoire de base 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 de stockage des paramètres, dconf ou gsettings, 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 en tant que boîte à outils intégrée. 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 que les moteurs graphiques soient composés sur le matériel informatique graphique du système et soient restitués. En général, cela s’oppose au rendu d’images directement dans un framebuffer, comme cela se faisait de manière plus traditionnelle. Cette chaîne d'événements complexe est ce qui nécessite des pilotes plus avancés et invite parfois à l'utilisation de pilotes graphiques propriétaires dans Ubuntu.


Comment savoir si mon système exécute Awesome, Unity ou Compiz?
James

@ james Vous pouvez probablement vérifier la composition ou génial dans la liste de processus. Vous obtenez cela avec une commande telle que ps aux. Vous pouvez également consulter le fichier ~ / .dmrc pour le paramètre Session cat ~/.dmrc. Voir au dessus. Session = ubuntu signifie que vous utilisez simultanément compiz et unité (et c'est la valeur par défaut.)
John S Gruber

Réponse exceptionnelle, permettant de bien comprendre le processus sans connaissances préalables! Suite à votre description, j'ai essayé de reproduire le xsessions/ubuntu.desktopdans un autre fichier et j'espérais avoir le même comportement, mais sans succès (plus de détails dans cette question ). La ubuntu.desktopxsession par défaut a-t-elle quelque chose de spécial ?
Annonce n °

En effet, serait +10 si je pouvais. Mieux que le doc ...
Ring Ø

Merci d'avoir écrit ceci. Pouvez-vous mettre à jour sur la façon dont les choses ont changé pour les nouvelles versions d'Ubuntu?
exic
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.