Païou : Mandriva Linux depuis 2002. Aujourd'hui, c'est Mageia Linux
On se lasse de tout, sauf de comprendre.
Attribué à Virgile.
01 octobre 2011 : Ébauche de cette page.
11 septembre 2012 : actualisation avec cauldron (mageia 3)
20 novembre 2013 : refonte et actualisation avec mageia 4
29 mars 2018 : actualisation avec mageia 6
Pour : linuxien averti.
La page : Démarrage de l'ordinateur a présenté la partie commune à tous les systèmes d'exploitation.
Dans la présente page, vous trouverez la suite, c'est-à-dire le démarrage de Linux.
System V (cinq) a longtemps été le système de démarrage de Linux, donc de Mandriva et également de Mageia 1.
Mageia 2 et les suivants utilisent maintenant systemd pour démarrer le système linux.
Vous avez vu, sur la page précédente, que la noyau linux a pris la relève du BIOS ou de UEFI, grâce au chargeur de démarrage (GRUB2 par exemple).
Le noyau initialise différents composants matériels (processeur, périphériques, carte graphique ...)
Le noyau lance /usr/sbin/init qui est un lien vers /usr/lib/systemd/systemd
Pour des raisons de compatibilité, il existe également un fichier /usr/bin/systemd et qui pointe également vers /usr/lib/systemd/systemd.
Le noyau exécute donc le processus numéro 1, /usr/lib/systemd/systemd. Son fichier de configuration est : /etc/systemd/system.conf. Ce dernier permet de modifier le système de journalisation (logs) ainsi que quelques autres paramètres, surtout intéressants pour le débogage.
Le mode de démarrage de l'ordinateur (anciennement appelé le runlevel) est donné par le fichier /etc/systemd/system/default.target.
C'est un lien symbolique vers l'un des fichiers correspondant aux anciens runlevel, situés dans le répertoire /usr/lib/systemd/system/ :
Avant de poursuivre dans le processus de démarrage, il faut comprendre le système des unités de systemd.
Systemd fait appel à la notion d'Unités. Une unité représente un fichier de configuration. Entre autres, une unité peut être :
Ces fichiers et répertoires se trouvent dans le répertoire /etc/systemd/system, pour ceux qui sont paramétrables par l'administrateur système, et dans le répertoire /usr/lib/systemd/system pour les autres.
Les unités .service permettent notamment de lancer une commande par une ligne ExecStart=
La syntaxe est inspirée des fichiers .desktop, avec des groupes fonctionnels [Unit], [Service] et [Install]
[Unit]
Description=Simple Desktop Display Manager
Documentation=man:sddm(1) man:sddm.conf(5))
Conflicts=getty@tty1.service
After=systemd-user-sessions.service getty@tty1.service plymouth-quit.service
[Service]
ExecStart=/usr/sbin/sddm
Restart=Always
[Install]
Alias=display-manager.service
Conflicts= l'unité ne doit pas être démarrée si une ou plusieurs autres sont encore en cours d'exécution.
Requires= le fonctionnement de cette unité dépend d'une ou de plusieurs autres unités qui doivent également démarrer. Requires ne détermine pas l'ordre dans lequel les unités doivent être démarrées ou arrêtées. Elles peuvent démarrer simultanément.
Si le démarrage d'une ou de plusieurs autres unités demandées échoue, cette unité sera désactivée.
Wants= comme Requires, mais ici le fonctionnement d'une autre unité est optionnel.
Before, After= configure l'ordre dans lequel les unités doivent être démarrées.
Si une unité foo.service contient un argument Before=bar.service et si les deux unités sont demandées, le démarrage de bar.service est retardé jusqu'à ce que foo.service est mis en marche.
ExecStart= commande à exécuter pour démarrer
ExecStop= commande à exécuter pour arrêter
Restart= précise comment un service peut être redémarré
BusName il s’agit d’un service D-Bus
Alias la présente unité peut également être installée en invoquant le nom de l'unité alias
Il vient en complément d'un fichier .service et comprend les groupes fonctionnels [Unit], [Socket] et [Install]
[Unit]
Description=Journal Socket
Documentation=man:systemd-journald.service(8) man:journald.conf(5)
DefaultDependencies=no
Before=sockets.target
IgnoreOnIsolate=yes
[Socket]
ListenStream=/run/systemd/journal/stdout
ListenDatagram=/run/systemd/journal/socket
SocketMode=0666
PassCredentials=yes
PassSecurity=yes
ReceiveBuffer=8M
Service=systemd-journald.service
Une cible (target) est un groupe fonctionnel d'unités. Elle est définie par un fichier .target.
Les fichiers des unités .target ne renseignent pas directement sur les commandes à exécuter. C'est un répertoire .target.wants qui donnent des liens vers des fichiers .service ou vers d'autres fichiers .target.
Dans la pratique, il peut y avoir deux répertoires .target.wants, l'un dans /etc/systemd/system, l'autre dans /usr/lib/systemd/system.
[Unit]
Description=Graphical Interface
Documentation=man:systemd.special(7)
Requires=multi-user.target
Wants=display-manager.service
Conflicts=rescue.service rescue.target
After=multi-user.target rescue.service rescue.target display-manager.service
AllowIsolate=yest
Requires= le fonctionnement de cette unité dépend d'une autre unité qui doit également être démarrée.
Conflicts= cette unité ne doit pas être démarrée si une ou plusieurs autres unités sont en cours d'exécution.
After= cette unité doit être démarrée après une ou plusieurs autres. À la différence de Requires=, After= n'implique pas que ces unités doivent encore tourner.
AllowIsolate= cette unité peut éventuellement être lancée manuellement avec une commande :
systemctl isolate graphical.target
Compte tenu du grand nombre d'unités, il serait fastidieux d'analyser tous les fichiers de définition. Voici quelques exemples.
La première unité que nous rencontrons est default.target
Afin de simplifier les écritures, les conventions suivantes s'appliquent :
Elle est définie par un fichier /etc/systemd/system/default.target
C'est un lien qui renvoie à → (usr)/runlevelx.target
x=3 si vous démarrez en mode texte, sinon x=5, ce qui est généralement le cas.
L'unité default.target renvoie vers l'unité qui doit effectivement être démarrée, en l’occurrence runlevel5.target en mode graphique.
Cette unité est définie par un fichier (usr)/runlevel3.target et un répertoire (usr)/runlevel3.target.wants.
C'est un lien qui renvoie à → (usr)/multi-user.target
Il est actuellement vide
Dans le mode console (runlevel3), runlevel3.target renvoie vers l'unité multi-user.target
Cette unité est définie par un fichier (usr)/runlevel5.target et un répertoire (usr)/runlevel5.target.wants.
C'est un lien qui renvoie à → (usr)/graphical.target
Il est actuellement vide
Dans le mode graphique (runlevel5), runlevel5.target renvoie vers l'unité graphical.target
Cette unité est définie par un fichier (usr)/multi-user.target, un répertoire (etc)/multi-user.target.wants et un autre répertoire (usr)/multi-user.target.wants.
L'unité multi-user.target
Ce répertoire contient plusieurs liens symboliques : acpid.service, cpupower.service, crond.service, shorewall.service, shorewall6.service, pointant tous vers des fichiers du même nom dans le répertoire → (usr)/. D'autre liens peuvent encore exister en fonction des applications installées.
Ce répertoire contient également plusieurs liens symboliques : dbus.service, getty.target, plymouth-quit-wait.service, plymouth-quit.service, rpcbind.target, systemd-ask-password-wall.path, systemd-logind.service, systemd-update-utmp-runlevel.service, systemd-user-sessions.service, pointant tous vers des fichiers du même nom dans le répertoire → (usr)/
Le fichier multi-user.target nous dit que l'unité basic.target est nécessaire et qu'elle doit déjà être en cours d'exécution. Les répertoires (etc)/multi-user.target.wants et (usr)/multi-user.target.wants nous disent que plusieurs autres unités sont nécessaires (souvent des services). Cela dépend des applications et surtout des serveurs qui sont installés.
Elle est définie par un fichier (usr)/graphical.target, un répertoire (etc)/graphical.target.wants et un autre répertoire (usr)/graphical.target.wants
L'unité graphical.target
Ce répertoire contient plusieurs liens symboliques : rtkit-daemon.service, upower.service, pointant tous vers des fichiers du même nom dans le répertoire → (usr)/. D'autre liens peuvent encore exister en fonction des applications installées.
Ce répertoire contient également un lien symbolique : systemd-update-utmp-runlevel.service, pointant vers le fichier du même nom dans le répertoire → (usr)/
Le fichier (usr)/graphical.target nous dit que l'unité (usr)/multi-user.target est nécessaire et qu'elle doit déjà être en cours d'exécution, que, si possible, le service (usr)/display-manager doit tourner, mais que (usr)/rescue.target ne doit pas être démarré.
Cette unité est définie par un fichier (usr)/basic.target et deux répertoires (etc)/basic.target.wants et (usr)/basic.target.wants.
L'unité basic.target
Ce répertoire contient plusieurs liens symboliques vers les fichiers éponymes de (usr)/ : dnf-makecache.timer, ip6tables.service, iptables.service, shorewall.service, shorewal5.service
Ce répertoire contient également des liens symboliques vers les fichiers éponymes de (usr)/ : alsa-restaure.service, alsa-state.service, fedora-auto-relabel-mark.service, fedora-auto-relabel.service, fedora-loadmodules.service, mandriva-everytime.service, mandriva-save-dmesg.service
Le fichier basic.target nous dit que l'unité sysinit.target est nécessaire, que les unités sockets.target, timers.target, paths.target et slices.target sont souhaitées et qu'elles doivent toutes déjà être activées.
Les deux répertoires basic.target.wants nous disent que plusieurs autres services sont nécessaires.
Les unités du type .service ne nécessitent qu'un seul fichier de configuration. Le fichier (usr)/display-manager.service pointe vers le fichier → (usr)/prefdm.service.
L'unité prefdm.service
Afin de suivre le déroulement du processus de démarrage, quelques commandes sont utiles.
Pour des informations plus complètes, voyez la page : Archlinux
Elle permet de lister toutes les unités présentes sur le systèmes sans renseigner sur la chronologie.
Les commandes suivantes peuvent être exécutées :
systemctl list-units : liste les unités actives
systemctl list-units -a (ou --all) : liste toutes les unités pouvant être démarrées, actives ou non
systemctl list-units -t service (ou --type=service) : liste tous les services actifs
UNIT LOAD ACTIVE SUB DESCRIPTION
sys-devices-pnp0-00:09-tty-ttyS0.device loaded active plugged /sys/devices/pnp0/00:09/tty/ttyS0
-.mount loaded active mounted /
systemd-ask-password-plymouth.path loaded active waiting Forward Password Requests to Plymouth Directory Watch
prefdm.service loaded active running Display Manager
basic.target loaded active active Basic System
systemd-journald.socket loaded active running Journal Socket
Avec la signification des 5 colonnes :
systemctl show multi-user.target : pour voir toutes les caractéristiques d'une unité.
systemctl show -p "Wants" multi-user.target : pour voir quels services sont démarrés par une cible donnée (par ex. multi-user.target).
À la place de Wants, vous pouvez également demander "WantedBy", "Requires", "RequiredBy", "Conflicts", "ConflictedBy", "Before", "After".
Sous UNIX, un processus peut créer un fork (le programme relance une nouvelle instance, en tâche de fond). Il sort alors complètement de la supervision du processus qui l’a lancé. Prenons, par exemple, un script CGI lancé par un serveur Web. Lorsqu’il crée un fork, il devient orphelin et est rattaché au processus de PID 1. L’arrêt du serveur Web ne le concerne pas, et aucun script système n’est en mesure de le retrouver automatiquement pour le couper.
Le noyau Linux implémente un mécanisme appelé cgroups (control groups) qui permet de créer un groupe et d’y placer des processus. Tout processus créé au sein d’un cgroup y reste, résolvant ainsi notre problème de CGI fou.
La commande systemd-cgls permet d'afficher, de manière récursive, le contenu des groupes de contrôle (cgroup).
Control group /:
-.slice
┣ user.slice
┃ ┗ user-1000.slice
┃ ┣ user@1000.service
┃ ┃ ┣ gpg-agent.service
┃ ┃ ┃ ┗ 1829 /usr/bin/gpg-agent --daemon
┃ ┃ ┗ init.scope
┃ ┃ ┗ 1822 /usr/lib/systemd/systemd --user
┃ ┃ ┗ 1825 (sd-pam)
┃ ┗ session-c1.scope
┃ ┣ 1414 /usr/bin/xdm -nodaemon
┃ ┣ 1831 icewm-session
┃ ┣ 1880 /usr/bin/dbus-launch --exit-with-session --sh-syntax
┃ ┣ 1881 /usr/bin/dbus-daemon --fork --print-pid 5 --print-address 7 --se...
┃ ┣ 1900 /usr/libexec/polkit-mate-authentication-agent-1
┃ ┣ 1907 icewmbg
┃ ┣ 1908 icewm --notify
┃ ┣ 1912 /usr/libexec/at-spi-bus-launcher
┃ ┣ 1916 /usr/bin/dbus-daemon --config-file=/usr/share/defaults/at-spi2/a...
┃ ┣ 1919 /usr/libexec/at-spi2-registryd --use-gnome-session
┃ ┗ 1929 icewmtray --notify
┣ init.scope
┃ ┗ 1 /sbin/init
┗ system.slice
┣ irqbalance.service
┃ ┗ 660 /usr/sbin/irqbalance --foreground
┣ alsa-state.service
┃ ┗ 644 /usr/sbin/alsactl -s -n 19 -c rdaemon
┣ mandi.service
┃ ┗ 1811 /usr/sbin/mandi -d
┣ dbus.service
┃ ┗ 664 /usr/bin/dbus-daemon --system --address=systemd: --nofork --nopidfi...
┣ powernowd.service
┃ ┗ 708 /usr/sbin/powernowd
┣ prefdm.service
┃ ┣ 1238 /usr/bin/xdm -nodaemon
┃ ┗ 1277 /usr/libexec/Xorg -deferglyphs 16 -auth /var/lib/xdm/authdir/authf...
┣ network.service
┃ ┣ 954 /sbin/ifplugd -I -b -i enp3s0
┃ ┗ 1149 dhclient -1 -q -lf /var/lib/dhclient/dhclient--enp3s0.lease -pf /v...
┣ gpm.service
┃ ┗ 652 /usr/sbin/gpm -m /dev/input/mice -t exps2
┣ systemd-logind.service
┃ ┗ 636 /usr/lib/systemd/systemd-logind
┣ systemd-resolved.service
┃ ┗ 1218 /usr/lib/systemd/systemd-resolved
┣ crond.service
┃ ┗ 1230 /usr/sbin/crond -n
┣ polkit.service
┃ ┗ 1923 /usr/lib/polkit-1/polkitd --no-debug
┣ systemd-udevd.service
┃ ┗ 496 /usr/lib/systemd/systemd-udevd
┣ acpid.service
┃ ┗ 668 /usr/sbin/acpid
┣ systemd-journald.service
┃ ┗ 450 /usr/lib/systemd/systemd-journald
┣ systemd-networkd.service
┃ ┗ 699 /usr/lib/systemd/systemd-networkd
┗ chronyd.service
┗ 651 /usr/sbin/chronyd
Cette commande liste les processus actifs et présente le résultat selon la syntaxe donnée par l'option -eo
USER PID CGROUP COMMAND
root 2 - [kthreadd]
root 3 - \_ [kworker/0:0]
...
root 1 8:devices:/init.scope,1:nam /sbin/init
root 451 8:devices:/system.slice/sys /usr/lib/systemd/systemd-journald
root 495 8:devices:/system.slice/sys /usr/lib/systemd/systemd-udevd
root 635 8:devices:/system.slice/sys /usr/lib/systemd/systemd-logind
...
root 1435 8:devices:/user.slice,1:nam /usr/bin/xdm -nodaemon
paiiou 1848 8:devices:/user.slice,1:nam \_ icewm-session
paiiou 1924 8:devices:/user.slice,1:nam \_ icewmbg
paiiou 1925 8:devices:/user.slice,1:nam \_ icewm --notify
paiiou 1946 8:devices:/user.slice,1:nam \_ icewmtray --notify
...
Cet outil permet d'analyser le démarrage :
Startup finished in 6.616 (kernel) + 28.168 (userspace) = 34.785
9.122s shorewall.service
8.956s systemd-udev-settle.service
7.481s dev-sda1.devicee
...
14ms systemd-update-utmp-runlevel.service
8ms fedora-wait-storage.service
5ms tmp.mount
Plusieurs services sont lancés avant qu'un utilisateur ne puisse se connecter.
Il s'agit de tout le matériel assigné à une place de travail donnée. Il y a au moins un moniteur, un clavier et habituellement une souris. Il peut également inclure une caméra vidéo, une carte son ...
Ils sont identifiés par leur nom qui commence par seat suivi par au moins un caractère (Ex. seat0).
Dans un système classique, il n'y a qu'un seul siège. Mais un ordinateur peut en avoir plusieurs, permettant à plusieurs personnes de l'utiliser simultanément. Les sièges sont indépendants les uns des autres (affichage différent, éventuellement matériel différent ...). Tout matériel peut être attaché à un siège, mais alors à un seul siège à la fois L'interface réseau restera normalement non attachée afin de servir à tous les utilisateurs..
Elle est déterminée par le moment où un utilisateur se connecte jusqu'au moment où il se déconnecte. Plusieurs sessions peuvent être attachées à un même siège, mais une seule peut être active.
Elle est constituée d'un groupe de process tournant sous le contrôle d'un seul utilisateur. La session peut démarrer et arrêter des process, mais ne peut pas s'échapper de la session.
Uniquement les démons du système (qui ne sont donc pas attachés à une session) peuvent engendrer de nouvelles sessions.
Habituellement une session comprend plusieurs démons procurant des services pour la session (le serveur-X procure des accès graphiques vers d'autres process de session, pulseaudio procure les accès audio ...)
Quand une session est engendrée, le premier processus (processus central) contrôle la session. Il l'initialise, engendre d'autres processus.
Pendant le démarrage, systemd démarre plusieurs démons pour gérer le système. Tous ces démons sont globaux et ne sont pas attachés à un siège ou à une session.
Après son démarrage, systemd met en place les cgroups (control groups) et il les monte dans /sys/fs/cgroup/.
Systemd recherche ensuite les unités à prendre en compte, dans /etc/systemd/system et dans /usr/lib/systemd/system. Une fois que la liste des unités est connue,
systemd active l'unité default.target qui renvoie vers multi-user.target (en mode texte) ou graphical.target (en mode graphique).
À partir de là, le contenu change en fonction du mode de démarrage, mais la démarche reste la même.
Parmi ces démons se trouve systemd-login, responsable de la gestion des sessions et des sièges.
Avec systemd-cgls nous trouvons d'abord la tranche système system.slice qui regroupe les services relatifs au système, donc globaux (pour mémoire, il s'agit ici d'une installation minimale, sans le serveur-X) :
Control group /:
-.slice
┣ init.scope
┃ ┗ 1 /sbin/init
┗ system.slice
┣ irqbalance.service
┃ ┗ 660 /usr/sbin/irqbalance --foreground
┣ alsa-state.service
┃ ┗ 644 /usr/sbin/alsactl -s -n 19 -c rdaemon
┣ mandi.service
┃ ┗ 1811 /usr/sbin/mandi -d
┣ dbus.service
┃ ┗ 664 /usr/bin/dbus-daemon --system --address=systemd: --nofork --nopidfi...
┣ powernowd.service
┃ ┗ 708 /usr/sbin/powernowd
┣ prefdm.service
┃ ┣ 1238 /usr/bin/xdm -nodaemon
┃ ┗ 1277 /usr/libexec/Xorg -deferglyphs 16 -auth /var/lib/xdm/authdir/authf...
┣ network.service
┃ ┣ 954 /sbin/ifplugd -I -b -i enp3s0
┃ ┗ 1149 dhclient -1 -q -lf /var/lib/dhclient/dhclient--enp3s0.lease -pf /v...
┣ gpm.service
┃ ┗ 652 /usr/sbin/gpm -m /dev/input/mice -t exps2
┣ systemd-logind.service
┃ ┗ 636 /usr/lib/systemd/systemd-logind
┣ systemd-resolved.service
┃ ┗ 1218 /usr/lib/systemd/systemd-resolved
┣ crond.service
┃ ┗ 1230 /usr/sbin/crond -n
┣ polkit.service
┃ ┗ 1923 /usr/lib/polkit-1/polkitd --no-debug
┣ systemd-udevd.service
┃ ┗ 496 /usr/lib/systemd/systemd-udevd
┣ acpid.service
┃ ┗ 668 /usr/sbin/acpid
┣ systemd-journald.service
┃ ┗ 450 /usr/lib/systemd/systemd-journald
┣ systemd-networkd.service
┃ ┗ 699 /usr/lib/systemd/systemd-networkd
┗ chronyd.service
┗ 651 /usr/sbin/chronyd
Pour le démarrage en mode graphique, il y a des groupes supplémentaires :
┣ prefdm.service
┃ ┣ 1238 /usr/bin/xdm -nodaemon
┃ ┗ 1277 /usr/libexec/Xorg -deferglyphs 16 -auth /var/lib/xdm/authdir/authf...
Prefdm.service recherche quel est le gestionnaire de connexion qu'il faut utiliser. Ici c'est xdm. Il lance également le serveur X
Dans les groupes de contrôle il y a l'unité systemd-logind.service qui est un service permettant de gérer les sessions utilisateur.
L'extrait de systemd-cgls montre le groupe de process (la tranche) user.slice, le sous-groupe user-1000.slice avec l'unité user@1000.service. Elle lance le service gpg-agent avec le process /usr/bin/gpg-agent --daemo et elle lance également le scope init avec les process //usr/lib/systemd/systemd --user et (sd-pam):
Control group /:
-.slice
┣ user.slice
┃ ┗ user-1000.slice
┃ ┣ user@1000.service
┃ ┃ ┣ gpg-agent.service
┃ ┃ ┃ ┗ 1829 /usr/bin/gpg-agent --daemon
┃ ┃ ┗ init.scope
┃ ┃ ┗ 1822 /usr/lib/systemd/systemd --user
┃ ┃ ┗ 1825 (sd-pam)
Comme vu ci-dessus, nous trouvons les tranches utilisateur user.slice et user-1000.slice.
Cette dernière contient :
pam-systemd enregistre les sessions utilisateur à l'aide du gestionnaire systemd-login.service. Un nouveau scope est créé pour la session et ce scope est placé dans le sous-groupe de l'utilisateur. Extrait de systemd-cgls :
┗user.slice
┗user-1000.slice
┗session-c1.scope
Le groupe scope contient tous les process lancés par l'utilisateur.
L'utilisateur démarre en mode texte et lance la commande systemd-cgls. Un extrait donne :
┗user.slice
┗user-1000.slice
┗session-c1.scope
┣ 1887 login -- paiiou
┣ 1911 -bash
┗ 1952 systemd-cgls
Le fonctionnement du lancement de startx est décit ici : .
Aucun gestionnaire de connexion n'est requis.
Dans l'exemple ci-dessous, l'utilisateur paiiou se connecte en mode texte et lance la commande startx, puis la commande systemd-cgls dans un terminal xterm de IceWM :
┗user.slice
┗user-1000.slice
┗session-c1.scope
┣ 1885 login -- paiiou
┣ 1910 -bash
┣ 194 /bin/sh /usr/bin/startx
┣ 1964 xinit /etc/X11/xinit/xinitrc -- vt1 -keeptty -auth /home/paiiou...
┣ 1965 /usr/libexec/Xorg :0 vt1 -keeptty -auth /home/paiiou/.serveraut...
┣ 1970 icewm-session
┣ 1997 /usr/bin/dbus-launch --exit-with-session --sh-syntax
┣ 1998 /usr/bin/dbus-daemon --fork --print-pid 5 --print-address 7 --se...
┣ 2018 /usr/libexec/polkit-mate-authentication-agent-1
┣ 2020 icewmbg
┣ 2026 icewm --notify
┣ 2030 /usr/libexec/at-spi-bus-launcher
┣ 2034 /usr/bin/dbus-daemon --config-file=/usr/share/defaults/at-spi2/a...
┣ 2037 /usr/libexec/at-spi2-registryd --use-gnome-session
┣ 2047 icewmtray --notify
┣ 2049 /usr/bin/xterm
┣ 2078 -bash
┗ 2106 systemd-cgls
Si l'utilisateur a décidé de démarrer en mode graphique avec xdm et IceWM, dmesg nous informe que :
Avec systemd-cgls, nous avons vu ci-dessus, dans la partie Avant une session utilisateur que nous trouvons d'abord la tranche système system.slice qui, comme pour le démarrage en mode texte, regroupe les mêmes services relatifs au système avec, en plus, une unité prefdm.service.
Il faut donc s'attendre à voir beaucoup de points communs avec le démarrage en mode texte : multi-user.target et toutes ses dépendances.
Avec, bien sûr, des éléments supplémentaires, dont le job prefdm.service/start qui recherche un écran graphique de connexion.
prefdm.service lance la commande /etc/X11/prefdm -nodaemon
Déroulement de prefdm :
Comme en mode texte, nous trouvons ensuite les tranches utilisateur user.slice et user-1000.slice.
Cette dernière contient :
Voici le contenu de session-c1.scope :
Control group /:
-.slice
┣ user.slice
┃ ┗ user-1000.slice
┃ ┣ user@1000.service
┃ ┃ ┣ gpg-agent.service
┃ ┃ ┃ ┗ 1829 /usr/bin/gpg-agent --daemon
┃ ┃ ┗ init.scope
┃ ┃ ┗ 1822 /usr/lib/systemd/systemd --user
┃ ┃ ┗ 1825 (sd-pam)
┃ ┗ session-c1.scope
┃ ┣ 1414 /usr/bin/xdm -nodaemon
┃ ┣ 1831 icewm-session
┃ ┣ 1880 /usr/bin/dbus-launch --exit-with-session --sh-syntax
┃ ┣ 1881 /usr/bin/dbus-daemon --fork --print-pid 5 --print-address 7 --se...
┃ ┣ 1900 /usr/libexec/polkit-mate-authentication-agent-1
┃ ┣ 1907 icewmbg
┃ ┣ 1908 icewm --notify
┃ ┣ 1912 /usr/libexec/at-spi-bus-launcher
┃ ┣ 1916 /usr/bin/dbus-daemon --config-file=/usr/share/defaults/at-spi2/a...
┃ ┣ 1919 /usr/libexec/at-spi2-registryd --use-gnome-session
┃ ┗ 1929 icewmtray --notify
Mis à part la partie concernant la connexion de l'utilisateur, l'ouverture de la session IceWM en mode graphique est comparable à celle de la connexion en mode texte suivie de la commande startx.
Mais avant de démarrer la session l'unité prefdm avait recherché le gestionnaire de connexion à utiliser, comme indiqué plus haut, lookupdm a vérifié si le gestionnaire existe et en a extrait la commande /usr/bin/xdm ou /usr/bin/sddm, avec un argument -nodaemon.
Cette page étant déjà suffisamment longue, vous trouverez le gestionnaire XDM .
Cette page étant déjà suffisamment longue, vous trouverez le gestionnaire SDDM .