fix: keep the DVD player whole

Removing gtk-layer-shell from the dependencies broke classroom-dvd on the
first run, and deleting the dock's stylesheet took the DVD control bar's
styling with it. Both go back: the template under a name that says what
still uses it, and the dependency with a line in the package description
explaining that it is there for the disc player and not for a dock.

A probe overlay confirms gtk-layer-shell works under KWin, so the loading
cover survives the move. The focus helper still speaks sway, which is
written down rather than papered over.

Co-Authored-By: Claude Opus 5 <[email protected]>
This commit is contained in:
ekklesia
2026-09-10 09:10:08 -05:00
co-authored by Claude Opus 5
parent 682e3b0552
commit d5cc6e463f
8 changed files with 203 additions and 6 deletions
+104
View File
@@ -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;
}
+89 -4
View File
@@ -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
Binary file not shown.

After

Width:  |  Height:  |  Size: 251 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 252 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

+1 -1
View File
@@ -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 = {
+5 -1
View File
@@ -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.
+4
View File
@@ -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