Dakota Linux Audio Stack#
Dakota's audio stack is built from three cooperating layers: PipeWire (the audio/video server), WirePlumber (the session/policy manager), and ALSA (hardware mixer state). Each is shipped as a dedicated BuildStream element and composed into the image via elements/bluefin/deps.bst.
PipeWire#
Dakota pins PipeWire to 1.6.8, applied as a patch on top of the upstream freedesktop-sdk base element .
The patch targets elements/components/pipewire-base.bst and does two things:
- Advances the source ref from 1.4.9 to 1.6.8 (
ref: 1.6.8-0-gb741e0c74f5436f0c925f7741140db0efd32cf4e) - Disables several optional build dependencies to reduce image size and avoid pulling in heavy codec libraries:
fftw,bluez5-codec-ldac-dec,bluez5-plc-spandsp, andonnxruntime
No repository-local PipeWire configuration files exist — PipeWire's default runtime config is used as-is. Session policy is delegated entirely to WirePlumber.
WirePlumber — PC-Speaker Suppression#
The only Dakota-specific WirePlumber customization is files/wireplumber/51-disable-pcsp.conf, which adds an ALSA monitor rule to set device.disabled = true for the alsa_card.platform-pcspkr device .
Why it exists: Without this rule, the snd_pcsp kernel driver exposes the PC speaker as a PCM sink. After a suspend/resume cycle WirePlumber can select it as the fallback default sink, silencing all desktop audio (dakota#1248). The rule keeps the driver loaded (console beeps still work) while hiding the card from the audio device list .
The config is packaged by elements/bluefin/wireplumber-pcsp.bst, which installs it to:
%{datadir}/wireplumber/wireplumber.conf.d/51-disable-pcsp.conf
This element is pulled into every image build through deps.bst.
ALSA Utilities — Mixer State Persistence#
freedesktop-sdk ships alsa-lib but omits alsa-utils, which means there is no alsactl, no alsa-restore/alsa-state systemd units, and no udev restore rule. On hardware where power-on mixer defaults are muted or misrouted, this surfaces as "boots with broken sound" (dakota#1027) .
elements/bluefin/alsa-utils.bst builds alsa-utils 1.2.14 and trims it to only the mixer-state machinery :
| Kept | Dropped |
|---|---|
alsactl binary | amixer, aplay, speaker-test |
systemd alsa-restore/alsa-state units (statically enabled via sound.target.wants/) | Seq/MIDI tools, docs, translations |
udev 90-alsa-restore.rules | alsa-topology plugin |
/usr/share/alsa/init database |
Lockstep constraint:
alsa-utilsandalsa-libmust be the same version.alsa-utilsis pinned to 1.2.14 to match freedesktop-sdk'salsa-lib. Never bump them independently .
Component Map#
| Component | Source / Element | Install path |
|---|---|---|
| PipeWire 1.6.8 | patches/freedesktop-sdk/0007-Update-Pipewire-to-1.6.8.patch | (freedesktop-sdk element) |
| WirePlumber pcsp rule | elements/bluefin/wireplumber-pcsp.bst | …/wireplumber/wireplumber.conf.d/51-disable-pcsp.conf |
| ALSA mixer persistence | elements/bluefin/alsa-utils.bst | /usr/bin/alsactl, systemd units, udev rule |
| Image manifest | elements/bluefin/deps.bst | (build-time dependency graph) |
For PipeWire upstream documentation see docs.pipewire.org. For WirePlumber policy configuration refer to the WirePlumber docs.