A fresh classroom needed two things installed by hand on every box: Google Chrome, which is not in Debian, and the DVD codecs, which Debian cannot ship. Both now happen on their own. ekklesia-classroom-provision.service runs after every boot and does the work that needs the network and the apt lock, neither of which a package postinst can have. Each step returns immediately if it is already done, so a provisioned machine costs nothing and a machine that was offline the first time gets another go at the next boot. Nothing there is allowed to fail the boot: a classroom with no DVD codecs is still a working classroom, and it says so in the log rather than silently. The postinst enables the service but deliberately does not start it. Every OTA update reboots the moment the install finishes, and an apt run killed by that reboot would leave dpkg half-configured. Chrome comes from Google's own repository rather than a one-off .deb, so it keeps getting security updates. Google's package migrates whatever we write into a deb822 file of its own, so the repository is looked for across every source file instead of only the one we would write; otherwise a machine that had Chrome removed would end up with two copies of the same repository. The DVD codec helper previously assumed deb822 sources and did nothing on a machine using a classic /etc/apt/sources.list, which is what the hardware actually runs. It now handles both formats, and only ever adds a missing component to an existing Debian entry — so it cannot produce a duplicate repository or a duplicate component however many times it runs, and third-party repositories like Chrome's are never touched. It also answers libdvd-pkg's debconf questions, so nothing blocks on a prompt in a service with no terminal. Tested against fixture APT trees for classic sources.list, deb822 .sources, contrib already enabled, repeated runs, third-party repositories and the awkward real lines: bracketed options, indentation, trailing comments and flat repositories. Co-Authored-By: Claude Opus 5 <[email protected]>
5.4 KiB
Classroom test checklist
Run against the exact artifact published to canary, on the real endpoint,
before promoting to stable with ./update_stable.sh.
Boot
- Cold boot reaches the classroom shell with no terminal or window junk
- Reboot does the same
- Wallpaper appears
- Dock appears, centred
- Clock appears, bottom right
Provisioning
journalctl -u ekklesia-classroom-provisionshows a clean run- Google Chrome is installed on a machine that never had it
- A second boot does not reinstall anything
- A machine with no network still boots to a working shell, and provisioning succeeds at a later boot once it is online
UI scale
UI_SCALE=1.0looks exactly as it did before scaling existedUI_SCALE=1.25, thensudo systemctl restart getty@tty1: dock, icons, clock and notifications all grow togetherUI_SCALE=0.8shrinks them together- The reserved bottom strip grows and shrinks with the dock, and a maximised Chrome window still stops above it
- A nonsense value (
UI_SCALE=banana) still gives a working shell - An extreme value (
UI_SCALE=9) is clamped, not obeyed
Reserved bottom shell (regression)
The bottom strip is one full-width layer-shell surface with a 76px exclusive zone. Dock and clock live inside it. Do not split them back into separate layer-shell windows.
- A maximised Chrome window stops above the bottom strip
- The clock does not float over Chrome
- Dock stays centred, clock stays bottom right
- Wallpaper shows through the unused parts of the strip
- Every dock button still responds to clicks
- A fullscreen application covers the whole display, dock included
Browser
- First Browser click launches Chrome
- Chrome opens on Wonder Ink (https://app.wonderink.org/)
- Clicking Browser while Chrome is focused minimises it
- Clicking Browser again restores it maximised, not floating or draggable
- Clicking Browser while Chrome is running but unfocused focuses it
Super+Mminimises the focused windowSuper+Shift+Mrestores the most recently minimised window- Normal navigation to any other site works
- The Home button returns to Wonder Ink
- Fullscreen YouTube video uses the whole display
- Leaving fullscreen restores the correct geometry above the dock
- No first-run, default-browser or sign-in nag appears
chrome://policylists the Ekklesia policies as applied, with no "unknown policy" entries- Chrome does not start by itself at boot
- After a reboot, cookies and site logins are still there
- After an OTA update, cookies and site logins are still there
Known limitation: Chrome's own minimise button in its title bar does
nothing. Sway ignores the Wayland minimise request and gives no event to
hook. Minimising is the dock's Browser button or Super+M.
Notifications
classroom-notify-testrenders with the classroom styling: dark translucent, rounded, white text, top rightclassroom-notify-test --critical "Parent Call" "Room 3 needs a parent."renders in the critical style and does not time out- Notifications appear over a fullscreen video
Over SSH from an administrator account, run it with sudo:
sudo classroom-notify-test --dry-run # show the session it resolved
sudo classroom-notify-test # send into the classroom desktop
The classroom desktop belongs to the classroom user, and mako sits on that user's D-Bus session. A plain notify-send from an SSH session lands in the administrator's own session, where nothing owns org.freedesktop.Notifications, so D-Bus tries to start a second mako with no display and the call times out with NoReply. The script finds the running sway process for the classroom user and delivers into its session instead. It never starts mako.
sudo classroom-notify-testfrom an SSH session displays on the classroom screensudo classroom-notify-test --dry-runreports the resolved XDG_RUNTIME_DIR, bus address and Wayland display- Running it as an unprivileged admin account explains it needs sudo
tests/test-classroom-notify-test.shpasses (also run by the build)
DVD
With DVD_ENABLED=false:
- No DVD button in the dock
With DVD_ENABLED=true:
- Drive unplugged: button present, icon held back, friendly notification on click
- Drive present, no disc: friendly notification on click, nothing crashes
- Inserting a disc produces one DVD Ready notification
- The DVD icon comes up to full strength while a disc is in
- Nothing plays until the button is pressed
- Clicking plays the disc
- Menus work
- Audio works
- Chapter navigation works
- Fullscreen works
Super+Mminimises the player, the DVD button restores it- Closing the player works
- Ejecting is detected, the icon goes back
- Reinserting is detected again
- VLC opens fullscreen, dark, with no menu bar, no orange cone and no sway title bar
- The fullscreen controller still appears on mouse movement
- Commercial CSS disc plays without anyone having run codec setup by hand
OTA
./update_canary.shpublishes package first, manifest last- The endpoint on the canary channel picks the update up
- SHA-256 verification passes
- Install succeeds and the endpoint reboots
- Everything above still works after the update