[Unit] Description=Wayland kiosk (weston desktop-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 — weston needs a seat # for DRM master + libinput. (PAMName runs account/session, not auth, so the # passwordless kiosk user is fine.) XDG_SEAT/XDG_VTNR are set into the PAM # environment before pam_open_session, so pam_systemd registers the session on # seat0/vt1 — WITHOUT them logind's auto-derivation failed and weston died with # "logind: failed to get session seat" -> "failed to create compositor backend". PAMName=login Environment=XDG_SEAT=seat0 Environment=XDG_VTNR=1 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 # kiosk-session launches weston (foreground, owns the seat) + Chromium. weston # 8.0 (EPEL 9) lacks kiosk-shell.so/[autolaunch], so the wrapper does what those # would have — see kiosk-session and weston.ini. If weston dies, Restart=always # relaunches the whole stack; a Chromium-only crash is handled inside the wrapper. ExecStart=/usr/local/bin/kiosk-session Restart=always RestartSec=2 [Install] WantedBy=graphical.target