Session graphique sans authentification avec startx et systemd
Vincent Bernat
Si votre station de travail utilise un chiffrement complet du disque[1], vous pouvez souhaiter exécuter directement votre environnement de bureau après avoir saisi le mot de passe pour déchiffrer le disque. Beaucoup de gestionnaires d’affichage comme GDM[2] et LightDM[3] ont une telle fonctionnalité. Cependant, seul GDM peut exécuter Xorg avec les privilèges d’un utilisateur standard.
Il existe une alternative utilisant startx et un service systemd:
[Unit]
Description=X11 session for bernat
After=graphical.target systemd-user-sessions.service
[Service]
User=bernat
WorkingDirectory=~
PAMName=login
Environment=XDG_SESSION_TYPE=x11
TTYPath=/dev/tty8
StandardInput=tty
UnsetEnvironment=TERM
UtmpIdentifier=tty8
UtmpMode=user
StandardOutput=journal
ExecStartPre=/usr/bin/chvt 8
ExecStart=/usr/bin/startx -- vt8 -keeptty -verbose 3 -logfile /dev/null
Restart=no
[Install]
WantedBy=graphical.target
Voici la fonction de chaque bloc :
-
Le service démarre après
systemd-user-sessions, qui autorise les utilisateurs à se connecter après le démarrage du système en retirant le fichier.service /run./nologin -
Avec
User, le service est démarré sous l’identité de l’utilisateur mentionné. Cela implique que=bernat Xorgne tourne pas avec les privilèges de root. -
Avec
PAMName, le processus exécuté est enregistré comme une session PAM pour le service=login login, qui comprend pam_systemd[4]. Ce module enregistre cette session auprès du gestionnaire de connexion de systemd[5]. Pour être effectif, nous devons aussi allouer un TTY avecTTYPath. Quand le TTY est actif, l’utilisateur se voit accorder des accès supplémentaires aux périphériques locaux tels que l’écran, la souris, le clavier et le son. Ces droits supplémentaires permettent de faire tourner Xorg sans être root1. La variable d’environnement=/dev /tty8 TERMest remise à zéro car systemd l’initialise àlinuxquand on utilise la directiveStandardInput. De plus, nous demandons à=tty pamde mettre en place une session X11 avec_systemd Environment. Dans le cas contraire,=XDG _SESSION _TYPE =x11 logindconsidérera que la session n’a pas d’activité à moins de recevoir une entrée sur le TTY. Les logiciels reposant sur l’indice d’activité delogindne seraient pas fonctionnels2. -
Les directives
UtmpIdentifieret=tty8 UtmpModepermettent d’enregistrer la session dans le fichier=user /var. Elles ne sont pas strictement nécessaires./run /utmp -
La dernière étape est d’exécuter
Xorgviastartx. Pour quelogindautoriseXorgà prendre le contrôle des périphériques locaux,chvt 8change le TTY actif3. La directiveStandardOutput, combinée aux options=journal -verbose 3 -logfilepour/dev /null Xorg, place les journaux du serveur X dans le journal du système au lieu d’un fichier. Bien qu’identique à sa valeur par défaut, la directiveRestartmet en avant que l’on ne veut pas que ce service soit redémarré afin de s’assurer que la session graphique sans authentification ne sera présentée qu’au démarrage. Par défaut,=no startxexécutexinitrc. Si vous voulez lancer Kodi à la place, insérez/usrentre/bin /kodi-standalone startxet--.
Placez cette unité dans le fichier
/etc et activez-la avec
systemctl enable x11-autologin. Xorg s’exécute maintenant
sans les droits root et utilise le journal. Après quelques mois
d’usage, je n’ai pas remarqué de régression par rapport à LightDM
avec l’authentification automatique.
- https://wiki.archlinux.org/title/Data-at-rest_encryption
- https://en.wikipedia.org/wiki/GNOME_Display_Manager
- https://github.com/ubuntu/lightdm
- https://manpages.debian.org/pam_systemd.8.html
- https://manpages.debian.org/systemd-logind.8.html
- https://dvdhrm.wordpress.com/2013/08/25/sane-session-switching/
- https://gitlab.freedesktop.org/xorg/xserver/-/issues/1194