No Sound / Audio Issues
No sound, wrong output device, or Bluetooth headphones not connecting? Here's how to diagnose and fix Linux audio problems.
Symptoms
- No sound at all - speakers/headphones produce nothing
- Wrong output device - sound goes to HDMI instead of speakers, or vice versa
- Audio crackles or pops - distorted, broken sound
- Bluetooth headphones won't play audio - connected but no sound
- Microphone not working - apps can't hear you
Quick Fix
Before doing anything complicated, check the obvious stuff:
# 1. Is your audio muted? Check ALSA mixer:
alsamixer
# Use arrow keys to navigate, M to mute/unmute
# Make sure Master, Speaker, and Headphone channels are unmuted and turned up
# "MM" means muted, "OO" means unmuted
# 2. Is the right output device selected?
# Check with PipeWire:
wpctl status
# Or PulseAudio:
pactl list sinks short
# 3. Restart the audio service
# PipeWire (most modern distros):
systemctl --user restart pipewire pipewire-pulse wireplumber
# PulseAudio (older setups):
pulseaudio -k && pulseaudio --start
PipeWire vs PulseAudio
Linux has two main audio systems. Knowing which one you're running matters for troubleshooting:
| Audio System | Distros Using It | Notes |
|---|---|---|
| PipeWire | Fedora 34+, Ubuntu 22.10+, Arch (default since 2022), Pop!_OS, Manjaro | The modern replacement. Handles audio and video streams. Better Bluetooth support. |
| PulseAudio | Ubuntu 22.04 LTS, Debian Stable, Linux Mint, older installs | The older standard. Still works fine but being phased out. |
Check which one you're running:
# This tells you what's providing your audio
pactl info | grep "Server Name"
# "PulseAudio (on PipeWire)" = PipeWire
# "pulseaudio" = PulseAudio
Per-Distro Fixes
Ubuntu / Linux Mint / Debian
# Reinstall audio packages
sudo apt install --reinstall alsa-base alsa-utils pulseaudio
# If using PipeWire (Ubuntu 22.10+):
sudo apt install --reinstall pipewire pipewire-pulse wireplumber
# Reload ALSA
sudo alsa force-reload
# If sound card isn't detected at all:
sudo apt install linux-firmware
sudo reboot
Fedora
# Fedora uses PipeWire by default
# Reinstall PipeWire
sudo dnf reinstall pipewire pipewire-pulseaudio wireplumber
# Restart the audio stack
systemctl --user restart pipewire pipewire-pulse wireplumber
# If you're having issues, check WirePlumber logs:
journalctl --user -u wireplumber -b
Arch / Manjaro
# Make sure PipeWire is installed and running
sudo pacman -S pipewire pipewire-pulse pipewire-alsa wireplumber
# Enable and start the user services
systemctl --user enable --now pipewire pipewire-pulse wireplumber
# If you had PulseAudio before, remove it
sudo pacman -Rns pulseaudio pulseaudio-bluetooth
# Reboot to make sure everything loads clean
sudo reboot
Bluetooth Audio
Bluetooth audio on Linux has gotten much better with PipeWire, but it can still be tricky.
Bluetooth headphones paired but no audio
The headphones connect but no sound comes out, or they show as "connected" but audio still plays through speakers.
# 1. Make sure Bluetooth service is running
sudo systemctl enable --now bluetooth
# 2. Check if the PipeWire Bluetooth module is installed
# Ubuntu/Debian:
sudo apt install pipewire-audio # or libspa-0.2-bluetooth for older versions
# Fedora:
sudo dnf install pipewire-codec-aptx # For aptX codec support
# Arch:
sudo pacman -S pipewire-pulse # Includes Bluetooth support
# 3. Restart PipeWire
systemctl --user restart pipewire pipewire-pulse wireplumber
# 4. Remove and re-pair the device
bluetoothctl
# At the prompt:
remove XX:XX:XX:XX:XX:XX # Your headphones' MAC address
scan on # Wait for them to appear
pair XX:XX:XX:XX:XX:XX
connect XX:XX:XX:XX:XX:XX
trust XX:XX:XX:XX:XX:XX
Bluetooth audio quality is terrible (sounds like a phone call)
This happens when your headphones switch to the HSP/HFP profile (phone call mode) instead of A2DP (music mode). This usually happens when a microphone is active.
# Switch to A2DP (high quality) profile
# Using wpctl (PipeWire):
wpctl status # Find your Bluetooth device ID
wpctl set-profile <device-id> 0 # Try different profile numbers
# Using pactl:
pactl list cards short # Find the Bluetooth card
pactl set-card-profile bluez_card.XX_XX_XX_XX_XX_XX a2dp-sink
# If you need the microphone too, you'll be stuck with lower quality
# Consider using your laptop's built-in mic instead
pipewire-codec-aptx on Fedora).
HDMI Audio Not Working
Audio goes to speakers instead of HDMI / TV
When you plug in an HDMI cable, Linux doesn't always switch the audio output automatically.
# 1. List available audio outputs
pactl list sinks short
# Look for something with "hdmi" in the name
# 2. Set HDMI as the default output
pactl set-default-sink <hdmi-sink-name>
# 3. If HDMI doesn't show up as an output at all:
# It might be an NVIDIA issue - make sure the nvidia-drm module is loaded
lsmod | grep nvidia
# For Intel/AMD HDMI audio, the snd_hda_intel module handles it:
lsmod | grep snd_hda_intel
# Sometimes you need to set the correct ALSA device:
aplay -l # List all sound devices
# Find the HDMI device number and card number
You can also use pavucontrol (PulseAudio Volume Control) to switch outputs with a GUI. It works with both PulseAudio and PipeWire:
# Install pavucontrol
# Ubuntu/Debian: sudo apt install pavucontrol
# Fedora: sudo dnf install pavucontrol
# Arch: sudo pacman -S pavucontrol
pavucontrol
Go to the "Output Devices" tab and select your HDMI output. Or go to the "Playback" tab while playing audio and switch the output for that specific application.
Still No Sound?
Advanced debugging
# Check if the sound card is detected at all
cat /proc/asound/cards
# If this shows "no soundcards", the kernel doesn't see your audio hardware
# Check for ALSA errors
dmesg | grep -i -E 'snd|sound|audio|hda'
# Check PipeWire/PulseAudio logs
journalctl --user -u pipewire -b
journalctl --user -u wireplumber -b
# Test audio output directly through ALSA (bypasses PipeWire/PulseAudio)
speaker-test -t wav -c 2
# If this produces sound, the problem is in PipeWire/PulseAudio config
# If this produces no sound, the problem is at the ALSA/driver level
# List all audio-related kernel modules
lsmod | grep snd
# Try loading the audio module manually
sudo modprobe snd_hda_intel