Software Engineer's Blog

Chrome Has No Sound on Kubuntu (PipeWire Fix)

Chrome Has No Sound on Kubuntu (PipeWire Fix)

Problem

Chrome plays no audio. Firefox, VLC, and system sounds all work. No settings were changed.

Tested on Kubuntu 25.10, PipeWire 1.4.7. Applies to Kubuntu ≥ 22.10 / Ubuntu ≥ 23.04.

Confirm you’re on PipeWire:

pactl info | grep "Server Name"
# Expect: PulseAudio (on PipeWire x.x.x)

Fix

1. Check pavucontrol first

sudo apt install pavucontrol && pavucontrol

Play audio in Chrome. On the Playback tab, check that Chrome is:

  • not muted
  • volume > 0
  • routed to an output device that actually exists (not a disconnected Bluetooth headset or unplugged HDMI)

Fix there if possible. If Chrome is routed correctly but still silent, continue.

2. Reset PipeWire state

rm -rf ~/.local/state/wireplumber/
rm -rf ~/.local/state/pipewire/media-session.d/
systemctl --user restart wireplumber pipewire pipewire-pulse
pkill -f chrome

Relaunch Chrome. Done.

Still silent? Inspect the routing

Before assuming the worst, look at what PipeWire actually sees. wpctl ships with WirePlumber, so it’s already installed:

wpctl status

This lists every sink and marks the default with a *. If Chrome’s stream is parked on a sink that isn’t the one you’re listening through — or on a device that isn’t physically connected — that’s the ghost-device problem below. Set the right sink as default:

wpctl set-default <SINK_ID>

Note that set-default only changes where new streams get routed — it won’t move Chrome’s already-open stream. Restart Chrome so it reconnects to the new default, or move its current stream directly on the Playback tab of pavucontrol.

Do not use sudo

wireplumber, pipewire, and pipewire-pulse are user services. sudo systemctl --user ... targets root’s session, not yours, and will silently do nothing useful.

Why it works

PipeWire caches per-app routing state in ~/.local/state/. If Chrome last played through a device that no longer exists (dead Bluetooth headset, undocked monitor, suspended USB DAC), PipeWire keeps routing to the ghost device. Other apps often refresh or don’t have stale state, so only Chrome goes silent. Deleting the cache forces PipeWire to rebuild against currently-present devices.

Notes

  • Browser data is untouched. Only audio routing state is deleted.
  • One-off fix. Not expected to recur unless you frequently hot-swap audio devices.
  • Different symptom? If Chrome’s Bluetooth audio stutters or drops to tinny quality rather than going fully silent, that’s a profile problem, not stale routing — see the A2DP profile lock.

PulseAudio (Ubuntu ≤ 22.04) — use instead:

rm -r ~/.config/pulse/* ~/.pulse*
killall pulseaudio

References