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

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
Easiest fix: Open your desktop's sound settings (usually right-click the volume icon in the system tray). Make sure the correct output device is selected and the volume is up. This solves the problem more often than you'd think.

PipeWire vs PulseAudio

Linux has two main audio systems. Knowing which one you're running matters for troubleshooting:

Audio SystemDistros Using ItNotes
PipeWireFedora 34+, Ubuntu 22.10+, Arch (default since 2022), Pop!_OS, ManjaroThe modern replacement. Handles audio and video streams. Better Bluetooth support.
PulseAudioUbuntu 22.04 LTS, Debian Stable, Linux Mint, older installsThe 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
Codec matters: If your headphones support LDAC, aptX, or AAC, make sure the right codec packages are installed. PipeWire supports these codecs with additional packages (like 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