Sound Setup
Chapter 8 — Configuring Sound
Sound on Linux works well on most hardware straight out of the box — but when it doesn't, it can be confusing because the audio stack has several layers with unfamiliar names. This chapter explains how Linux handles audio, how to use the graphical sound settings, how to switch output devices (including HDMI and Bluetooth), and how to diagnose and fix the most common sound problems.
1. How Linux Handles Audio — The Stack
Linux audio goes through several layers between an application and your speakers. Understanding these layers makes troubleshooting much easier.
When you adjust the volume slider in your desktop's settings panel, you're controlling the sound server. When audio is completely absent, the problem is usually either at the ALSA level (wrong device selected, muted) or at the sound server level (service not running, wrong output selected).
2. PulseAudio vs PipeWire
There are two sound servers in common use on Linux. Which one you have depends on your distro and how recently it was released.
- Has been the default Linux sound server since ~2008
- Handles desktop audio mixing well
- Bluetooth audio support is good but requires separate modules
- Not designed for professional low-latency audio
- Still the default on older Ubuntu LTS, Debian, Linux Mint 20
- Stable and very well-tested
- Default on Ubuntu 22.10+, Fedora 34+, Linux Mint 21+
- Drop-in replacement for PulseAudio — existing apps work unchanged
- Also replaces JACK (professional low-latency audio)
- Better Bluetooth codec support (AAC, aptX, LDAC)
- Lower latency — better for gaming and video calls
- Handles screen capture audio alongside video (important for Wayland)
pactl info | grep "Server Name". If the output says
PulseAudio (on PipeWire) you have PipeWire with PulseAudio compatibility.
If it just says PulseAudio, you have the original PulseAudio.
Either way, the graphical controls and most of the commands in this chapter work
identically for both.
Checking what's running
3. Graphical Sound Settings
For everyday audio management you rarely need the terminal. Every major desktop environment has graphical sound controls.
Ubuntu (GNOME) — Settings → Sound
Open Settings → Sound. You'll find:
- Output device — dropdown showing all available audio outputs (built-in speakers, headphone jack, HDMI, USB audio). Select the one you want to use.
- Output volume — the master volume slider.
- Input device — microphone selection and input volume.
- Alert volume — volume for system notification sounds.
- Test button — plays a short sound to confirm the selected output works.
Linux Mint (Cinnamon) — Sound applet
Right-click the speaker icon in the system tray and choose Sound Settings. Alternatively, open System Settings → Sound. Mint's sound panel is similar to GNOME's but also shows per-application volume levels on the "Applications" tab.
KDE Plasma — Audio Volume widget
Click the speaker icon in the system tray to open the quick volume control. For full settings, right-click the speaker and choose Configure Audio Devices (or open System Settings → Audio). KDE lets you set a default output per application — for example, routing game audio to headphones and notification sounds to speakers.
XFCE / MATE — PulseAudio Volume Control
These desktops use a standalone tool. Search for PulseAudio Volume Control (pavucontrol) in the application menu. If it's not installed:
pavucontrol is actually the most powerful graphical audio tool on Linux regardless of desktop — it shows every audio stream, every device, and lets you reroute streams between devices in real time.
4. pavucontrol — The Audio Power Tool
PulseAudio Volume Control (pavucontrol) works with both PulseAudio and PipeWire and gives you far more control than the basic desktop sound panel. It has five tabs:
- Playback — shows every application currently playing audio, with an individual volume slider for each. You can mute a specific app or adjust its volume independently of the master.
- Recording — shows every application currently recording audio (mic input). Useful for identifying which app has grabbed the microphone.
- Output Devices — lists every audio output (speaker, headphones, HDMI, USB). You can set the default and adjust the volume for each device independently.
- Input Devices — lists every microphone and audio input. Set the default and adjust input gain.
- Configuration — shows the profile for each audio card. This is where you switch between stereo output, surround sound, HDMI audio, and digital output (S/PDIF). This tab fixes most HDMI audio problems.
5. HDMI Audio
HDMI carries audio as well as video, so when you connect a monitor or TV via HDMI you expect audio to come from those speakers. Linux handles this but sometimes needs a nudge to select the right output.
-
1Open pavucontrol (or Settings → Sound on GNOME).
-
2Click the Configuration tab. You'll see your audio hardware listed — typically something like "Built-in Audio" and possibly a separate GPU audio device (e.g., "NVIDIA High Definition Audio" or "AMD HD Audio").
-
3For the GPU audio device, change its profile from "Off" to "Digital Stereo (HDMI)" or the matching HDMI port (HDMI 1, HDMI 2, etc.).
-
4Go to the Output Devices tab — the HDMI output should now appear. Click the green tick (✓) button next to it to set it as the default.
-
5Test by playing any audio. If using GNOME, you can also set the output in Settings → Sound → Output device dropdown.
6. Bluetooth Audio
Bluetooth headphones and speakers work on Linux, though the initial pairing process is slightly different from Windows or macOS.
Pairing via the graphical interface
-
1Put your Bluetooth device into pairing mode.
-
2Open Settings → Bluetooth (Ubuntu/GNOME) or the Bluetooth manager from the system tray. Make sure Bluetooth is enabled.
-
3Your device should appear in the "Available devices" list. Click it and then click Pair. Confirm any PIN if prompted.
-
4After pairing, the Bluetooth headphones should appear in Settings → Sound → Output device. Select them.
Bluetooth audio quality — A2DP profile
Bluetooth audio has two main profiles: A2DP (high-quality stereo audio) and HSP/HFP (low-quality "headset" profile that enables the microphone). Linux sometimes defaults to HSP/HFP because it detects a microphone in the headphones. If your Bluetooth audio sounds terrible, this is why.
Fix it in pavucontrol → Configuration tab → select your Bluetooth device → change profile to "High Fidelity Playback (A2DP Sink)".
7. Terminal Audio Tools
When the GUI isn't enough — or when you're troubleshooting over SSH on a headless system — the terminal provides complete control over audio.
List output devices
Set the default output device
Adjust volume from the terminal
Check ALSA — the layer below PulseAudio/PipeWire
speaker-test bypasses PipeWire/PulseAudio and talks directly
to ALSA. If you hear sound from speaker-test but not from applications,
the problem is in the sound server layer. If speaker-test is also silent,
the problem is at the ALSA/driver/hardware level.
8. Troubleshooting Common Sound Problems
2. Check the ALSA mixer isn't muted. Open a terminal and run
alsamixer. Use arrow keys to navigate; press M to unmute a channel
(muted channels show "MM" at the bottom; unmuted show "OO"). Press F6 to select a different
sound card if you have more than one.
alsamixer, press F6, select your
audio card, and look for a "Headphone" or "Speaker" channel. Make sure the correct one isn't
muted. Alternatively, in pavucontrol → Configuration, try switching the profile (e.g., from
"Analog Stereo Output" to "Analog Stereo Duplex").
systemctl --user restart pipewire pipewire-pulse (PipeWire systems)
pulseaudio -k && pulseaudio --start (PulseAudio systems)
If the service keeps crashing, check for errors with
journalctl --user -u pipewire -n 50.
/etc/pulse/default.pa and
find the line loading module-udev-detect — add tsched=0 to disable
timer-based scheduling:load-module module-udev-detect tsched=0Then restart PulseAudio. For PipeWire, try increasing the quantum (buffer size) in
~/.config/pipewire/pipewire.conf.d/ — but this is rarely needed on modern hardware.
Chapter Summary
| Topic | Key points |
|---|---|
| Audio stack | Applications → Sound server (PipeWire/PulseAudio) → ALSA → Hardware. Graphical controls manage the sound server layer. |
| PipeWire vs PulseAudio | PipeWire is the modern default (Ubuntu 22.10+, Fedora 34+, Mint 21+). PulseAudio is on older installs. Both are controlled identically via pactl and pavucontrol. |
| Graphical control | GNOME: Settings → Sound. KDE: system tray speaker. XFCE/MATE: pavucontrol. pavucontrol works everywhere and is the most powerful option. |
| HDMI audio | Open pavucontrol → Configuration tab → enable HDMI profile on GPU audio device → set as default in Output Devices tab. |
| Bluetooth audio | Pair via Bluetooth settings. If quality is poor, set A2DP profile in pavucontrol → Configuration. PipeWire has better Bluetooth codec support. |
| Terminal tools | pactl list sinks short — list outputs. pactl set-default-sink — set default. alsamixer — check for muted ALSA channels. speaker-test — test ALSA directly. |
| No sound fix order | 1) Check not muted in pavucontrol. 2) Check alsamixer for muted channels. 3) Check correct output selected. 4) Restart sound server. 5) Run speaker-test to isolate ALSA vs server problem. |