How to Fix Audio Problems on Linux
Fix Linux audio issues step by step: identify PipeWire vs PulseAudio, unmute ALSA channels, select the right output device, reload drivers, and verify hardware.
Before you start
- ▸A working Linux desktop environment (GNOME, KDE, etc.)
- ▸sudo or root access for kernel module and firmware changes
- ▸alsa-utils package installed (provides alsamixer and aplay)
- ▸pavucontrol installed for graphical per-application volume control (optional but recommended)
Audio on Linux has a reputation for being finicky, but most problems trace back to a handful of root causes: the wrong output device is selected, a volume control is muted somewhere in the stack, or the audio server itself is in a bad state. Modern desktops ship with PipeWire as the audio server (replacing PulseAudio on Fedora 34+, Ubuntu 22.10+, and Arch since 2021), though PulseAudio is still common on Ubuntu 22.04 LTS and Debian 11/12. Knowing which stack you have is the first step to fixing it.
Identify Your Audio Server
Before touching anything, confirm what's running. PipeWire and PulseAudio expose similar interfaces, but the tools differ slightly.
pactl info | grep 'Server Name'
Output will vary, but on PipeWire you'll see something like PulseAudio (on PipeWire 0.3.xx); on plain PulseAudio you'll see pulseaudio. You can also check directly:
systemctl --user status pipewire pipewire-pulse pulseaudio
If PipeWire units show active (running) and PulseAudio is masked or absent, you're on PipeWire. If only PulseAudio is active, you're on the legacy stack.
Check the Obvious: Volume and Mute State
The most common cause of no sound is a muted or zeroed channel somewhere in the chain. Check every layer.
Using alsamixer
ALSA sits below both audio servers and has its own independent mute state. Install and run alsamixer to inspect hardware levels:
alsamixer
Press F6 to select your sound card. Channels showing MM at the bottom are muted — press M to unmute. Master and PCM should both be at 80–100. Press Esc to exit, then make the changes persistent:
sudo alsactl store
Using pactl (PulseAudio and PipeWire)
List all sinks (output devices) and their mute status:
pactl list sinks short
Unmute a specific sink by index (replace 0 with the correct index from the output above):
pactl set-sink-mute 0 0
pactl set-sink-volume 0 80%
Select the Correct Output Device
When you plug in HDMI, a USB headset, or a Bluetooth device, the audio server may switch to the wrong sink automatically — or not switch at all.
GUI: Sound Settings
Open your desktop's sound settings (GNOME Settings → Sound, KDE Plasma System Settings → Audio) and select the correct output device from the dropdown. Changes take effect immediately.
Command line: set the default sink
List available sinks with their names:
pactl list sinks | grep -E 'Name:|Description:'
Set the default sink by name:
pactl set-default-sink alsa_output.pci-0000_00_1f.3.analog-stereo
Also move any currently playing stream to the new sink (stream index comes from pactl list sink-inputs short):
pactl move-sink-input 1 alsa_output.pci-0000_00_1f.3.analog-stereo
Restart the Audio Server
A crashed or wedged audio server is a quick fix — restart it as your user, not root.
PipeWire
systemctl --user restart pipewire pipewire-pulse wireplumber
PulseAudio
systemctl --user restart pulseaudio
If PulseAudio isn't managed by systemd on your system (common on older setups), use:
pulseaudio -k && pulseaudio --start
Check for Missing or Blacklisted Kernel Modules
If alsamixer shows no sound cards ("cannot open mixer"), the ALSA driver isn't loaded.
aplay -l
No cards listed means no driver. Check which module your hardware needs:
lspci -k | grep -A2 -i audio
Look for the Kernel driver in use line. Common drivers are snd_hda_intel and snd_sof_pci. Load the module manually to test:
sudo modprobe snd_hda_intel
If a module is blacklisted, check these files:
grep -r snd /etc/modprobe.d/
Remove any blacklist snd_hda_intel line that shouldn't be there, then rebuild the initramfs:
Debian/Ubuntu:
sudo update-initramfs -u
Fedora/RHEL/Rocky:
sudo dracut --force
Arch:
sudo mkinitcpio -P
Install Missing Packages
A minimal install may be missing key PipeWire components or firmware.
Debian/Ubuntu (PipeWire):
sudo apt install pipewire pipewire-pulse pipewire-alsa wireplumber
Fedora:
sudo dnf install pipewire pipewire-pulseaudio wireplumber
Arch:
sudo pacman -S pipewire pipewire-pulse pipewire-alsa wireplumber
For Intel and AMD hardware, also ensure the alsa-firmware and sof-firmware packages are present. On Debian/Ubuntu: sudo apt install firmware-sof-signed alsa-firmware-loaders. The SOF (Sound Open Firmware) driver is required on most Intel laptops from 2019 onward.
Diagnosing Bluetooth Audio
Bluetooth audio has its own quirks. The device must be paired, connected, and the correct profile selected. With PipeWire, Bluetooth A2DP and HFP are handled natively without pulseaudio-bluetooth.
pactl list cards | grep -A 20 'bluez'
Look for the active profile. If it shows headset-head-unit (HFP, low quality) instead of a2dp-sink (high quality), switch it:
pactl set-card-profile bluez_card.XX_XX_XX_XX_XX_XX a2dp-sink
Replace XX_XX_XX_XX_XX_XX with your device's MAC (colons replaced by underscores). If PipeWire Bluetooth support isn't working, ensure libspa-0.2-bluetooth (Debian/Ubuntu) or pipewire-codec-aptx (optional on Fedora) is installed.
Verify the Fix
Play a test tone directly through ALSA to bypass the audio server entirely — this confirms whether the hardware works at all:
speaker-test -t wav -c 2
You should hear "Front Left, Front Right" announcements. If that works but your desktop still has no sound, the issue is in the audio server or application layer, not the hardware. Then test through PulseAudio/PipeWire:
paplay /usr/share/sounds/freedesktop/stereo/bell.oga
Troubleshooting
- Sound works as root but not as your user: Your user may not be in the
audiogroup. Add them:sudo usermod -aG audio $USER, then log out and back in. Note: on systemd-based systems with logind, group membership is usually not required — checkloginctl show-session $(loginctl | grep $USER | awk '{print $1}') | grep Activeto confirm you have an active session. - HDMI audio not working: Run
aplay -land look for the HDMI device. Select it explicitly:pactl set-default-sink alsa_output.pci-0000_00_1f.3.hdmi-stereo. Some Intel GPUs require thei915driver to expose HDMI audio. - Audio cuts out or crackles: A PipeWire buffer underrun is common on loaded systems. Edit
~/.config/pipewire/pipewire.conf.d/latency.confto increase the quantum (buffer size). Start withdefault.clock.quantum = 2048. - No audio after suspend/resume: Restart the audio server after waking:
systemctl --user restart pipewire pipewire-pulse wireplumber. You can automate this with a systemd sleep hook. - Application-specific silence: Check per-app volume in a mixer like
pavucontrol(install if absent). The Playback tab shows each stream individually and can reveal a single muted app.
Frequently asked questions
- How do I know if I have PipeWire or PulseAudio?
- Run 'pactl info | grep Server Name'. PipeWire will identify itself as 'PulseAudio (on PipeWire)'. You can also check 'systemctl --user status pipewire' — if it's active and running, you're on PipeWire.
- Why does my audio work at the ALSA level but not in my desktop?
- The audio server (PipeWire or PulseAudio) is either crashed, has the wrong sink selected, or has a muted stream. Restart the server with systemctl --user restart, then check per-application volume in pavucontrol.
- My laptop has no sound card listed in aplay -l. What's wrong?
- Most Intel laptops from 2019 onward use the SOF (Sound Open Firmware) driver. Install 'sof-firmware' (Arch/Fedora) or 'firmware-sof-signed' (Debian/Ubuntu) and reboot. Without this firmware the kernel module won't initialize the hardware.
- Bluetooth audio is low quality or sounds like a phone call. How do I fix it?
- The HFP (headset) profile is active instead of A2DP (stereo). Switch it with: pactl set-card-profile bluez_card.XX_XX_XX_XX_XX_XX a2dp-sink. If A2DP isn't listed, ensure the Bluetooth PipeWire plugin (libspa-0.2-bluetooth) is installed.
- Audio stops working after the system resumes from sleep. Is there a permanent fix?
- Create a systemd sleep hook under /etc/systemd/system/sleep.target.wants/ that runs 'systemctl --user restart pipewire pipewire-pulse wireplumber' on resume. Some distributions ship this fix in newer kernel or firmware updates, so also check for updates.
Related guides
Linux Clipboards Explained (+ Clipboard Managers)
Learn the difference between Linux's PRIMARY and CLIPBOARD selections, use xclip, xsel, and wl-clipboard from the terminal, and manage history with GPaste or Klipper.
Configure LibreOffice for Daily Use
Configure LibreOffice for daily use: set default save formats for MS Office interop, tune autosave, install fonts, and add productivity extensions.
Configure the Touchpad and Multitouch Gestures
Configure Linux touchpad behavior and multitouch gestures using libinput, libinput-gestures, and native GNOME and KDE Plasma settings on both Wayland and X11.
Wayland vs X11: How to Choose and Configure Each
Know when to run Wayland or X11, how to check your current session, switch at login with GDM/SDDM/LightDM, and handle NVIDIA and XWayland edge cases.