Lancer une fenêtre interactive avec systemd

j’ai un portable ThinkPad X220 avec mageia 5 qui utilise les services d’authentification utilisateur par LDAP et d’automontage NFS de mon serveur perso Dell PowerEdge T310, Il se trouve que quand je suis en déplacement avec mon portable, les services NFS et LDAP restent actifs et génèrent des timeouts qui sont super pénibles. Je me suis donc creusé la tête pour pouvoir choisir au boot entre un mode maison et un mode mobile avant que l’interface graphique de login se lance.

En tout seigneur tout honneur, je me suis inspiré de ce site https://mespotesgeek.fr/fr/execution-dun-script-interactif-au-boot-avec-systemd/ qui a été lui même inspiré par https://alan-mushi.github.io/2014/10/26/execute-an-interactive-script-at-boot-with-systemd.html

j’ai donc créé le service /etc/systemd/system/choix.service contenant

[Unit]
Description=Service pour passer en mode maison ou mobile
After=getty@tty2.service

[Service]
Type=oneshot
ExecStart=/usr/bin/choix-mode.sh
StandardInput=tty
TTYPath=/dev/tty2
TTYReset=yes
TTYVHangup=yes

[Install]
WantedBy=multi-user.target

pour le détail des paramètres, je vous renvoie aux sites cités plus haut. Revenons à notre script /usr/bin/choix-mode.sh il va contenir

#!/bin/bash

sleep 5

chvt 2

mode=$(whiptail –title « Mode connexion » –radiolist \
« Quel est ton mode de connexion » 15 60 4 \
« Connecte » « Je suis à la maison » ON \
« Mobile » « Je suis en mode mobile » OFF 3>&1 1>&2 2>&3)

exitstatus=$?
if [ $exitstatus -ne 0 ]; then
mode= »Connecte »
fi

if [ $mode == ‘Mobile’ ]; then
systemctl stop nslcd
systemctl stop autofs
fi

chvt 1

par défaut Mageia boote sur la console tty1, on bascule à un moment sur la console tty2 (chvt 2) la fenêtre s’affiche, on fait notre choix et rebascule sur la console de boot tty1 (chvt 1). La commande sleep au tout début du script est nécessaire sinon on n’a pas la main sur la fenêtre. De même si 3>&1 1>&2 2>&3 n’apparait pas à la fin de la commande whiptail, rien ne s’affiche. On donne des droits d’exécutable à notre script en tapant:

chmod 755 choix-mode.sh

Il faudra veiller à avoir le package newt installé pour bénéficier la commande gérant les fenêtres de dialogue whiptail. On active maintenant le service en tapant  systemctl enable choix.service. On reboote et voilà le résultat

 

 

La photo est un peu pourrave, mais on voit que ça marche ! Par contre problème sous Mageia les messages de systemd s’affichent par dessus la fenêtre, c’est plutôt pénible. J’ai bien essayé de jouer avec l’affichage sur les différentes consoles mais c’est à croire que les messages s’affichent indifféremment sur toutes les consoles. Je n’ai rien trouvé de mieux que de passer le boot en mode silencieux. Pour cela on édite le fichier /boot/grub/menu.lst et on rajoute les commandes suivantes (en gras)

kernel (hd0,4)/boot/vmlinuz BOOT_IMAGE=linux root=UUID=56f67d09-fddc-49f2-83c3-8c3c20378f90  splash quiet loglevel=0 noiswmd resume=UUID=b59a03aa-47
44-4ace-ad91-10f8109817b8 vga=788 systemd.show_status=0

ce n’est pas fini, on crée le fichier /etc/sysctl.d/20-quiet-printk.conf qui contient

kernel.printk = 3 3 3 3

on reboote et plus de messages indésirables, that’s all folks !!

J’en ai profité pour mettre à jour ma page sur mon site funix sur le démarrage de linux, 16 ans que je ne l’avais pas mise à jour ! C’est devenu une page sur la gestion des services et du démarrage avec systemd.

Laisser un commentaire