Files
Classroom_Desktop/docs/ui-scale.md
T
ekklesiaandClaude Opus 5.5 48b3097c43 feat: a lesson in Wonder Ink is the size the browser shows it, and zooms
Teachers found lessons in Wonder Ink too small next to the ordinary
browser. Measured by asking each page for devicePixelRatio: Wonder Ink
follows the display scale exactly (dpr 1.5 at 150%), and Chrome is
scaled TWICE (dpr 2.25) — under Plasma it follows the compositor itself
and classroom-browser also forces UI_SCALE, a flag from the sway session.

The browser is left as it is. Wonder Ink's pages start at zoom =
UI_SCALE, the room's own number (1.0 at 100%), and measured afterwards
match the browser: dpr 2.25 and 853 px against 2.25 and 854. The window
is not zoomed; Qt scales it once, correctly.

Ctrl+Plus/=/keypad, Ctrl+Minus, Ctrl+0, Ctrl+wheel and the right-click
menu set one level for every tab, remembered as LEVEL= in its own file,
relative to the room. Two actions on one key are ambiguous to Qt and it
then does neither — Ctrl+Minus did nothing until each command became one
action with all its keys, which also fixes Ctrl+Shift+Tab.

The engine profile is built by one function, which the lab's checks now
use: a check with its own profile showed every worksheet blank.

The lab fences 10.10.0.0/16 as well: the development host reaches the
real Elmer over Tailscale, and the lab provisions a queue pointing at it.
Four lab checks written for older code are corrected; one had failed on
every run since 0.2.3.

tools/lab/wonderink-zoom-check: 18 checks. Lab: converged 120, print 39,
worksheets 24, all passing.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-09-23 19:04:58 -05:00

3.6 KiB
Raw Blame History

Classroom display size (Plasma v2)

Each room keeps its own UI_SCALE in /etc/ekklesia-classroom/device.conf. Package upgrades preserve the value. Plasma applies it at every classroom login. Native display resolution is unchanged.

Administrator setting

On the classroom keyboard press Meta+Ctrl+Alt+Shift+D to open Display size. It is hidden from application lists and the teacher's panel. Saving requires administrator authentication through polkit; the keyboard shortcut grants no privilege. Choose a percentage and press Save and apply. Canceling the password prompt leaves the saved setting unchanged.

Start at 200% for a 4K TV, which gives 1920×1080 logical space while retaining 3840×2160 output. The offered values are 100, 125, 150, 175, 200, 225, 250 and 300%. The choice applies to all connected, enabled displays on that classroom computer.

For SSH administration, the fixed-purpose helper can also be run as root:

sudo /usr/local/bin/classroom-set-scale 2

It writes only UI_SCALE, preserving room configuration, broker credentials and file ownership and permissions. The new size takes effect at the next classroom login, or by running classroom-scale inside the classroom's graphical session. The hidden window saves and applies in one operation.

Implementation and validation limits

classroom-scale uses kscreen-doctor; the login autostart runs only in KDE and the script applies only to the classroom account. Values read from older/manual configurations remain clamped to 0.8–3.0; invalid/nonfinite values become 1.0. The helper accepts only the window's predefined choices, takes no paths, and writes the root-owned settings file atomically. Polkit requires auth_admin for every save, with no retained authorization.

Hardware checks required: shortcut registration, administrator authentication, 200% at 4K, logout/reboot persistence, and Chrome/Parent Call/DVD sizing. XWayland applications may be softer than native Wayland applications when scaled.

Wallpaper in the v2 package

The approved background source is config/wallpapers/classroom-calm.png. The package installs it at /usr/share/backgrounds/ekklesia/classroom-calm.png, the path used by the packaged Plasma layout. The layout is rebuilt at login, so upgraded classrooms receive the package wallpaper without per-room copying.

What the one number reaches

classroom-ui-scale prints it, clamped, and everything that cannot read the display scale for itself asks that command rather than the file:

  • Plasma — the panel, the clock, notifications, the volume display and every dialog, because classroom-scale sets it as the display's scale through kscreen-doctor at every login.
  • Chrome — --force-device-scale-factor, because Chrome on the sway session was measured not to follow the compositor's output scale on its own. Under Plasma it does, so this is now a second scaling: measured at 150%, Chrome's pages report devicePixelRatio 2.25, not 1.5. Left as it is in 0.2.6.1 because it is the size teachers know; see wonder-ink.md.
  • Wonder Ink — its window follows the compositor as every Qt application does, and its pages start at a zoom of UI_SCALE, so a lesson is the size the browser shows it.
  • The disc player's own surfaces — they are measured in the logical pixels the compositor is already scaling, so they follow without being told.

The clock is the one thing that used to be left behind. It was pinned at 15 points, which is the same 15 points at every scale, and on a 4K television it was a clock nobody at the back of the room could read. It is sized by the bar now.