The room that prompted this had a television on HDMI with working PCM audio and nothing in the analog jack, and WirePlumber chose analog. A teacher who corrected it by hand then had to restart the browser before any sound came out. The policy is a pure function so it can be tested against that room rather than against a machine: an unavailable port is not a candidate, an analog port merely existing is not evidence of a cable, and an explicit AUDIO_OUTPUT overrides the lot. Twelve cases, the real room among them. The daemon follows PipeWire's own event stream rather than polling, and moves streams that are already playing, which is the part that stops a teacher having to close and reopen the browser. Co-Authored-By: Claude Opus 5 <[email protected]>
35 lines
1.3 KiB
Bash
Executable File
35 lines
1.3 KiB
Bash
Executable File
#!/bin/bash
|
|
set -euo pipefail
|
|
|
|
# The room's ordinary browser: YouTube, and anywhere else a lesson goes.
|
|
#
|
|
# It is a full browser with a tab strip and an address bar, in the room's
|
|
# own profile, so the church YouTube sign-in survives reboots and updates.
|
|
# Wonder Ink is a separate application in a separate profile and is not
|
|
# reachable from this one.
|
|
#
|
|
# There is no launch/focus/minimise/restore logic here any more. The panel
|
|
# owns that: it knows this window by StartupWMClass and does the right
|
|
# thing with a click, including telling the teacher which of those four
|
|
# states the application is in.
|
|
#
|
|
# --hide-crash-restore-bubble is what suppresses "Restore pages? Chrome
|
|
# didn't shut down correctly" after a power cut. Note the switch name: the
|
|
# older --disable-session-crashed-bubble is not present in Chrome 152 at
|
|
# all, so it would have silently done nothing.
|
|
|
|
# Not Wonder Ink. Wonder Ink is its own application in its own profile,
|
|
# and a second way in through this window would put a teacher's lesson
|
|
# session in the room's shared browser profile — the exact leak the split
|
|
# exists to prevent.
|
|
HOME_PAGE='https://www.youtube.com/'
|
|
|
|
exec google-chrome \
|
|
--ozone-platform=wayland \
|
|
--start-maximized \
|
|
--no-first-run \
|
|
--no-default-browser-check \
|
|
--password-store=basic \
|
|
--hide-crash-restore-bubble \
|
|
"${@:-$HOME_PAGE}"
|