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.
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.
Voici la chaîne d’événements:
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.
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é")
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
; /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
; /etc/X11/Xmodmap
et $HOME/.Xmodmap
/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.
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.
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.
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.
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.
Lire d'autres questions sur les étiquettes unity lightdm gnome-session