build: package the desktop instead of the shell
The install list loses the dock, the window helper, the Chrome window arbiter, the notification wrapper, the compositor and bar configs and the GTK icon and stylesheet machinery, and gains a look and feel package, a colour scheme, window rules, Kiosk restrictions and two supervised user services. Dependencies follow: Plasma and SDDM in, sway, waybar, mako and gtk-layer-shell out. Co-Authored-By: Claude Opus 5 <[email protected]>
This commit is contained in:
co-authored by
Claude Opus 5
parent
d87990f0ac
commit
6e4786f448
+85
-61
@@ -79,31 +79,15 @@ install -m755 \
|
||||
"$ROOT/packaging/debian/postinst" \
|
||||
"$STAGE/DEBIAN/postinst"
|
||||
|
||||
# Classroom UI configuration.
|
||||
install -Dm644 \
|
||||
"$ROOT/config/sway/config" \
|
||||
"$STAGE/etc/ekklesia-classroom/sway/config"
|
||||
|
||||
install -Dm644 \
|
||||
"$ROOT/config/waybar/config.jsonc" \
|
||||
"$STAGE/etc/ekklesia-classroom/waybar/config.jsonc"
|
||||
|
||||
install -Dm644 \
|
||||
"$ROOT/config/waybar/style.css" \
|
||||
"$STAGE/etc/ekklesia-classroom/waybar/style.css"
|
||||
|
||||
# Classroom commands.
|
||||
install -Dm755 \
|
||||
"$ROOT/scripts/classroom-browser" \
|
||||
"$STAGE/usr/local/bin/classroom-browser"
|
||||
|
||||
install -Dm755 \
|
||||
"$ROOT/scripts/classroom-chrome-windows" \
|
||||
"$STAGE/usr/local/bin/classroom-chrome-windows"
|
||||
|
||||
install -Dm755 \
|
||||
"$ROOT/scripts/classroom-window" \
|
||||
"$STAGE/usr/local/bin/classroom-window"
|
||||
|
||||
install -Dm755 \
|
||||
"$ROOT/scripts/classroom-dvd" \
|
||||
@@ -117,21 +101,12 @@ install -Dm755 \
|
||||
"$ROOT/scripts/classroom-dvd-css-setup" \
|
||||
"$STAGE/usr/local/bin/classroom-dvd-css-setup"
|
||||
|
||||
install -Dm755 \
|
||||
"$ROOT/scripts/classroom-notify" \
|
||||
"$STAGE/usr/local/bin/classroom-notify"
|
||||
|
||||
install -Dm755 \
|
||||
"$ROOT/scripts/classroom-notify-test" \
|
||||
"$STAGE/usr/local/bin/classroom-notify-test"
|
||||
|
||||
install -Dm755 \
|
||||
"$ROOT/scripts/classroom-mqtt" \
|
||||
"$STAGE/usr/local/bin/classroom-mqtt"
|
||||
|
||||
install -Dm755 \
|
||||
"$ROOT/scripts/classroom-notifications" \
|
||||
"$STAGE/usr/local/bin/classroom-notifications"
|
||||
|
||||
install -Dm755 \
|
||||
"$ROOT/scripts/classroom-scale" \
|
||||
@@ -162,47 +137,24 @@ install -Dm644 \
|
||||
"$ROOT/lib/classroom_chrome.py" \
|
||||
"$STAGE/usr/local/lib/ekklesia-classroom/classroom_chrome.py"
|
||||
|
||||
install -Dm644 \
|
||||
"$ROOT/lib/classroom_icons.py" \
|
||||
"$STAGE/usr/local/lib/ekklesia-classroom/classroom_icons.py"
|
||||
|
||||
install -Dm644 \
|
||||
"$ROOT/lib/classroom_mqtt.py" \
|
||||
"$STAGE/usr/local/lib/ekklesia-classroom/classroom_mqtt.py"
|
||||
|
||||
install -Dm644 \
|
||||
"$ROOT/lib/classroom_style.py" \
|
||||
"$STAGE/usr/local/lib/ekklesia-classroom/classroom_style.py"
|
||||
|
||||
install -Dm644 \
|
||||
"$ROOT/lib/classroom_sway.py" \
|
||||
"$STAGE/usr/local/lib/ekklesia-classroom/classroom_sway.py"
|
||||
|
||||
install -Dm644 \
|
||||
"$ROOT/lib/classroom_vlc.py" \
|
||||
"$STAGE/usr/local/lib/ekklesia-classroom/classroom_vlc.py"
|
||||
|
||||
install -Dm644 \
|
||||
"$ROOT/lib/classroom_optical.py" \
|
||||
"$STAGE/usr/local/lib/ekklesia-classroom/classroom_optical.py"
|
||||
|
||||
install -Dm644 \
|
||||
"$ROOT/config/wallpapers/classroom-default.png" \
|
||||
"$STAGE/usr/share/backgrounds/ekklesia/classroom-default.png"
|
||||
"$ROOT/config/wallpapers/classroom-calm.png" \
|
||||
"$STAGE/usr/share/backgrounds/ekklesia/classroom-calm.png"
|
||||
|
||||
install -Dm755 \
|
||||
"$ROOT/scripts/classroom-dock" \
|
||||
"$STAGE/usr/local/bin/classroom-dock"
|
||||
|
||||
# Stylesheet and notification templates. Both carry measurement tokens
|
||||
# that are resolved from UI_SCALE when the session starts.
|
||||
install -Dm644 \
|
||||
"$ROOT/config/dock/style.css.in" \
|
||||
"$STAGE/etc/ekklesia-classroom/dock/style.css.in"
|
||||
|
||||
install -Dm644 \
|
||||
"$ROOT/config/mako/config.in" \
|
||||
"$STAGE/etc/ekklesia-classroom/mako/config.in"
|
||||
|
||||
# Chrome enterprise policy: suppress first-run and sign-in nags, and pin
|
||||
# Home to Wonder Ink. Nothing here restricts where teachers can browse.
|
||||
@@ -220,8 +172,8 @@ install -Dm755 \
|
||||
|
||||
# System configuration.
|
||||
install -Dm644 \
|
||||
"$ROOT/systemd/autologin/autologin.conf" \
|
||||
"$STAGE/etc/systemd/system/[email protected]/autologin.conf"
|
||||
"$ROOT/config/sddm/ekklesia-classroom.conf" \
|
||||
"$STAGE/etc/sddm.conf.d/ekklesia-classroom.conf"
|
||||
|
||||
install -Dm644 \
|
||||
"$ROOT/systemd/updater/ekklesia-classroom-update.service" \
|
||||
@@ -243,21 +195,93 @@ install -Dm644 \
|
||||
"$ROOT/systemd/mqtt/ekklesia-classroom-mqtt.service" \
|
||||
"$STAGE/etc/systemd/system/ekklesia-classroom-mqtt.service"
|
||||
|
||||
install -Dm644 \
|
||||
"$ROOT/config/icons/dvd.svg" \
|
||||
"$STAGE/etc/ekklesia-classroom/icons/dvd.svg"
|
||||
|
||||
|
||||
|
||||
|
||||
# The classroom desktop.
|
||||
#
|
||||
# Not a shell, and not a daemon: a Plasma session described in files Plasma
|
||||
# already reads. The panel, the window behaviour, the notifications, the
|
||||
# lockdown and the palette are all in here, which is why there is no longer
|
||||
# a dock, a window helper, a notification wrapper or a compositor config in
|
||||
# the list above.
|
||||
|
||||
for setting in kdeglobals kwinrc kwinrulesrc kscreenlockerrc ksmserverrc \
|
||||
krunnerrc plasmanotifyrc; do
|
||||
install -Dm644 \
|
||||
"$ROOT/config/plasma/xdg/${setting}" \
|
||||
"$STAGE/etc/xdg/${setting}"
|
||||
done
|
||||
|
||||
for scheme in EkklesiaDark EkklesiaLight; do
|
||||
install -Dm644 \
|
||||
"$ROOT/config/plasma/colors/${scheme}.colors" \
|
||||
"$STAGE/usr/share/color-schemes/${scheme}.colors"
|
||||
done
|
||||
|
||||
LOOK="$STAGE/usr/share/plasma/look-and-feel/org.ekklesia.classroom.desktop"
|
||||
|
||||
install -Dm644 \
|
||||
"$ROOT/config/icons/live.svg" \
|
||||
"$STAGE/etc/ekklesia-classroom/icons/live.svg"
|
||||
"$ROOT/config/plasma/lookandfeel/metadata.json" \
|
||||
"$LOOK/metadata.json"
|
||||
|
||||
install -Dm644 \
|
||||
"$ROOT/config/icons/live-off.svg" \
|
||||
"$STAGE/etc/ekklesia-classroom/icons/live-off.svg"
|
||||
"$ROOT/config/plasma/lookandfeel/contents/defaults" \
|
||||
"$LOOK/contents/defaults"
|
||||
|
||||
install -Dm644 \
|
||||
"$ROOT/config/icons/browser.svg" \
|
||||
"$STAGE/etc/ekklesia-classroom/icons/browser.svg"
|
||||
"$ROOT/config/plasma/lookandfeel/contents/layouts/org.kde.plasma.desktop-layout.js" \
|
||||
"$LOOK/contents/layouts/org.kde.plasma.desktop-layout.js"
|
||||
|
||||
for entry in "$ROOT"/config/plasma/applications/*.desktop; do
|
||||
install -Dm644 "$entry" \
|
||||
"$STAGE/usr/share/applications/$(basename "$entry")"
|
||||
done
|
||||
|
||||
# Shadows Chrome's own entry. XDG_DATA_DIRS searches /usr/local/share first,
|
||||
# so the panel matches a Chrome window to this launcher instead of to
|
||||
# Chrome's, and the room gets one button rather than two.
|
||||
for entry in "$ROOT"/config/plasma/applications-local/*.desktop; do
|
||||
install -Dm644 "$entry" \
|
||||
"$STAGE/usr/local/share/applications/$(basename "$entry")"
|
||||
done
|
||||
|
||||
install -Dm644 \
|
||||
"$ROOT/config/plasma/solid/ekklesia-dvd.desktop" \
|
||||
"$STAGE/usr/share/solid/actions/ekklesia-dvd.desktop"
|
||||
|
||||
for icon in ekklesia-wonderink ekklesia-parent-call; do
|
||||
install -Dm644 \
|
||||
"$ROOT/config/icons/${icon}.svg" \
|
||||
"$STAGE/usr/share/icons/hicolor/scalable/apps/${icon}.svg"
|
||||
done
|
||||
|
||||
# The panel is the only way a teacher has of getting anywhere. Plasma gives
|
||||
# up restarting it after three crashes in a minute; this does not.
|
||||
install -Dm644 \
|
||||
"$ROOT/systemd/user/plasma-plasmashell.service.d/ekklesia-classroom.conf" \
|
||||
"$STAGE/etc/systemd/user/plasma-plasmashell.service.d/ekklesia-classroom.conf"
|
||||
|
||||
install -Dm644 \
|
||||
"$ROOT/systemd/user/ekklesia-classroom-audio.service" \
|
||||
"$STAGE/etc/systemd/user/ekklesia-classroom-audio.service"
|
||||
|
||||
install -Dm755 \
|
||||
"$ROOT/scripts/classroom-wonderink" \
|
||||
"$STAGE/usr/local/bin/classroom-wonderink"
|
||||
|
||||
install -Dm755 \
|
||||
"$ROOT/scripts/classroom-audio" \
|
||||
"$STAGE/usr/local/bin/classroom-audio"
|
||||
|
||||
install -Dm755 \
|
||||
"$ROOT/scripts/classroom-theme" \
|
||||
"$STAGE/usr/local/bin/classroom-theme"
|
||||
|
||||
install -Dm644 \
|
||||
"$ROOT/lib/classroom_audio.py" \
|
||||
"$STAGE/usr/local/lib/ekklesia-classroom/classroom_audio.py"
|
||||
|
||||
# DVD mode control bar.
|
||||
for icon in media-play media-pause chapter-prev chapter-next \
|
||||
|
||||
@@ -76,3 +76,15 @@ RUN apt-get update && apt-get install -y --no-install-recommends \
|
||||
# pointer to be clicked with.
|
||||
RUN apt-get update && apt-get install -y --no-install-recommends seatd \
|
||||
&& rm -rf /var/lib/apt/lists/*
|
||||
|
||||
# What a classroom would not install.
|
||||
#
|
||||
# plasma-desktop recommends a welcome tour, a software centre, a phone
|
||||
# pairing daemon and a backup tool. None of them belong in a room a teacher
|
||||
# walks into, and a classroom package would simply not pull them in; the lab
|
||||
# removes them so it is testing the same desktop.
|
||||
RUN DEBIAN_FRONTEND=noninteractive apt-get purge -y \
|
||||
plasma-welcome plasma-discover plasma-discover-common \
|
||||
plasma-discover-backend-fwupd kdeconnect kup-backup \
|
||||
&& apt-get autoremove -y \
|
||||
&& rm -rf /var/lib/apt/lists/*
|
||||
|
||||
Reference in New Issue
Block a user