A ~30-minute install is a long time staring at a progress bar in silence. A quiet background loop
would make the medium feel finished. Nice-to-have, explicitly behind anything that affects whether
an install works.
What the medium has today: nothing
install/manifest.lock carries exactly one audio-adjacent row — libpipewire, the client library,
pulled in transitively by gamescope's own depends. It is not sound; you can watch it fail
harmlessly in any installer log:
[gamescope] [Error] pipewire: pw_loop_new failed
Warning: failed to setup PipeWire, screen capture won't be available
The shipped device image has nine, for contrast:
alsa-card-profiles alsa-lib alsa-topology-conf alsa-ucm-conf
pipewire pipewire-alsa pipewire-audio pipewire-pulse wireplumber
So the UCM is not on the installer medium.
Do NOT bring PipeWire/WirePlumber
WirePlumber wants a user session and the installer deliberately has none — no logind, no
/run/user/0. That is precisely the XDG_RUNTIME_DIR trap that has already cost two hardware
slots (gamescope got seatd, DRM master, Turnip and DSI-1, then aborted on its wayland socket). Do
not re-enter that class of problem for background music.
Plain ALSA instead: alsa-utils + alsa-lib + alsa-ucm-conf, three packages, no daemons.
The part that is not obvious: aplay alone makes no sound here
alsa-ucm-conf only SHIPS the use-case configs. Something has to apply them, and on the device that
something is WirePlumber — the very thing being dropped. With plain ALSA it has to be explicit:
alsaucm -c <card> set _verb HiFi # alsa-utils. Without it the codec path is never set up.
amixer -c <card> sset ... unmute # gains
aplay -q /usr/share/novadeck/install/loop.wav
Skipping the alsaucm step looks exactly like "this board has no audio hardware", which is how an
afternoon disappears.
Shape
- A separate unit, not a UI child.
Wants= (never Requires=) off the installer session, so a
wedged audio path cannot touch the thing that installs a disk. install/ui already runs three
children (SpineRun, NetJoin, VerifyRun) and this one has no reason to be a fourth.
aplay cannot loop or decode. WAV only: while :; do aplay -q loop.wav; done, with a small
gap per iteration. 22 kHz mono is ~44 KB/s, so a 3-minute loop is ~8 MB against a 2.1 GB medium;
44.1 kHz stereo is ~32 MB and still fine.
- Every step guarded so SILENCE is the failure mode, never a hang. This is the tool that has to
work when everything else on the device is broken. A SoundWire wedge needs a REBOOT to clear on
these boards, and paying that during a 30-minute install would be a bad trade for ambience.
- Music licensing has to be settled before anything is staged into
mkimage.sh — the medium is
published.
Check first
Confirm alsa-utils actually resolves in the holo repos before committing to the design.
python-pygame and gtk2 both turned out not to exist there — which is why the SDL binding arrives
as a pinned wheel (install/pygame-ce.pin). make relock-installer is what answers it.
Related
A ~30-minute install is a long time staring at a progress bar in silence. A quiet background loop
would make the medium feel finished. Nice-to-have, explicitly behind anything that affects whether
an install works.
What the medium has today: nothing
install/manifest.lockcarries exactly one audio-adjacent row —libpipewire, the client library,pulled in transitively by gamescope's own depends. It is not sound; you can watch it fail
harmlessly in any installer log:
The shipped device image has nine, for contrast:
So the UCM is not on the installer medium.
Do NOT bring PipeWire/WirePlumber
WirePlumber wants a user session and the installer deliberately has none — no logind, no
/run/user/0. That is precisely theXDG_RUNTIME_DIRtrap that has already cost two hardwareslots (gamescope got seatd, DRM master, Turnip and DSI-1, then aborted on its wayland socket). Do
not re-enter that class of problem for background music.
Plain ALSA instead:
alsa-utils+alsa-lib+alsa-ucm-conf, three packages, no daemons.The part that is not obvious: aplay alone makes no sound here
alsa-ucm-confonly SHIPS the use-case configs. Something has to apply them, and on the device thatsomething is WirePlumber — the very thing being dropped. With plain ALSA it has to be explicit:
Skipping the
alsaucmstep looks exactly like "this board has no audio hardware", which is how anafternoon disappears.
Shape
Wants=(neverRequires=) off the installer session, so awedged audio path cannot touch the thing that installs a disk.
install/uialready runs threechildren (SpineRun, NetJoin, VerifyRun) and this one has no reason to be a fourth.
aplaycannot loop or decode. WAV only:while :; do aplay -q loop.wav; done, with a smallgap per iteration. 22 kHz mono is ~44 KB/s, so a 3-minute loop is ~8 MB against a 2.1 GB medium;
44.1 kHz stereo is ~32 MB and still fine.
work when everything else on the device is broken. A SoundWire wedge needs a REBOOT to clear on
these boards, and paying that during a 30-minute install would be a bad trade for ambience.
mkimage.sh— the medium ispublished.
Check first
Confirm
alsa-utilsactually resolves in the holo repos before committing to the design.python-pygameandgtk2both turned out not to exist there — which is why the SDL binding arrivesas a pinned wheel (
install/pygame-ce.pin).make relock-installeris what answers it.Related
inherit exactly that, on a screen with no volume control. Worth fixing there first, or this ships
inaudible on some boards and not others.
gets fixed the install may be short enough that the whole idea is moot, which is a good reason to
leave this until after it.