Session graphique sans authentification avec startx et systemd

Vincent Bernat

Si votre sta­tion de tra­vail uti­lise un chif­fre­ment com­plet du disque, vous pou­vez sou­hai­ter exé­cu­ter di­rec­te­ment votre en­vi­ron­ne­ment de bu­reau après avoir saisi le mot de passe pour dé­chif­frer le disque. Beau­coup de ges­tion­naires d’af­fi­chage comme GDM et LightDM ont une telle fonc­tion­na­lité. Ce­pen­dant, seul GDM peut exé­cu­ter Xorg avec les pri­vi­lèges d’un uti­li­sa­teur standard.

Il existe une al­ter­na­tive uti­li­sant startx et un ser­vice 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 fonc­tion de chaque bloc :

  • Le ser­vice dé­marre après systemd-user-sessions.service, qui au­to­rise les uti­li­sa­teurs à se connec­ter après le dé­mar­rage du sys­tème en re­ti­rant le fi­chier /run/nologin.

  • Avec User=bernat, le ser­vice est dé­marré sous l’iden­tité de l’uti­li­sa­teur men­tionné. Cela im­plique que Xorg ne tourne pas avec les pri­vi­lèges de root.

  • Avec PAMName=login, le pro­ces­sus exé­cuté est en­re­gis­tré comme une ses­sion PAM pour le ser­vice login, qui com­prend pam_systemd. Ce mo­dule en­re­gistre cette ses­sion au­près du ges­tion­naire de connexion de sys­temd. Pour être ef­fec­tif, nous de­vons aussi al­louer un TTY avec TTYPath=/dev/tty8. Quand le TTY est ac­tif, l’uti­li­sa­teur se voit ac­cor­der des ac­cès sup­plé­men­taires aux pé­ri­phé­riques lo­caux tels que l’écran, la sou­ris, le cla­vier et le son. Ces droits sup­plé­men­taires per­mettent de faire tour­ner Xorg sans être root1. La va­riable d’en­vi­ron­ne­ment TERM est re­mise à zéro car sys­temd l’ini­tia­lise à linux quand on uti­lise la di­rec­tive StandardInput=tty. De plus, nous de­man­dons à pam_systemd de mettre en place une ses­sion X11 avec Environment=XDG_SESSION_TYPE=x11. Dans le cas contraire, logind consi­dé­rera que la ses­sion n’a pas d’ac­ti­vité à moins de re­ce­voir une en­trée sur le TTY. Les lo­gi­ciels re­po­sant sur l’in­dice d’ac­ti­vité de logind ne se­raient pas fonc­tionnels2.

  • Les di­rec­tives UtmpIdentifier=tty8 et UtmpMode=user per­mettent d’en­re­gis­trer la ses­sion dans le fi­chier /var/run/utmp. Elles ne sont pas stric­te­ment né­cessaires.

  • La der­nière étape est d’exé­cu­ter Xorg via startx. Pour que logind au­to­rise Xorg à prendre le contrôle des pé­ri­phé­riques lo­caux, chvt 8 change le TTY ac­tif3. La di­rec­tive StandardOutput=journal, com­bi­née aux op­tions -verbose 3 -logfile /dev/null pour Xorg, place les jour­naux du ser­veur X dans le jour­nal du sys­tème au lieu d’un fi­chier. Bien qu’iden­tique à sa va­leur par dé­faut, la di­rec­tive Restart=no met en avant que l’on ne veut pas que ce ser­vice soit re­dé­marré afin de s’as­su­rer que la ses­sion gra­phique sans au­then­ti­fi­ca­tion ne sera pré­sen­tée qu’au dé­mar­rage. Par dé­faut, startx exé­cute xinitrc. Si vous vou­lez lan­cer Kodi à la place, in­sé­rez /usr/bin/kodi-standalone entre startx et --.

Pla­cez cette unité dans le fi­chier /etc/systemd/system/x11-autologin.service et ac­ti­vez-la avec systemctl enable x11-autologin.service. Xorg s’exé­cute main­te­nant sans les droits root et uti­lise le jour­nal. Après quelques mois d’usage, je n’ai pas re­mar­qué de ré­gres­sion par rap­port à LightDM avec l’au­then­ti­fi­ca­tion au­to­matique.