Three things a volunteer should never have to see. Sway was drawing its own title bar above Chrome's tab strip, which already carries the window controls. Verified on a real session: Chrome is an xdg_shell client with app_id "google-chrome" and sway was giving it border "normal". A scoped rule removes the compositor decoration only — Chrome keeps its tabs and address bar, stays a normal window, and still maximises and minimises. A class rule covers an XWayland fallback. Nothing else changes: the only other window in this classroom is VLC, which is already borderless, so no broader rule is warranted. "Restore pages? Chrome didn't shut down correctly" is suppressed with --hide-crash-restore-bubble. Note the name. The switch this was going to use, --disable-session-crashed-bubble, is not present in Chrome 152 at all — checked against the strings of the installed binary — so it would have silently done nothing. That hides the prompt; the profile was still being marked as crashed, which is the untidy half. Chrome's browser process shuts down cleanly on SIGTERM, so a shutdown unit now gives it one and waits up to eight seconds before the session is torn out from under it. Best effort by construction: a shutdown that will not finish is far worse than a crash flag. Password prompts go off with the PasswordManagerEnabled policy, on the path the classroom already manages. Existing profile and session data are untouched, and website logins are unaffected: Wonder Ink and YouTube stay signed in. Co-Authored-By: Claude Opus 5 <[email protected]>
100 lines
3.2 KiB
Bash
Executable File
100 lines
3.2 KiB
Bash
Executable File
#!/bin/bash
|
|
set -e
|
|
|
|
if ! id classroom >/dev/null 2>&1; then
|
|
adduser \
|
|
--disabled-password \
|
|
--gecos "" \
|
|
classroom
|
|
fi
|
|
|
|
cat > /home/classroom/.bash_profile <<'PROFILE'
|
|
if [ -z "$WAYLAND_DISPLAY" ] && [ "${XDG_VTNR:-}" = "1" ]; then
|
|
exec sway -c /etc/ekklesia-classroom/sway/config
|
|
fi
|
|
PROFILE
|
|
|
|
chown classroom:classroom /home/classroom/.bash_profile
|
|
chmod 0644 /home/classroom/.bash_profile
|
|
|
|
chmod 0755 /usr/local/bin/classroom-browser
|
|
chmod 0755 /usr/local/bin/classroom-window
|
|
chmod 0755 /usr/local/bin/classroom-dvd
|
|
chmod 0755 /usr/local/bin/classroom-dvd-session
|
|
chmod 0755 /usr/local/bin/classroom-dvd-css-setup
|
|
chmod 0755 /usr/local/bin/classroom-notify-test
|
|
chmod 0755 /usr/local/bin/classroom-notifications
|
|
chmod 0755 /usr/local/bin/classroom-scale
|
|
chmod 0755 /usr/local/bin/classroom-shutdown
|
|
chmod 0755 /usr/local/bin/classroom-chrome-setup
|
|
chmod 0755 /usr/local/bin/classroom-provision
|
|
|
|
# Reading the optical drive needs group cdrom. Takes effect at the next
|
|
# login, which the OTA reboot provides.
|
|
if getent group cdrom >/dev/null 2>&1; then
|
|
adduser classroom cdrom >/dev/null 2>&1 || true
|
|
fi
|
|
|
|
if [ ! -f /etc/ekklesia-classroom/device.conf ]; then
|
|
cat > /etc/ekklesia-classroom/device.conf <<'CONFIG'
|
|
# Ekklesia Classroom device configuration
|
|
|
|
UPDATE_URL=https://updates.riverofglorymn.org
|
|
CHANNEL=stable
|
|
|
|
# Set to true on classrooms that have a DVD drive.
|
|
DVD_ENABLED=false
|
|
|
|
# Size of the dock, clock and notifications, 0.8 to 1.5.
|
|
# Larger rooms and larger TVs want a larger number.
|
|
UI_SCALE=1.0
|
|
CONFIG
|
|
|
|
chmod 0644 /etc/ekklesia-classroom/device.conf
|
|
fi
|
|
|
|
# Make the settings discoverable on classrooms installed before they
|
|
# existed. Both defaults are what those rooms already do, so nothing
|
|
# about their behaviour changes.
|
|
if ! grep -q '^DVD_ENABLED=' /etc/ekklesia-classroom/device.conf; then
|
|
cat >> /etc/ekklesia-classroom/device.conf <<'CONFIG'
|
|
|
|
# Set to true on classrooms that have a DVD drive.
|
|
DVD_ENABLED=false
|
|
CONFIG
|
|
fi
|
|
|
|
if ! grep -q '^UI_SCALE=' /etc/ekklesia-classroom/device.conf; then
|
|
cat >> /etc/ekklesia-classroom/device.conf <<'CONFIG'
|
|
|
|
# Size of the dock, clock and notifications, 0.8 to 1.5.
|
|
# Larger rooms and larger TVs want a larger number.
|
|
UI_SCALE=1.0
|
|
CONFIG
|
|
fi
|
|
|
|
systemctl daemon-reload || true
|
|
|
|
systemctl enable ekklesia-classroom-update.timer || true
|
|
systemctl start ekklesia-classroom-update.timer || true
|
|
|
|
# Google Chrome, and the DVD codecs when the room has a drive, are
|
|
# fetched by the provisioning service at the next boot.
|
|
#
|
|
# Deliberately enabled but not started here. It cannot run during this
|
|
# script anyway, because dpkg holds the apt lock throughout. Starting it
|
|
# straight afterwards would race the reboot that an OTA update performs
|
|
# the moment this install finishes, and an apt run killed by that reboot
|
|
# leaves dpkg half-configured. Every OTA reboots, so waiting for the next
|
|
# boot costs nothing and cannot corrupt anything.
|
|
#
|
|
# A failure there must never fail this installation.
|
|
systemctl enable ekklesia-classroom-provision.service || true
|
|
|
|
# Gives Chrome a chance to close properly on reboot, so its profile is
|
|
# not marked as crashed. Best effort: it must never hold a shutdown up.
|
|
systemctl enable ekklesia-classroom-shutdown.service || true
|
|
systemctl start ekklesia-classroom-shutdown.service || true
|
|
|
|
exit 0
|