51 lines
2.3 KiB
Desktop File
51 lines
2.3 KiB
Desktop File
[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 session on tty1 so logind assigns seat0 — weston needs a seat for
|
|
# DRM master + libinput. Uses a DEDICATED PAM stack (/etc/pam.d/kiosk, see
|
|
# files/kiosk/kiosk.pam) instead of "login": under STIG the login/system-auth
|
|
# account phase (pam_faillock + password aging) rejects the passwordless kiosk
|
|
# user, so the session never opened and getty kept tty1. The kiosk stack keeps a
|
|
# full session (pam_systemd seat registration) but a permissive account phase.
|
|
# (PAMName runs account/session, not auth.) 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=kiosk
|
|
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]
|
|
# multi-user.target, NOT graphical.target: the kiosk launches weston directly
|
|
# (no display manager), and multi-user.target is always reached on a normal boot
|
|
# — graphical.target is only active if it's the default AND nothing blocks it,
|
|
# which left the kiosk dead at boot (started fine on manual restart). Conflicts=
|
|
# getty@tty1 still hands tty1 over to the kiosk.
|
|
WantedBy=multi-user.target
|