diff --git a/config/overlay/style.css.in b/config/overlay/style.css.in new file mode 100644 index 0000000..3794a42 --- /dev/null +++ b/config/overlay/style.css.in @@ -0,0 +1,104 @@ +/* + * Ekklesia Classroom overlay stylesheet. + * + * This was the dock's stylesheet. The dock is gone — the Plasma panel + * replaced it — but the DVD player still draws its loading cover and its + * control bar as its own layer-shell surfaces, and they are still styled + * from here. Rules that only the dock used are left in place rather than + * pruned by eye, because the DVD session is working code and this + * experiment does not gamble it for tidiness. + */ +window#classroom-dock, +window#classroom-clock { + background-color: transparent; + background-image: none; + border: none; + box-shadow: none; +} + +/* Main floating dock */ +.dock { + background-image: none; + background-color: rgba(34, 38, 50, 0.62); + + border: 1px solid rgba(255, 255, 255, 0.08); + border-radius: @dock-radius@px; + + padding: @dock-padding-v@px @dock-padding-h@px; + + /* Important: no shadow here. + GTK was clipping it against the rectangular window edge. */ + box-shadow: none; +} + +button.dock-button { + color: white; + + background-image: none; + background-color: rgba(255, 255, 255, 0.05); + + border: none; + border-radius: @button-radius@px; + + padding: @button-padding@px; + margin: 0; + + min-width: @button-size@px; + min-height: @button-size@px; + + box-shadow: none; + outline: none; +} + +button.dock-button:hover { + background-image: none; + background-color: rgba(70, 75, 90, 0.85); + box-shadow: none; +} + +button.dock-button:active { + background-image: none; + background-color: rgba(85, 90, 108, 0.90); + box-shadow: none; +} + +button.dock-button:focus { + background-image: none; + background-color: rgba(255, 255, 255, 0.08); + box-shadow: none; + outline: none; +} + +button.dock-button image { + color: white; + -gtk-icon-effect: none; +} + +/* Shown in place of the icon while an application is starting. */ +button.dock-button spinner { + color: white; + opacity: 1; + + min-width: @button-spinner@px; + min-height: @button-spinner@px; +} + + +/* Clock */ + +.clock { + color: white; + + background-image: none; + background-color: rgba(34, 38, 50, 0.62); + + border: 1px solid rgba(255, 255, 255, 0.08); + border-radius: @clock-radius@px; + + padding: @clock-padding-v@px @clock-padding-h@px; + + font-size: @clock-font@px; + font-weight: 600; + + box-shadow: none; +} diff --git a/docs/classroom-v2-experiment.md b/docs/classroom-v2-experiment.md index defd69e..e470060 100644 --- a/docs/classroom-v2-experiment.md +++ b/docs/classroom-v2-experiment.md @@ -322,6 +322,27 @@ back from four consecutive kills. ### DVD +**How much of the DVD player survives this change was measured, not +assumed**, because the room's disc playback works and breaking it for +tidiness would be a bad trade. + +* Its loading cover and control bar are `gtk-layer-shell` surfaces. KWin + implements `zwlr_layer_shell_v1` — the Plasma panel is one — and a probe + overlay came up full-screen under it. So the DVD surfaces keep working + and `python3-gi` and `gir1.2-gtklayershell-0.1` stay in the package. + Removing them broke `classroom-dvd toggle` immediately, which is how this + was found. +* Its stylesheet was the dock's. The dock is gone; the template survives as + `config/overlay/style.css.in`, renamed to say what still uses it. +* `classroom-dvd` calls `classroom-window`, which speaks sway's IPC. + Measured with no sway running: it exits 0 and does nothing, so it + degrades rather than hanging — but the DVD player's focus handling is not + yet ported, and that is the largest piece of work this change leaves. +* One behavioural difference: under sway the loading cover hid the dock; + under KWin the panel draws above it, so the bar stays visible while a + disc spins up. Fullscreen VLC still covers everything, which is the state + that matters. + `/usr/share/solid/actions/ekklesia-dvd.desktop` with an `X-KDE-Solid-Predicate` for a video DVD. Plasma's device notifier offers "Play the DVD" while a disc is in the drive and withdraws it when the disc @@ -443,11 +464,15 @@ running · `state-4-minimized` · `state-5-restored` · `v2-testpage` a maximised browser · `v2-secondary-window` a window a page opened, floating · `v2-print-dialog` · `v2-notification-crop` · `v2-fullscreen` · `recover-panel` the bar rebuilt from nothing · `lock-desktop-rmb`, `lock-panel-rmb`, -`lock-krunner` the lockdown. +`lock-krunner` the lockdown · `v2-from-package` the desktop as installed +from the `.deb` · `v2-layershell` a gtk-layer-shell overlay under KWin, which +is what the DVD player's loading cover is made of. ## Not done, and honest about it -* **DVD end to end.** No drive in the lab. +* **DVD end to end.** The overlay surfaces and disc detection were checked; + playback was not, and the focus helper is not ported. See *the DVD + player* above. * **Real audio hardware.** Policy tested as a function; no card to apply it to. * **Video decode and performance.** Software rendering only. * **SDDM.** Recommended over the current `bash_profile` `exec`, because when @@ -458,8 +483,68 @@ the bar rebuilt from nothing · `lock-desktop-rmb`, `lock-panel-rmb`, shape the package needs but is not the package. * **Parent Call and Live View.** Placed in the architecture, not built. Live View's pin is KWin's Keep Above, which is already a title-bar button. -* **UI scale.** Plasma's own display scaling replaces `classroom-scale`; not - exercised at 1.25 or 1.5. +* **UI scale.** `classroom-scale` now asks `kscreen-doctor` instead of the + compositor, and 1.25 was applied and read back correctly. The *look* of it + could not be judged: a nested session shrinks its own canvas to the + logical size instead of keeping the display's mode, so everything got + smaller rather than larger. On a real output it does the opposite. Judge + this one on hardware. +* **Network states.** plasma-nm is in the bar and live — it correctly showed + a problem state throughout, because Docker configures the container's + interface before NetworkManager sees it and NM reports limited + connectivity for it. Online, connecting and offline transitions need a + machine whose network NetworkManager actually owns. + +## Unresolved risks + +In the order I would worry about them. + +1. **The DVD player is half-ported.** Its surfaces and its disc detection + work; its window focusing still speaks sway and silently does nothing. + A room that uses DVDs should not take this build until that is finished + and a real disc has been played. +2. **SDDM is configured and untested.** It cannot be exercised in a + container, and it is the thing that starts the session. If the config is + wrong the room boots to nothing. This is the first thing to check on a + VM or a bench machine, and it is why the checklist below starts there. +3. **No real audio hardware has been through the policy.** The decision is + well tested; applying it is not. A wrong `pactl set-card-profile` on + real hardware is a silent room. +4. **Plasma is a much larger surface than sway.** More code, more services, + more that can regress in a Debian point release. The mitigations are + that all of it is supervised, that Debian 13 is frozen apart from + security updates, and that the OTA channel structure already lets a + build be held back. But it is a real trade and it should be named. +5. **Performance is unmeasured on classroom hardware.** Everything here ran + on llvmpipe, which says nothing useful about an old office machine with + Intel graphics. Plasma with compositing is heavier than sway. +6. **Chrome remains a third-party repository.** Unchanged from today, but + still the one part of the stack Debian does not update. +7. **The wallpaper is a stand-in.** The real illustration has not been seen + against this palette. + +## Would I trust it on a classroom computer, unattended, for a Sunday? + +**For a room that does not use DVDs: yes, after the checks below.** The +reasoning is not that Plasma is nicer. It is that the four failures the +church actually reported are all failures of code we wrote, three of them +are gone because the code is gone, and the fourth — the panel disappearing +— went from *reproducible on the third crash* to *survived eight kills* and +is now a supervised system service rather than a process started by a +compositor and forgotten. + +**For a room that uses DVDs: not yet.** Finish the focus port and play a +real disc first. + +Before any room: + +1. Boot a bench machine from the package and confirm SDDM autologins, and + that killing the session brings it back rather than a shell. +2. Put a television on HDMI, switch it on after the computer, and confirm + sound arrives without touching anything, with the browser already open. +3. Print to Elmer. +4. Play a DVD, if that room uses them. +5. Leave it running from Friday to Sunday. ## Alternate operating systems diff --git a/docs/screenshots/v2-dvd-cover.png b/docs/screenshots/v2-dvd-cover.png new file mode 100644 index 0000000..c18b559 Binary files /dev/null and b/docs/screenshots/v2-dvd-cover.png differ diff --git a/docs/screenshots/v2-dvd-overlay.png b/docs/screenshots/v2-dvd-overlay.png new file mode 100644 index 0000000..3677979 Binary files /dev/null and b/docs/screenshots/v2-dvd-overlay.png differ diff --git a/docs/screenshots/v2-layershell.png b/docs/screenshots/v2-layershell.png new file mode 100644 index 0000000..73fc5b0 Binary files /dev/null and b/docs/screenshots/v2-layershell.png differ diff --git a/lib/classroom_style.py b/lib/classroom_style.py index f1f9bc3..8197dce 100644 --- a/lib/classroom_style.py +++ b/lib/classroom_style.py @@ -8,7 +8,7 @@ from pathlib import Path from classroom_config import scaled -TEMPLATE = Path("/etc/ekklesia-classroom/dock/style.css.in") +TEMPLATE = Path("/etc/ekklesia-classroom/overlay/style.css.in") # Every measurement in the template, at UI_SCALE=1.0. MEASUREMENTS = { diff --git a/packaging/debian/control.template b/packaging/debian/control.template index d17946f..6e15b78 100644 --- a/packaging/debian/control.template +++ b/packaging/debian/control.template @@ -4,7 +4,7 @@ Section: misc Priority: optional Architecture: amd64 Maintainer: Ekklesia -Depends: plasma-desktop, plasma-workspace, kwin-wayland, plasma-nm, plasma-pa, sddm, dbus-user-session, xwayland, fonts-dejavu, fonts-noto, network-manager, pipewire, pipewire-audio, wireplumber, pulseaudio-utils, cups, cups-client, cups-filters, foomatic-db-compressed-ppds, libnotify-bin, curl, gnupg, ca-certificates, python3-paho-mqtt +Depends: plasma-desktop, plasma-workspace, kwin-wayland, plasma-nm, plasma-pa, sddm, dbus-user-session, xwayland, fonts-dejavu, fonts-noto, network-manager, pipewire, pipewire-audio, wireplumber, pulseaudio-utils, cups, cups-client, cups-filters, foomatic-db-compressed-ppds, python3-gi, python3-gi-cairo, gir1.2-gtk-3.0, gir1.2-gtklayershell-0.1, libnotify-bin, curl, gnupg, ca-certificates, python3-paho-mqtt Recommends: vlc Conflicts: plasma-welcome, plasma-discover, kdeconnect, kup-backup Description: Ekklesia managed classroom environment @@ -14,6 +14,10 @@ Description: Ekklesia managed classroom environment left here is the church's own subject matter — Wonder Ink, the browser, the DVD player, the printer, the audio policy and the updater. . + python3-gi and gtk-layer-shell are still here because the DVD player + draws its own loading cover and control bar as layer-shell surfaces. + They are no longer here for a dock. + . The Conflicts line is deliberate. A welcome tour, a software centre and a phone pairing daemon are all things plasma-desktop recommends and a room a teacher walks into should not have. diff --git a/tools/build-release.sh b/tools/build-release.sh index b476179..3de1d89 100755 --- a/tools/build-release.sh +++ b/tools/build-release.sh @@ -331,6 +331,10 @@ install -Dm644 \ "$ROOT/config/icons/dvd.svg" \ "$STAGE/etc/ekklesia-classroom/icons/dvd.svg" +install -Dm644 \ + "$ROOT/config/overlay/style.css.in" \ + "$STAGE/etc/ekklesia-classroom/overlay/style.css.in" + # DVD mode control bar. for icon in media-play media-pause chapter-prev chapter-next \ disc-menu eject close; do