EEIJ

Païou : Mandriva Linux depuis 2002. Aujourd'hui, c'est Mageia Linux


Sommaire


Conforme à XHTML 1.0 Strict Conforme à CSS!

On se lasse de tout, sauf de comprendre.
Attribué à Virgile.

Démarrage graphique avec startx, sous Linux Mageia

Historique

6 juin 2011 : Création de cette page.
2 août 2011 : Nouvelle présentation et actualisation.
19 avril 2018 : Contrôle et actualisation avec mga6, ajout de systemd-cgls.

Difficulté

Pour : linuxien averti.

 Introduction

Vous pouvez démarrer une session en mode texte, vous connecter en mode texte, puis lancer une session graphique.

La présente page montre le processus lorsque vous vous êtes connectés en mode texte et que vous lancez la commande startx. Deux scripts assurent le lancement de la session graphique : startx et xinit, avec souvent un troisième : Xsession.

X fonctionne suivant le modèle client/serveur :
- le logiciel serveur X tourne sur un terminal intelligent (client léger) avec écran, clavier et souris ; il reçoit et sert des requêtes d'affichage, d'entrée de texte et de déplacement de souris.
- les logiciels client X se connectent au serveur X et lui envoient leurs requêtes. Le client est simplement l'application logicielle (jeu, traitement de texte, calculatrice…) qui utilise alors le protocole X pour déléguer au serveur X les tâches d'interface homme-machine.

 Arguments de startx

Normalement, startx est lancé sans aucun argument. Mais il peut être intéressant de spécifier l'environnement graphique à démarrer. On peut le préciser :
indiquer le nom de l'exécutable, tel qu'il est spécifié dans le fichier du répertoire /usr/share/xsessions (Exec=)
Ex. startx startlxqt

Haut

 Le déroulement de startx

La commande systemd-cgls permet de voir le déroulement global du démarrage.

Pour les curieux, survolez : la sortie de systemd-cgls, remise dans l'ordre des numéros de process

Control group /:]
-.slice
├─init.scope
│ └─1 /sbin/init
├─system.slice
│ ├─systemd-journald.service
│ │ └─445 /usr/lib/systemd/systemd-journald
│ ├─systemd-udevd.service
│ │ └─499 /usr/lib/systemd/systemd-udevd
│ ├─systemd-logind.service
│ │ └─635 /usr/lib/systemd/systemd-logind
│ ├─alsa-state.service
│ │ └─638 /usr/sbin/alsactl -s -n 19 -c rdaemon
│ ├─irqbalance.service
│ │ └─649 /usr/sbin/irqbalance --foreground
│ ├─dbus.service
│ │ └─651 /usr/bin/dbus-daemon --system --address=systemd: --nofork --nopidfi...
│ ├─gpm.service
│ │ └─667 /usr/sbin/gpm -m /dev/input/mice -t exps2
│ ├─acpid.service
│ │ └─668 /usr/sbin/acpid
│ ├─powernowd.service
│ │ └─697 /usr/sbin/powernowd
│ ├─systemd-networkd.service
│ │ └─707 /usr/lib/systemd/systemd-networkd
│ ├─network.service
│ │ ├─ 942 /sbin/ifplugd -I -b -i enp3s0
│ │ └─1156 dhclient -1 -q -lf /var/lib/dhclient/dhclient--enp3s0.lease -pf /v...
│ ├─systemd-resolved.service
│ │ └─1225 /usr/lib/systemd/systemd-resolved
│ ├─crond.service
│ │ └─1229 /usr/sbin/crond -n
│ ├─mandi.service
│ │ └─1842 /usr/sbin/mandi
│ └─polkit.service
│   └─2029 /usr/lib/polkit-1/polkitd --no-debug
└─user.slice
  └─user-1000.slice
    ├─user@1000.service
    │ ├─init.scope
    │ │ ├─1893 /usr/lib/systemd/systemd --user
    │ │ └─1897 (sd-pam)
    │ └─gpg-agent.service
    │   └─1901 /usr/bin/gpg-agent --daemon
    └─session-1.scope
      ├─1884 login -- paiiou
      ├─1905 -bash
      ├─1937 /bin/sh /usr/bin/startx
      ├─1959 xinit /etc/X11/xinit/xinitrc -- vt1 -keeptty -auth /home/paiiou...
      ├─1960 /usr/libexec/Xorg :0 vt1 -keeptty -auth /home/paiiou/.serveraut...
      ├─1965 icewm-session
      ├─1992 /usr/bin/dbus-launch --exit-with-session --sh-syntax
      ├─1993 /usr/bin/dbus-daemon --fork --print-pid 5 --print-address 7 --se...
      ├─2009 /usr/libexec/polkit-mate-authentication-agent-1
      ├─2015 icewmbg
      ├─2016 icewm --notify
      ├─2020 /usr/libexec/at-spi-bus-launcher
      ├─2024 /usr/bin/dbus-daemon --config-file=/usr/share/defaults/at-spi2/a...
      ├─2026 /usr/libexec/at-spi2-registryd --use-gnome-session
      ├─2037 icewmtray --notify
      ├─2039 /usr/bin/xterm
      ├─2068 bash
      └─2093 systemd-cgls

Quelques précisions

La tranche system démarre un certain nombre de services, dont journald, udevd (gestion des périphériques), logind (connexion) ...

La tranche user démarre également des services, systemd user, pam et gpg-agent, mais lance surtout des applications, dont login, bash et startx (qui sera étudié ci-dessous).

 Le script /usr/bin/startx

La commande startx prépare une session du système XWindow. Elle constitue une partie préparatoire du programme xinit : elle prépare les arguments de la commande xinit, puis lance cette commande avec des arguments pour le client X et des arguments pour le serveur X.
Le déroulement est le suivant :

Haut

 La commande /usr/bin/xinit

xinit démarre le serveur X avec les arguments définis grâce à startx

Ensuite xinit lance le client X défini par l'argument, ici : /etc/X11/xinit/xinitrc
xinitrc contient la ligne
exec /etc/X11/Xsession $*
Remarque : $* réprésente les arguments éventuels. Il n'y en a pas ici.
(le cas /usr/bin/startlxqt n'est pas traité ici)

Haut

 Le script /etc/X11/Xsession

Il est aussi bien utilisé par la commande startx que par les gestionnaires de connexion.

Ce script ouvre une session graphique correspondant aux éventuels paramètres spécifiés lors de la commande. Par défaut, aucun paramètre n'est spécifié.
Voici, en résumé, le processus :

Remarque : le fait de lancer une commande avec exec la_commande a pour conséquence de quitter ce script dès que la_commande est terminée. La suite de ce script n'est alors pas vue. Ceci permet de sortir du script Xsession dès qu'une commande adéquate est trouvée, sans exploer le reste du script.

Haut

 En résumé

startx

Prépare les arguments pour la commande xinit.

Vous pouvez ajouter, comme argument, le nom de l'exécutable de la session à démarrer. Le nom doit être tel qu'il est spécifié dans le fichier du répertoire /usr/share/xsessions.

xinit

xinit démarre le serveur X, puis démarre le client X (votre session), en passant par /etc/X11/Xsession.

Xsession

Si vous n'avez pas modifié dans un sens contraire les arguments de xinit, ce dernier lance /etc/X11/Xsession.

Xsession assemble toutes les ressources X, définit la session à ouvrir, lance les commandes du répertoire /etc/X11/xinit.d et enfin ouvre votre session avec son bureau.

La définition du bureau à ouvrir suit une règle bien définie :

  1. Si un argument est donné (l'argument de startx), c'est celui-ci qui définit le bureau.
    Dans le cas où cet argument est erroné, une session de secours est recherchée.
  2. Si aucun argument n'est donné, le bureau est recherché, dans l'ordre suivant
    • celui de votre fichier ~/.desktop, s'il existe,
    • à défaut, celui du fichier /etc/sysconfig/desktop, s'il y est défini,
    • à défaut, celui du premier fichier du répertoire /usr/share/xsessions
Haut