Regression in 25.10: No audio devices in PipeWire/WirePlumber; ALSA/SOF ok, only “Dummy Output” shown
| Affects | Status | Importance | Assigned to | Milestone | |
|---|---|---|---|---|---|
| alsa-ucm-conf (Ubuntu) |
Triaged
|
Undecided
|
Unassigned | ||
Bug Description
# Summary
After upgrading from **Ubuntu 25.04 (kernel 6.14)** to **Ubuntu 25.10 “questing” (kernel 6.17.0-6-generic)** on a **Lenovo ThinkPad X9-14 Gen 1 (Lunar Lake, SOF/SoundWire, Cirrus cs42l43 + cs35l56)**, audio devices disappeared from GNOME (“Dummy Output” / no input devices). ALSA enumerated the hardware, SOF firmware/topology loaded, but **PipeWire/
---
## System
* Hardware: Lenovo ThinkPad X9-14 Gen 1 (21QA001PGE), Lunar Lake
* DMI: `LENOVO_
* OS: Ubuntu 25.10 (questing)
* Kernel: `6.17.0-6-generic #6-Ubuntu SMP PREEMPT_DYNAMIC Tue Oct 7 13:34:17 UTC 2025 x86_64`
* Audio stack initially: PipeWire 1.4.7 + WirePlumber 0.5.10 + libspa 1.4.7
* SOF firmware/topology present (IPC4 LNL):
```
/lib/
/lib/
```
* UCM present: `alsa-ucm-conf` (UCM card shows `LENOVO-
---
## Symptoms (post-upgrade)
* GNOME Settings: only **Dummy Output**, no input devices.
* PipeWire: `wpctl status` shows only `auto_null`; no ALSA devices.
* ALSA works:
```
aplay -l
card 0: sofsoundwire, device 2: Speaker
...
arecord -l
card 0: sofsoundwire, device 10: DMIC Raw
```
* /dev/snd ACLs OK (user has rw via ACL).
---
## Relevant kernel/boot log excerpts
```
sof-audio-
cs35l56 ... DSP1: ... v3.11.28 ... Calibration applied
alsactl: set_control: ... 'cs42l43 Jack Override' : Device or resource busy
sof_sdw: hda_dsp_
```
No hard kernel/firmware errors; SOF topology loads.
---
## Diagnostics and findings
1. **PipeWire stack initially incomplete/
* `libpipewire-0.3-0` not installed (25.10 uses **`libpipewire-
```
sudo apt install --reinstall libpipewire-
```
* After reinstall, files existed:
```
/usr/
/usr/
/usr/
```
2. **WirePlumber didn’t load ALSA monitor**
* Package layout: `wireplumber` installed **scripts in** `/usr/share/
* User overrides attempting to load `monitors/alsa.lua` (both legacy `scripts=
3. **PipeWire protocol issue observed transiently**
* Foreground WP run showed:
```
E core_new: can't find protocol 'PipeWire:
Failed to connect to PipeWire
```
Reinstalling pipewire + removing user overrides fixed the protocol error, but **ALSA devices still not created**.
4. **No PipeWire ALSA modules present for direct nodes**
* `libpipewire-
5. **ALSA functional evidence**
* `speaker-test -D hw:0,2 ...` and
* `arecord -D plughw:0,10 ... && aplay ...` both worked → kernel, SOF, UCM, devices OK.
6. **Attempt to revert to PulseAudio**
* Installed PulseAudio and removed `pipewire-audio`:
```
sudo apt install pulseaudio pulseaudio-utils pavucontrol
```
* Initially only `auto_null` in PulseAudio (udev detection race).
---
## Working solution (current)
**Switch to PulseAudio and load ALSA devices manually**:
1. Load modules manually (interactive test):
```bash
# sink: speakers at hw:0,2
pactl load-module module-alsa-sink device=hw:0,2 sink_name=spk
# source: DMIC at plughw:0,10 (rate/format fixed; timer-sched off)
pactl load-module module-alsa-source device=plughw:0,10 source_name=dmic tsched=0 rate=48000 channels=2 format=s16le
pactl set-default-sink spk
pactl set-default-source dmic
```
After this, output and mic worked immediately; `arecord` and GNOME input meter were OK.
2. Make the setup persistent:
**Option A (used): user path-unit triggered by PulseAudio socket**
* Helper script (`~/.local/
```bash
#!/usr/bin/env bash
set -u
# wait for PulseAudio to be ready
for i in {1..15}; do pactl info >/dev/null 2>&1 && break; sleep 1; done
pactl info >/dev/null 2>&1 || pulseaudio --start >/dev/null 2>&1 || true; sleep 2
# ensure sink & source exist
pactl list short sinks | awk '{print $2}' | grep -qx spk || pactl load-module module-alsa-sink device=hw:0,2 sink_name=spk >/dev/null 2>&1 || true
pactl list short sources | awk '{print $2}' | grep -qx dmic || pactl load-module module-alsa-source device=plughw:0,10 source_name=dmic tsched=0 rate=48000 channels=2 format=s16le >/dev/null 2>&1 || true
# defaults & cleanup
pactl set-default-sink spk >/dev/null 2>&1 || true
pactl set-default-source dmic >/dev/null 2>&1 || true
pactl set-source-mute dmic 0 >/dev/null 2>&1 || true
pactl set-source-volume dmic 0x10000 >/dev/null 2>&1 || true
NULL_ID=$(pactl list short modules | awk '/module-null-sink/ {print $1}' | head -n1); [ -n "${NULL_ID:-}" ] && pactl unload-module "$NULL_ID" >/dev/null 2>&1 || true
```
* Path unit (`~/.config/
```ini
[Unit]
Description=Run Pulse ALSA setup when PulseAudio native socket appears
[Path]
PathExists=
[Install]
WantedBy=
```
* Service (`~/.config/
```ini
[Unit]
Description=Load ALSA sink/source for PulseAudio (sof-soundwire)
After=default.
[Service]
Type=oneshot
ExecStart=
RemainAfterExit=yes
```
* Enable:
```bash
systemctl --user daemon-reload
systemctl --user enable --now pulseaudio.service
systemctl --user enable --now pulse-alsa-
# (service is triggered by the socket)
```
**Option B (also kept for safety): user PulseAudio default.pa override**
`~/.config/
```text
.include /etc/pulse/
load-module module-alsa-sink device=hw:0,2 sink_name=spk
load-module module-alsa-source device=plughw:0,10 source_name=dmic tsched=0 rate=48000 channels=2 format=s16le
set-default-sink spk
set-default-source dmic
# optionally: unload-module module-null-sink
```
With Option A+B, audio (out) and mic (dmic) come up reliably after reboot/log-in.
---
## Clean-up performed
* Removed stale PPA that 404’d during troubleshooting:
```
ppa:oem-
```
* Masked PipeWire/
```
systemctl --user mask pipewire{
```
* Removed user overrides/caches for PW/WP tried during debugging:
```
~/.config/
```
---
## What did not work (for maintainers)
* Reinstalling `libpipewire-
* User overrides for WirePlumber to force-load `monitors/alsa.lua` (legacy `main.lua.d`, `scripts=...`, and new **components** style) → **no devices**.
* Foreground WP runs indicated transient **protocol-native** mismatch earlier; after reinstall the error vanished, still **no ALSA devices**.
* Creating **static PW ALSA nodes** also failed because **`libpipewire-
---
## Evidence that the kernel/firmware side is OK
* ALSA lists the expected endpoints:
```
aplay -l → Speaker at hw:0,2; HDMI 5/6/7; Jack Out 0; Deepbuffer 31
arecord -l → DMIC Raw at hw:0,10; Jack In 1
```
* `speaker-test -D hw:0,2 …` audible.
* `arecord -D plughw:0,10 … && aplay …` audible.
* SOF IPC4 firmware and topology load; cs35l56 calibration applied in dmesg.
---
## Regression range / expectations
* **Ubuntu 25.04 + kernel 6.14**: sound worked out of the box with PipeWire/
* **Ubuntu 25.10 + kernel 6.17**: SOF stack succeeds, but PipeWire/
* Manual PulseAudio path restores functionality → this is **a user-space issue** (PW/WP packaging/config), not kernel/SOF.
---
## Requested actions / hypotheses
1. **WirePlumber packaging/config on Ubuntu 25.10**
* Ensure `monitors/alsa.lua` is actually loaded by default (components or equivalent), or ship default user configuration enabling ALSA monitor with UCM/ACP.
* Verify that the shipped WP configuration schema (scripts vs components) matches the installed script locations (`/usr/
2. **PipeWire modules completeness**
* Confirm whether **`libpipewire-
3. **Protocol-native error** (transient)
* Investigate conditions causing `can't find protocol 'PipeWire:
---
## Current working configuration (for reference)
* Audio stack: **PulseAudio 17.0**, `module-alsa-sink` (`hw:0,2`), `module-
* Persistence: **systemd user path-unit** triggering helper script when `/run/user/
* Result: stable output + microphone after reboot.
---
## Reproduction outline (from a fresh 25.10 install on identical HW)
1. Boot 25.10 on ThinkPad X9-14 Gen 1 (Lunar Lake).
2. Observe GNOME → **“Dummy Output”**.
3. `wpctl status` → only `auto_null`; `aplay/arecord -l` show devices; `speaker-
4. Reinstall PW/WP packages → no change; attempts to force WP ALSA monitor → no change; static PW ALSA modules not present.
5. Install PulseAudio; load:
```
pactl load-module module-alsa-sink device=hw:0,2 sink_name=spk
pactl load-module module-alsa-source device=plughw:0,10 source_name=dmic tsched=0 rate=48000 channels=2 format=s16le
```
→ **sound and mic work**.
6. Add systemd path-unit + helper to persist across boots.

Thanks for the details, that seems to be the same as bug #2129264