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]>
75 lines
3.6 KiB
Markdown
75 lines
3.6 KiB
Markdown
# 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.md#how-large-a-lesson-is).
|
||
* **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.
|