[Unit] Description=Wayland kiosk (weston kiosk-shell + Chromium) Documentation=man:weston(1) man:weston.ini(5) # Take over tty1 from the login getty and start after the network is up (the # kiosk loads a URL). plymouth-quit lets the splash hand off cleanly. After=systemd-user-sessions.service plymouth-quit-wait.service getty@tty1.service network-online.target Wants=network-online.target Conflicts=getty@tty1.service [Service] Type=simple User=kiosk # A real PAM login session on tty1 so logind assigns seat0 — cage/wlroots needs # a seat for DRM master + libinput. (PAMName runs account/session, not auth, so # the passwordless kiosk user is fine.) PAMName=login TTYPath=/dev/tty1 TTYReset=yes TTYVHangup=yes TTYVTDisallocate=yes StandardInput=tty-fail StandardOutput=journal StandardError=journal UtmpIdentifier=tty1 UtmpMode=user EnvironmentFile=/etc/kiosk/kiosk.env # weston with kiosk-shell (every app fullscreen). --use-pixman = software # rendering for VMs/no-GPU. weston.ini's [autolaunch] runs /usr/local/bin/ # kiosk-session (Chromium) and, with watch=true, weston exits if it dies — so # Restart=always relaunches the whole stack. cage (the original choice) isn't # packaged for EL9; weston kiosk-shell is the minimal EL9-available equivalent. ExecStart=/usr/bin/weston --use-pixman --config=/etc/xdg/weston/weston.ini Restart=always RestartSec=2 [Install] WantedBy=graphical.target