A classroom computer is shared. There is one local Chrome profile owned by the room, teachers sign into websites, and nobody signs into Chrome. BrowserSignin=0 stops Chrome asking who is using it, with SyncDisabled set explicitly alongside it so the intent is in the file rather than implied. BrowserAddPersonEnabled=false stops new profiles and ProfilePickerOnStartupAvailability=1 stops the picker. BrowserGuestModeEnabled=false is the answer to the other profile switching entry point. Guest is the one that survives disabling add person, and turning it off is the supported mechanism rather than hiding UI. Guest is not the browsing model: the room needs one persistent profile so the church YouTube login survives. CookiesSessionOnlyForUrls scoped to [*.]wonderink.org, which covers app.wonderink.org and every other subdomain, so a teacher's Wonder Ink session does not outlive them. BackgroundModeEnabled was already false, which is what lets a session actually end. Every policy name was checked against the strings of the installed Chrome 152 binary, with deliberately invalid names as a control so the check is known to discriminate. Two things are recorded honestly in docs/browser.md rather than claimed. The avatar button stays in the toolbar — screenshotted with and without these policies, it is in the same place either way; what changes is that nothing behind it can create or switch a profile, and no Chrome 152 policy removes the button. And whether session-only cookies actually sign Wonder Ink out is unverified: it needs a real Wonder Ink login, which this machine does not have, and three attempts to prove the mechanism against a local site were inconclusive because the positive control never worked. The endpoint procedure to settle it, including how to tell a cookie session from a localStorage one, is written down. Co-Authored-By: Claude Opus 5 <[email protected]>
8.2 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 sets sway's output scale, so it scales the whole session.
Change it, then sudo systemctl restart getty@tty1.
UI_SCALE=1.0is identical to a session with no scalingswaymsg -t get_outputsshows the mode still 1920x1080 at every scale, with only the logical size changing- At 1.25 and 1.5, Chrome grows: tabs, omnibox, toolbar icons, menus and page content
- Chrome's buttons are still easy to hit with the mouse
- Dock, clock, notifications and the DVD bar grow by the same amount — once, not twice
UI_SCALE=0.8shrinks everything together- A nonsense value (
UI_SCALE=banana) still gives a working shell - An extreme value (
UI_SCALE=9) is clamped, not obeyed journalctlor the sway log showsclassroom-scale: session scale N
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
- Chrome has no sway title bar — the window starts at Chrome's own tab strip, and Chrome's tabs and address bar are still there
- Chrome still maximises and minimises as before
- After a reboot, no "Restore pages? Chrome didn't shut down correctly" bubble
- Chrome does not offer to save passwords
- Chrome shows no way to sign into the browser itself
- No "Add profile" and no Guest entry in the profile menu
- No profile picker at startup
- Wonder Ink signs in normally during a session
- After closing Chrome fully and reopening, Wonder Ink is signed out (see browser.md — this is the unverified one)
- YouTube is still signed into the church account after that
chrome://policylists PasswordManagerEnabled as an applied managed policy- Website logins still persist across a reboot
- Clicking Browser when Chrome is closed shows a throbber on the dock button until the window appears
- Clicking Browser when Chrome is already open feels immediate, with no throbber
- The pointer shows a busy cursor while it is over 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
- Commercial CSS disc plays without anyone having run codec setup by hand
DVD mode
- Pressing DVD covers the whole display immediately, dock and clock included — no wallpaper visible anywhere, at any point
- A spinner and "Loading DVD…" show while the disc spins up
- No partial VLC window is ever visible against the wallpaper
- The loading surface stays up until the disc menu is actually showing — VLC's tiled black startup window is never visible
- Video or the disc menu replaces the loading surface when ready
- A disc that never opens still gives the desktop back (20s)
- No VLC chrome anywhere: no menu bar, no fullscreen controller, no cone, no sway title bar
- Wallpaper is never visible around VLC
- Moving the mouse to the bottom slides the classroom bar up
- It hides again shortly after the mouse leaves it
- While hidden, clicking a disc menu item near the bottom still reaches the menu
- Play/pause toggles and the icon follows the actual state
- Previous and next chapter work
- The menu button returns to the disc menu
- Space pauses; arrow keys and Enter navigate the disc menu
- Arrow keys do not change volume, and no key reaches crop, aspect ratio, subtitles, audio tracks or deinterlacing
- Esc leaves DVD mode cleanly, with no black window left behind
- Close leaves DVD mode cleanly
- Eject leaves DVD mode and opens the tray
- Killing VLC by hand also returns to the classroom desktop
- Pressing DVD twice quickly does not start two sessions
- The bar is sized by UI_SCALE like the dock
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