Files
Classroom_Desktop/docs/testing.md
T
ekklesiaandClaude Opus 5 f8ddfbe345 feat: make DVD playback a classroom surface, not a media player
Pressing DVD now enters DVD mode rather than opening VLC. VLC is still
the backend, because its dvdnav module is what decodes disc menus and
nothing else on Debian does that reliably, but nothing a person can see
or press belongs to it any more.

classroom-dvd-session owns the whole thing. It puts a full-screen black
layer-shell surface up the moment the button is pressed, starts VLC
behind it, and drops it once playback is actually on screen — so the
harsh cut from wallpaper to VLC's black window is gone, and no partial
VLC window or reserved dock strip is ever visible. A deadline drops the
surface regardless, because DVD mode must never leave a black screen
with nothing behind it.

The controls are a classroom bar on the overlay layer, the one layer
sway draws above a fullscreen window. It slides up when the pointer
reaches the bottom of the screen and hides again shortly after it
leaves. It is drawn from the dock's own stylesheet at the room's UI
scale, so it is the same surface, the same radius and the same white
icons. While hidden it only accepts the pointer in a thin strip along
the bottom edge, so a click on a disc menu goes to the disc.

The bar reaches VLC through an HTTP interface on loopback behind a
password generated per session, sending hotkey *actions* by name. That
is what makes the next part possible.

All 108 hotkeys VLC 3.0.23 defines are unset, then Space, Esc and the
arrow keys plus Enter are bound. Crop, aspect ratio, subtitles, audio
tracks and deinterlacing are no longer reachable by pressing a key at
random, and the arrow keys no longer change VLC's volume — the
television owns volume, and CEC will own it properly later.

Esc quits instead of leaving fullscreen. There is nothing to leave, and
leaving it was what stranded people on a black VLC window. Close, Eject
and Esc all ask VLC to quit and escalate to SIGTERM then SIGKILL if it
does not; when VLC exits by any route, including a crash, the session
ends and the classroom desktop comes back.

Verified against VLC 3.0.23 on Trixie: every argument accepted, every
control action accepted over the control interface, a wrong password
refused, and quit exiting cleanly. The surfaces were rendered under a
headless sway and screenshotted to check the bar against the dock.

Co-Authored-By: Claude Opus 5 <[email protected]>
2026-09-04 22:33:53 -05:00

6.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-provision shows 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.0 looks exactly as it did before scaling existed
  • UI_SCALE=1.25, then sudo systemctl restart getty@tty1: dock, icons, clock and notifications all grow together
  • UI_SCALE=0.8 shrinks 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+M minimises the focused window
  • Super+Shift+M restores 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://policy lists 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-test renders with the classroom styling: dark translucent, rounded, white text, top right
  • classroom-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-test from an SSH session displays on the classroom screen
  • sudo classroom-notify-test --dry-run reports 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.sh passes (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+M minimises 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 goes black immediately — no wallpaper, no dock, no partial VLC window at any point
  • Video or the disc menu appears inside that black surface
  • 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.sh publishes 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