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:
co-authored by
Claude Opus 5
parent
682e3b0552
commit
d5cc6e463f
@@ -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;
|
||||||
|
}
|
||||||
@@ -322,6 +322,27 @@ back from four consecutive kills.
|
|||||||
|
|
||||||
### DVD
|
### 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
|
`/usr/share/solid/actions/ekklesia-dvd.desktop` with an
|
||||||
`X-KDE-Solid-Predicate` for a video DVD. Plasma's device notifier offers
|
`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
|
"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 ·
|
maximised browser · `v2-secondary-window` a window a page opened, floating ·
|
||||||
`v2-print-dialog` · `v2-notification-crop` · `v2-fullscreen` · `recover-panel`
|
`v2-print-dialog` · `v2-notification-crop` · `v2-fullscreen` · `recover-panel`
|
||||||
the bar rebuilt from nothing · `lock-desktop-rmb`, `lock-panel-rmb`,
|
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
|
## 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.
|
* **Real audio hardware.** Policy tested as a function; no card to apply it to.
|
||||||
* **Video decode and performance.** Software rendering only.
|
* **Video decode and performance.** Software rendering only.
|
||||||
* **SDDM.** Recommended over the current `bash_profile` `exec`, because when
|
* **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.
|
shape the package needs but is not the package.
|
||||||
* **Parent Call and Live View.** Placed in the architecture, not built. Live
|
* **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.
|
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
|
* **UI scale.** `classroom-scale` now asks `kscreen-doctor` instead of the
|
||||||
exercised at 1.25 or 1.5.
|
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
|
## 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 |
@@ -8,7 +8,7 @@ from pathlib import Path
|
|||||||
|
|
||||||
from classroom_config import scaled
|
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.
|
# Every measurement in the template, at UI_SCALE=1.0.
|
||||||
MEASUREMENTS = {
|
MEASUREMENTS = {
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ Section: misc
|
|||||||
Priority: optional
|
Priority: optional
|
||||||
Architecture: amd64
|
Architecture: amd64
|
||||||
Maintainer: Ekklesia
|
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
|
Recommends: vlc
|
||||||
Conflicts: plasma-welcome, plasma-discover, kdeconnect, kup-backup
|
Conflicts: plasma-welcome, plasma-discover, kdeconnect, kup-backup
|
||||||
Description: Ekklesia managed classroom environment
|
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,
|
left here is the church's own subject matter — Wonder Ink, the browser,
|
||||||
the DVD player, the printer, the audio policy and the updater.
|
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
|
The Conflicts line is deliberate. A welcome tour, a software centre and
|
||||||
a phone pairing daemon are all things plasma-desktop recommends and a
|
a phone pairing daemon are all things plasma-desktop recommends and a
|
||||||
room a teacher walks into should not have.
|
room a teacher walks into should not have.
|
||||||
|
|||||||
@@ -331,6 +331,10 @@ install -Dm644 \
|
|||||||
"$ROOT/config/icons/dvd.svg" \
|
"$ROOT/config/icons/dvd.svg" \
|
||||||
"$STAGE/etc/ekklesia-classroom/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.
|
# DVD mode control bar.
|
||||||
for icon in media-play media-pause chapter-prev chapter-next \
|
for icon in media-play media-pause chapter-prev chapter-next \
|
||||||
disc-menu eject close; do
|
disc-menu eject close; do
|
||||||
|
|||||||
Reference in New Issue
Block a user