prole/infrastructure/roles/dashboard/templates/dashboard.service.j2
chrisfu 17cb827be5 test(dashboard): add unit tests for systemd unit and script validation
- Ensure dashboard service doesn't create an ordering cycle with `multi-user.target`.
- Verify service safely attaches to a virtual terminal (VT) and passes VT to Xorg.
- Ensure no `su` usage by default in the service.
- Validate script behavior for passing VT and `-keeptty` options to Xorg.

chore(dashboard): update systemd unit to avoid VT conflicts and improve logging

- Remove `After` and `Wants` directives for `multi-user.target` to prevent conflicts.
- Add `TTYPath`, `StandardInput`, and related options for VT attachment.
- Ensure `ExecStopPost` restores getty service for the dashboard VT.

fix(dashboard): improve Xorg resolution and clean up script logic

- Dynamically determine Xorg executable location in `dashboard.sh`.
- Pass VT, display, and `-keeptty` to Xorg to improve script reliability.

fix(mariadb): correct exFAT mount options for external storage

- Avoid `chown` failures by setting root ownership with group access for `mysql`.
- Update external mount options to `uid=0,gid=mysql,umask=0002`.

cleanup(mariadb): remove unnecessary owner/group permissions from migration marker task
2026-03-13 01:49:57 -07:00

41 lines
1.0 KiB
Django/Jinja

[Unit]
Description=Prole console dashboard (X + conky)
After=systemd-user-sessions.service
Wants=systemd-user-sessions.service
# If a graphical desktop is running, starting this service will stop it.
Conflicts=graphical.target
Before=graphical.target
# If a getty is running on the dashboard VT, stop it so Xorg can take over.
Conflicts=getty@tty{{ dashboard_vt }}.service
[Service]
Type=simple
# Attach the service to the dashboard VT so Xorg can take over the display.
TTYPath=/dev/tty{{ dashboard_vt }}
StandardInput=tty
StandardOutput=journal+console
StandardError=journal+console
TTYReset=yes
TTYVHangup=yes
TTYVTDisallocate=yes
Environment=DASHBOARD_VT={{ dashboard_vt }}
ExecStart={{ dashboard_script_dest }}
# When the dashboard stops, try to restore the login prompt on that VT.
ExecStopPost=-/usr/bin/systemctl --no-block start getty@tty{{ dashboard_vt }}.service
Restart=always
RestartSec=2
# Ensure X/conky are terminated when the service stops.
KillMode=control-group
TimeoutStopSec=10
[Install]
WantedBy=multi-user.target