Regression in 25.10: No audio devices in PipeWire/WirePlumber; ALSA/SOF ok, only “Dummy Output” shown

Bug #2131090 reported by Jan Kranefeld
14
This bug affects 3 people
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/WirePlumber produced no devices** (only `auto_null`). Ultimately, audio was restored by **switching to PulseAudio** and loading **manual ALSA sink/source** (speaker and DMIC) plus a systemd user unit to make it persistent.

---

## System

* Hardware: Lenovo ThinkPad X9-14 Gen 1 (21QA001PGE), Lunar Lake
* DMI: `LENOVO_MT_21QA_BU_Think_FM_ThinkPad X9-14 Gen 1`
* 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/firmware/intel/sof-ipc4/lnl/sof-lnl.ri -> intel-signed/sof-lnl.ri
  /lib/firmware/intel/sof-ipc4-tplg/sof-lnl-cs42l43-l0-cs35l56-l3-2ch.tplg
  ```
* UCM present: `alsa-ucm-conf` (UCM card shows `LENOVO-21QA001PGE-ThinkPadX9_14Gen1`)

---

## 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-pci-intel-lnl ... Topology file: intel/sof-ipc4-tplg/sof-lnl-cs42l43-l0-cs35l56-l3-2ch.tplg
cs35l56 ... DSP1: ... v3.11.28 ... Calibration applied
alsactl: set_control: ... 'cs42l43 Jack Override' : Device or resource busy
sof_sdw: hda_dsp_hdmi_build_controls: no PCM in topology for HDMI converter 3
```

No hard kernel/firmware errors; SOF topology loads.

---

## Diagnostics and findings

1. **PipeWire stack initially incomplete/inconsistent**

   * `libpipewire-0.3-0` not installed (25.10 uses **`libpipewire-0.3-0t64`**). Reinstalled:

     ```
     sudo apt install --reinstall libpipewire-0.3-0t64 libpipewire-0.3-modules libspa-0.2-modules pipewire pipewire-audio pipewire-pulse wireplumber
     ```
   * After reinstall, files existed:

     ```
     /usr/lib/x86_64-linux-gnu/libpipewire-0.3.so.0 -> ...0.1407.0
     /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-rt.so
     /usr/lib/x86_64-linux-gnu/spa-0.2/alsa/libspa-alsa.so
     ```

2. **WirePlumber didn’t load ALSA monitor**

   * Package layout: `wireplumber` installed **scripts in** `/usr/share/wireplumber/scripts/...` (e.g. `monitors/alsa.lua`), **no** legacy `main.lua.d` fragments shipped.
   * User overrides attempting to load `monitors/alsa.lua` (both legacy `scripts=.../alsa_monitor` and components style) **did not create ALSA devices**; `wpctl` still showed only `auto_null`.

3. **PipeWire protocol issue observed transiently**

   * Foreground WP run showed:

     ```
     E core_new: can't find protocol 'PipeWire:Protocol:Native': Operation not supported
     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-module-alsa-*.so` were **not present** on this 25.10 image, so creating static PW ALSA nodes was not possible.

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/bin/pulse-alsa-setup.sh`):

```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/systemd/user/pulse-alsa-setup.path`):

```ini
[Unit]
Description=Run Pulse ALSA setup when PulseAudio native socket appears

[Path]
PathExists=/run/user/%U/pulse/native

[Install]
WantedBy=default.target
```

* Service (`~/.config/systemd/user/pulse-alsa-setup.service`):

```ini
[Unit]
Description=Load ALSA sink/source for PulseAudio (sof-soundwire)
After=default.target

[Service]
Type=oneshot
ExecStart=%h/.local/bin/pulse-alsa-setup.sh
RemainAfterExit=yes
```

* Enable:

```bash
systemctl --user daemon-reload
systemctl --user enable --now pulseaudio.service
systemctl --user enable --now pulse-alsa-setup.path
# (service is triggered by the socket)
```

**Option B (also kept for safety): user PulseAudio default.pa override**
`~/.config/pulse/default.pa`:

```text
.include /etc/pulse/default.pa
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-solutions-group/intel-ipu7
  ```
* Masked PipeWire/WirePlumber user units to prevent GNOME from auto-switching back:

  ```
  systemctl --user mask pipewire{,-pulse}.service pipewire{,-pulse}.socket wireplumber.service
  ```
* Removed user overrides/caches for PW/WP tried during debugging:

  ```
  ~/.config/pipewire*, ~/.config/wireplumber, ~/.local/state/wireplumber, ~/.cache/pipewire-*
  ```

---

## What did not work (for maintainers)

* Reinstalling `libpipewire-0.3-0t64`, `libpipewire-0.3-modules`, `libspa-0.2-modules`, `pipewire`, `pipewire-audio`, `pipewire-pulse`, `wireplumber` → **no devices** (only `auto_null`).
* 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-module-alsa-*.so` were not present** in this Ubuntu 25.10 install.

---

## 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/WirePlumber.
* **Ubuntu 25.10 + kernel 6.17**: SOF stack succeeds, but PipeWire/WirePlumber **does not create any ALSA devices**; GNOME shows “Dummy Output”.
* 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/share/wireplumber/scripts/...`).

2. **PipeWire modules completeness**

   * Confirm whether **`libpipewire-module-alsa-*.so`** are intentionally omitted from the 25.10 PipeWire packaging; without them, static ALSA nodes for debugging/workarounds are impossible.

3. **Protocol-native error** (transient)

   * Investigate conditions causing `can't find protocol 'PipeWire:Protocol:Native'` when client connects to PW; happened once during the session and vanished after reinstall/cleanup.

---

## Current working configuration (for reference)

* Audio stack: **PulseAudio 17.0**, `module-alsa-sink` (`hw:0,2`), `module-alsa-source` (`plughw:0,10`, `rate=48000`, `format=s16le`, `tsched=0`).
* Persistence: **systemd user path-unit** triggering helper script when `/run/user/$UID/pulse/native` appears; optional `~/.config/pulse/default.pa` override.
* 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-test`/`arecord` succeed.
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.

Revision history for this message
Jan Kranefeld (kranefeld) wrote :
description: updated
Revision history for this message
Sebastien Bacher (seb128) wrote :

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

Revision history for this message
Launchpad Janitor (janitor) wrote :

Status changed to 'Confirmed' because the bug affects multiple users.

Changed in wireplumber (Ubuntu):
status: New → Confirmed
Revision history for this message
Charles (charles05) wrote :

This might be https://github.com/thesofproject/linux/issues/5515

Someone with an affected installation please run,

(for j in $(seq 0 10); do alsaucm open "<<<SplitPCM=1>>>hw:$j" dump text; done) > ucm.log 2>&1

And attach ucm.log here.

Revision history for this message
Jan Kranefeld (kranefeld) wrote :

Thanks for the suggestion, but it seems that UCM on hw:0 defines all expected endpoints (Speaker=2, Headphones=0, HDMI=5/6/7, DMIC=10, HeadsetMic=4). The follow-up errors are from probing non-existent cards hw:1..10, see attached ucm.log.

ALSA + UCM + SOF topology seem to be fine, but PipeWire/WirePlumber graph has no devices.

Revision history for this message
Jan Kranefeld (kranefeld) wrote :

For what it's worth I deactivated my workaround and created a pw-dump. It shows that pipewire finds no devices.

Revision history for this message
Charles (charles05) wrote :

Not the UCM, then.

It seems from the dump that the Wireplumber client hasn't started any services to discover the hardware. The Wireplumber client here has,

        "session.services": "[midi, policy.linking.role-based, bluetooth.midi, audio, api.libcamera, api.bluez, policy.device.profile, api.alsa-seq, api.alsa, video-capture, policy.device.routes, bluetooth.audio, policy.linking.standard, policy.default-nodes, api.v4l2]",

The following script is responsible for populating that,

/usr/share/wireplumber/scripts/session-services.lua

Does it exist there? Is it being loaded by /usr/share/wireplumber/wireplumber.conf?

Please attach your local wireplumber config,

tar czf wireplumber-config.tar.gz /usr/share/wireplumber /etc/wireplumber ~/.config/wireplumber

Maybe there's a bug in the upgrade path, or some local configuration interfering here?

Revision history for this message
Mike Fuller (mfullerca) wrote :

Re: #5 I'm having the same problem. ucm.log attached (similar though not identical):

Revision history for this message
Mike Fuller (mfullerca) wrote :

Re: #7, attached:

Revision history for this message
Charles (charles05) wrote :

@mfullerca: Do you have session.services in your pw-dump output? And /usr/share/wireplumber/scripts/session-services.lua? See #7.

Otherwise, it would be helpful for someone to follow the general troubleshooting advice here: https://gitlab.freedesktop.org/pipewire/pipewire/-/wikis/Troubleshooting - attaching relevant logs.

Revision history for this message
Charles (charles05) wrote :

Potentially related: https://bugs.launchpad.net/ubuntu/+source/linux/+bug/2130761
Might be worth trying https://bugs.launchpad.net/ubuntu/+source/linux/+bug/2130761/comments/6 although the lack of session.services is concerning me more.

Revision history for this message
Jan Kranefeld (kranefeld) wrote :

@charles05:

The file exists:
file /usr/share/wireplumber/scripts/session-services.lua
/usr/share/wireplumber/scripts/session-services.lua: Unicode text, UTF-8 text

and is defined in /usr/share/wireplumber/wireplumber.conf:
  ## Populates the "session.services" property on the WirePlumber client object
  {
    name = session-services.lua, type = script/lua
    provides = support.session-services
  }

I also created the wireplumber-config.tar.gz as requested, though I'm missing
tar: /etc/wireplumber: Cannot stat: No such file or directory
tar: /home/jck/.config/wireplumber: Cannot stat: No such file or directory

Revision history for this message
Charles (charles05) wrote :

No differences to the working version here. Please can you collect the journalctl logs as described in https://gitlab.freedesktop.org/pipewire/pipewire/-/wikis/Troubleshooting#general

Revision history for this message
Jan Kranefeld (kranefeld) wrote :

@charles05, here you are. Thanks for your help!

Revision history for this message
Mike Fuller (mfullerca) wrote :
Download full text (5.9 KiB)

Re #10 @charles05 yes to session.services:

"session.services": "[policy.linking.role-based, api.alsa-seq, policy.device.routes, midi, api.bluez, api.v4l2, api.libcamera, api.alsa, policy.default-nodes, policy.device.profile, policy.linking.standard, bluetooth.audio, audio, bluetooth.midi, video-capture]",

And to /usr/share/wireplumber/scripts/session-services.lua:

-rw-r--r-- 1 root root 1172 May 20 21:32 /usr/share/wireplumber/scripts/session-services.lua

Re: journalctl, logs are pretty small (this starts from first login after a reboot):

Nov 13 18:03:32 Lenovo-Yoga NetworkManager[1793]: <info> [1763085812.7592] settings: (enx00e04c6801a1): created default wired connection 'Wired connection 2'
Nov 13 18:03:34 Lenovo-Yoga systemd[2178]: Listening on pipewire-pulse.socket - PipeWire PulseAudio.
Nov 13 18:03:34 Lenovo-Yoga systemd[2178]: Listening on pipewire.socket - PipeWire Multimedia System Sockets.
Nov 13 18:03:34 Lenovo-Yoga systemd[2178]: Started pipewire.service - PipeWire Multimedia Service.
Nov 13 18:03:34 Lenovo-Yoga dbus-daemon[1673]: [system] Activating via systemd: service name='org.freedesktop.RealtimeKit1' unit='rtkit-daemon.service' requested by ':1.35' (uid=60578 pid=2205 comm="/usr/bin/pipewire -c filter-chain.conf" label="unconfined")
Nov 13 18:03:34 Lenovo-Yoga systemd[2178]: Started wireplumber.service - Multimedia Service Session Manager.
Nov 13 18:03:34 Lenovo-Yoga systemd[2178]: Started pipewire-pulse.service - PipeWire PulseAudio.
Nov 13 18:03:34 Lenovo-Yoga wireplumber[2222]: wp-pw-obj-mixin: <WpNode:0x55f06f212920> ignoring set_param on already destroyed objects
Nov 13 18:03:34 Lenovo-Yoga wireplumber[2222]: [0:00:15.820463749] [2222] INFO Camera camera_manager.cpp:326 libcamera v0.5.0
Nov 13 18:03:37 Lenovo-Yoga kernel: input: sof-soundwire Jack as /devices/pci0000:00/0000:00:1f.3/sof_sdw/sound/card2/input35
Nov 13 18:03:37 Lenovo-Yoga kernel: input: sof-soundwire HDMI/DP,pcm=5 as /devices/pci0000:00/0000:00:1f.3/sof_sdw/sound/card2/input36
Nov 13 18:03:37 Lenovo-Yoga kernel: input: sof-soundwire HDMI/DP,pcm=6 as /devices/pci0000:00/0000:00:1f.3/sof_sdw/sound/card2/input37
Nov 13 18:03:37 Lenovo-Yoga kernel: input: sof-soundwire HDMI/DP,pcm=7 as /devices/pci0000:00/0000:00:1f.3/sof_sdw/sound/card2/input38
Nov 13 18:03:41 Lenovo-Yoga systemd[3398]: Listening on pipewire-pulse.socket - PipeWire PulseAudio.
Nov 13 18:03:41 Lenovo-Yoga systemd[3398]: Listening on pipewire.socket - PipeWire Multimedia System Sockets.
Nov 13 18:03:41 Lenovo-Yoga systemd[3398]: Started pipewire.service - PipeWire Multimedia Service.
Nov 13 18:03:41 Lenovo-Yoga systemd[3398]: Started wireplumber.service - Multimedia Service Session Manager.
Nov 13 18:03:41 Lenovo-Yoga systemd[3398]: Started pipewire-pulse.service - PipeWire PulseAudio.
Nov 13 18:03:42 Lenovo-Yoga wireplumber[3439]: [0:00:23.068464902] [3439] INFO Camera camera_manager.cpp:326 libcamera v0.5.0
Nov 13 18:03:42 Lenovo-Yoga wireplumber[3439]: [0:00:23.069898855] [3494] ERROR MediaDevice media_device.cpp:484 /dev/media2[]: Failed to open media device at /dev/media2: Permission denied
Nov 13 18:03:42 Lenovo-Yoga wireplumber[3439]: [0:00:23.069915369] [3494] INFO DeviceEn...

Read more...

Revision history for this message
Mike Fuller (mfullerca) wrote :

Re: #11 @charles05 I installed the package from https://bugs.launchpad.net/ubuntu/+source/linux/+bug/2130761/comments/6 and my sound devices are back!

Revision history for this message
Charles (charles05) wrote :

@mfullerca: That's great, thanks for reporting it!
@kranefeld: Does that updated UCM package help you as well?

Revision history for this message
Jan Kranefeld (kranefeld) wrote (last edit ):

@charles05 sorry for the delay. I can confirm that after removing my pulse audio workaround and installing the alsa-ucm-config my sound works!
Thanks for your help, I really appreciate it!

$ wpctl status
PipeWire 'pipewire-0' [1.4.7, jck@ThinkPad-X9-14-Gen-1, cookie:3284642882]
 └─ Clients:
        33. WirePlumber [1.4.7, jck@ThinkPad-X9-14-Gen-1, pid:2372]
        37. pipewire [1.4.7, jck@ThinkPad-X9-14-Gen-1, pid:2384]
        47. WirePlumber [export] [1.4.7, jck@ThinkPad-X9-14-Gen-1, pid:2372]
       178. GNOME Volume Control Media Keys [1.4.7, jck@ThinkPad-X9-14-Gen-1, pid:4173]
       179. gnome-shell [1.4.7, jck@ThinkPad-X9-14-Gen-1, pid:4050]
       180. GNOME Shell Volume Control [1.4.7, jck@ThinkPad-X9-14-Gen-1, pid:4050]
       181. xdg-desktop-portal [1.4.7, jck@ThinkPad-X9-14-Gen-1, pid:4830]
       182. wpctl [1.4.7, jck@ThinkPad-X9-14-Gen-1, pid:5010]

Audio
 ├─ Devices:
 │ 148. Lunar Lake-M HD Audio Controller [alsa]
 │
 ├─ Sinks:
 │ 152. Lunar Lake-M HD Audio Controller HDMI / DisplayPort 3 Output [vol: 1.00]
 │ 153. Lunar Lake-M HD Audio Controller HDMI / DisplayPort 2 Output [vol: 1.00]
 │ 154. Lunar Lake-M HD Audio Controller HDMI / DisplayPort 1 Output [vol: 1.00]
 │ 155. Lunar Lake-M HD Audio Controller Headphones [vol: 1.00]
 │ * 156. Lunar Lake-M HD Audio Controller Speaker [vol: 0.64]
 │
 ├─ Sources:
 │ 157. Lunar Lake-M HD Audio Controller Headset Microphone [vol: 1.00]
 │ * 158. Lunar Lake-M HD Audio Controller Digital Microphone [vol: 1.00]
 │
 ├─ Filters:
 │
 └─ Streams:

Revision history for this message
Charles (charles05) wrote :

@kranefeld, @mfullerca: Thanks for the reports and patience!
I will mark this as a duplicate of https://bugs.launchpad.net/ubuntu/+source/alsa-ucm-conf/+bug/2130313
That will be released to Questing in due course.

Changed in wireplumber (Ubuntu):
status: Confirmed → Triaged
affects: wireplumber (Ubuntu) → alsa-ucm-conf (Ubuntu)
To post a comment you must log in.
This report contains Public information  
Everyone can see this information.

Other bug subscribers

Remote bug watches

Bug watches keep track of this bug in other bug trackers.