Sound on Linux today: ALSA, PipeWire and fixing no sound

Updated November 2026

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

Apps (PulseAudio API)browsers, players Apps (ALSA API)aplay, games Apps (JACK API)music production PipeWire (pipewire, pipewire-pulse)mixing, routing, per-app volume WirePlumberpolicy, defaults: wpctl Kernel ALSA drivers (snd_hda_intel, SOF,snd_usb_audio): /dev/snd, alsamixer Bluetooth (BlueZ)
Every program talks to PipeWire, whichever sound interface it was written for; PipeWire reaches the hardware through ALSA or Bluetooth.
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 (through pipewire-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

  1. Right output? Run wpctl status and look at which sink has the *. Plugging in a monitor or Bluetooth headset can change it. Set it with wpctl set-default.
  2. Muted? Check the desktop volume, wpctl get-volume @DEFAULT_AUDIO_SINK@ (it shows the volume and whether it is muted), and the hardware controls in alsamixer on the real card.
  3. Wrong profile? HDMI sound needs the HDMI profile; analog speakers need an analog one. A profile set to "Off" silences the whole device.
  4. Sound server running? If pactl info says Connection refused, pipewire-pulse is not running. Restart the user services: systemctl --user restart pipewire pipewire-pulse wireplumber.
  5. Bad saved state? WirePlumber remembers volumes and defaults in ~/.local/state/wireplumber/. Removing that folder and restarting the services above resets them.
  6. 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: package firmware-sof-signed on Debian (from non-free-firmware) and Ubuntu, alsa-sof-firmware on Fedora, sof-firmware on Arch. Kernel messages from sof about 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.
  7. 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.
  8. The audio group. Do not add users to the audio group 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