Une application Kiosk Wayland, avec Weston

Cet article contient une synthèse de la procédure à suivre pour exécuter une application en mode Kiosk sous Debian, en utilisant le compositeur Weston.

Il existe le compositeur « cage » dédié à ce rôle, mais son manque de flexibilité est vite limitant (il est notamment impossible de désactiver une sortie video).

Le compositeur ainsi que l’application sont exécutés par un utilisateur « kiosk » avec des droits restreints, évitant de compromettre toute la sécurité du système en cas de crash du compositeur / retour au shell

1. Installer weston et seatd

seatd arbitre l’accès au matériel d’entrée / sortie ( écran / clavier + souris ), et est nécessaire à l’utilisation de weston.

# apt install tmux weston seatd  

2. Fichier de configuration weston.ini

On créé le fichier weston.ini, que l’on place dans le répertoire personnel de l’utilisateur « kiosk » , avec pour contenu suivant :

[core]
backend=drm-backend.so
idle-time=0

[output]
name=HDMI-A-1
mode=1920x1080
transform=rotate-90

[output]
name=eDP-1
mode=off

Le bloc [core] spécifie l’utilisation du pilote « drm », qui prend directement la main sur la carte graphique sans passer par un autre compositeur, et désactive l’écran de veille.

Les blocs [output] configurent les différentes sorties video. Dans ce cas l’une est désactivée, tandis que l’autre est en mode portrait. Le nom des sorties provient du répertoire /sys/class/drm.

3. Script de lancement

Créer le script start_kiosk.sh dans le répertoire personnel de l’utilisateur « kiosk ». Son contenu est le suivant :

#!/bin/bash
weston --config /home/kiosk/weston.ini &
sleep 5s # could be less
export WAYLAND_DISPLAY=wayland-1
export DISPLAY=:1
exec /home/kiosk/kiosk_app --platform wayland 2>log_kiosk.txt

Modifier la commande de lancement pour correspondre au chemin du fichier weston.ini

La ligne « sleep 5s » pourrait être modifiée pour attendre une notification de démarrage de weston. Des solutions existent utilisant systemd, mais je n’ai pas trouvé de solution simple adaptée à mon cas.

Dans mon cas, j’exécute une application Qt nommée « kiosk_app », pour Qt il est nécessaire de spécifier –platform wayland, sans quoi l’application ne démarre pas.

4. Login automatique de l’utilisateur « kiosk »

Créé le fichier /etc/systemd/system/getty@tty1.service.d/autologin.conf avec pour contenu

[Service]
ExecStart=
ExecStart=-/sbin/agetty -o '-p -f -- \\u' --noclear -a kiosk %I $TERM
Type=simple
Environment=XDG_SESSION_TYPE=wayland

Il est nécessaire d’utiliser le tty1 plutôt que le traditionnel tty7 pour l’interface graphique, car le changement de terminal automatique n’est pas fiable.

5. Conclusion

Cette approche permet le lancement d’une application en mode kiosk, sans aucun bureau traditionnel installé. L’utilisation de Wayland améliore grandement la fluidité, et garanti notamment l’absence de « tearing » (affichage partiel de 2 images consécutives) qui est très visible voire dérangeant lors de la lecture de video avec X11.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée.