Sound on Linux today: ALSA, PipeWire and fixing no sound
You no longer install sound drivers by hand. ALSA, the kernel's sound system, drives the hardware, and PipeWire, with its session manager WirePlumber, sits on top and mixes sound from all your programs. Use your desktop's sound settings or wpctl to pick outputs and volumes, alsamixer for the hardware mixer, and the checklist at the end when there is no sound.
The sound stack
- ALSA (Advanced Linux Sound Architecture)
- The kernel drivers plus the user-space library and tools (
alsa-utils). It long ago replaced the old OSS drivers that the original version of this mini-HOWTO was written around. Drivers load automatically when the hardware is found. - PipeWire
- The sound server. It accepts audio from programs written for PulseAudio (through
pipewire-pulse), ALSA (throughpipewire-alsa) and JACK, mixes them and sends the result to the right device. It carries video streams, such as cameras, as well. - WirePlumber
- PipeWire's session manager: it decides which device is the default, remembers volumes and switches profiles. Its command-line tool is
wpctl.
As of November 2026, PipeWire is the default sound server on Fedora (since Fedora 34), on Debian 12 with GNOME and on most Debian 13 desktops, and on other current desktop distributions. PulseAudio itself is no longer running on those systems, but pactl and PulseAudio volume controls still work, because pipewire-pulse speaks the same protocol.
Check what is running
systemctl --user status pipewire pipewire-pulse wireplumber
pactl info | grep 'Server Name'
With PipeWire you see Server Name: PulseAudio (on PipeWire 1.x.y). These are user services: they run in your login session, so do not start them with sudo. If anything is missing, install it:
# Debian 12/13 (the metapackage pulls in wireplumber, pipewire-pulse, pipewire-alsa)
sudo apt install pipewire-audio
# Arch
sudo pacman -S pipewire pipewire-pulse pipewire-alsa wireplumber
On Debian, installing pipewire-audio removes PulseAudio so the two do not fight over the devices. Log out and back in afterwards.
Everyday control with wpctl
wpctl status
This prints a tree of devices, sinks (outputs), sources (inputs) and streams, each with a number. The default sink and source are marked with *. Use the numbers, or the names @DEFAULT_AUDIO_SINK@ and @DEFAULT_AUDIO_SOURCE@:
wpctl set-default 53 # make sink 53 the default output
wpctl set-volume @DEFAULT_AUDIO_SINK@ 50% # volume to 50%
wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%+ # up 5%
wpctl set-volume -l 1.0 @DEFAULT_AUDIO_SINK@ 5%+ # up 5%, but never above 100%
wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle
wpctl set-mute @DEFAULT_AUDIO_SOURCE@ 1 # mute the microphone
wpctl inspect 53 # all properties of node 53
A volume of 1.0 is 100%. These commands are handy for keyboard shortcuts in window managers that have no volume applet.
Profiles: HDMI versus analog
Many sound cards have several profiles. A typical Intel HD Audio device offers analog stereo (speakers and headphone jack) and several HDMI or DisplayPort outputs, but only one profile is active at a time. If your monitor's speakers are missing from the list, switch the profile of the device (the device number, not the sink number):
wpctl inspect 45 | grep -i profile
wpctl set-profile 45 3
Profile numbers differ between machines; a graphical mixer such as pavucontrol (Configuration tab) shows them by name.
The same with pactl
pactl list short sinks
pactl set-default-sink alsa_output.pci-0000_00_1f.3.analog-stereo
pactl set-sink-volume @DEFAULT_SINK@ 50%
pactl set-sink-mute @DEFAULT_SINK@ toggle
pactl list cards # shows profiles by name
pactl set-card-profile alsa_card.pci-0000_00_1f.3 output:hdmi-stereo
Device names above are examples; copy yours from the list commands.
The ALSA level
List the sound cards and devices the kernel found:
aplay -l
cat /proc/asound/cards
If aplay -l says no soundcards found, the problem is below PipeWire: the driver or its firmware did not load (see the checklist). Otherwise open the hardware mixer:
alsamixer
alsamixer may open on the default (PipeWire) device rather than your card. Press F6 (or S) to choose the real sound card. Move between controls with the arrow keys, change levels with Up and Down, and press M to mute or unmute: MM under a control means muted, OO means on. F4 shows capture (recording) controls. Laptops often have separate Speaker, Headphone and Master controls that all need to be up. Leave with Esc. From a script:
amixer sset Master unmute
amixer sset Master 80%
Test the speakers directly. speaker-test plays test sounds on each channel in turn and names it (front left, front right) so you can check wiring:
speaker-test -c 2 -t wav
Stop it with Ctrl+C. To record and play back a five-second microphone test through PipeWire:
arecord -d 5 -f cd test.wav && aplay test.wav
No sound: checklist
- Right output? Run
wpctl statusand look at which sink has the*. Plugging in a monitor or Bluetooth headset can change it. Set it withwpctl set-default. - Muted? Check the desktop volume,
wpctl get-volume @DEFAULT_AUDIO_SINK@(it shows the volume and whether it is muted), and the hardware controls inalsamixeron the real card. - Wrong profile? HDMI sound needs the HDMI profile; analog speakers need an analog one. A profile set to "Off" silences the whole device.
- Sound server running? If
pactl infosaysConnection refused,pipewire-pulseis not running. Restart the user services:systemctl --user restart pipewire pipewire-pulse wireplumber. - Bad saved state? WirePlumber remembers volumes and defaults in
~/.local/state/wireplumber/. Removing that folder and restarting the services above resets them. - No card at all? Look at the kernel log:
sudo journalctl -k -b | grep -i -E 'snd|sof|audio'. Many laptops need the Sound Open Firmware (SOF) files: packagefirmware-sof-signedon Debian (fromnon-free-firmware) and Ubuntu,alsa-sof-firmwareon Fedora,sof-firmwareon Arch. Kernel messages fromsofabout a firmware file that failed to load confirm it. Some laptops with Cirrus Logic amplifiers need further firmware or a newer kernel. See Hardware HOWTO. - Two sound servers? Do not run PulseAudio and pipewire-pulse at the same time. Remove PulseAudio, or on Debian install
pipewire-audio, which does it for you. - The audio group. Do not add users to the
audiogroup as a fix: it gives programs direct device access, which can block other programs from sharing the device. Desktop logins already get access to sound devices.
Bluetooth headsets
A headset has two kinds of profile: high-quality stereo playback (A2DP) and a lower-quality mode that also enables the microphone (HFP/HSP). If music suddenly sounds like a phone call, an app has switched the headset to the microphone mode; pick the A2DP profile again in your sound settings or with wpctl set-profile. If there is no sound after pairing, make the headset the default sink.
The classic Alsa-sound mini-HOWTO, about compiling ALSA drivers for 2.2 kernels, is kept by the Linux Documentation Project at tldp.org.
Sources
- PipeWire, project home page
- wpctl(1), Debian manual pages
- pactl(1), Debian manual pages
- alsamixer(1), aplay(1) and speaker-test(1), Debian manual pages
- PipeWire, PipeWire/Troubleshooting and Advanced Linux Sound Architecture, ArchWiki
- PipeWire, Debian Wiki
- Changes/DefaultPipeWire, Fedora Project