How To Install PipeWire on Debian 13

If you are running Debian 13 “Trixie” and your audio setup still depends on PulseAudio, you are missing out on a significantly more capable sound server. PipeWire is the new default audio and video routing server in Debian 13, and knowing how to install PipeWire on Debian 13 correctly means the difference between a broken audio stack and a system that just works.
This guide walks you through every step needed to get PipeWire running on your Debian 13 machine, from installing core packages to enabling ALSA, JACK, and Bluetooth layers. Whether you are doing a fresh Trixie install or upgrading from Debian 12 Bookworm, you will have a fully functional PipeWire on Debian 13 setup by the end of this tutorial.
PipeWire 1.4.2 ships as the default audio server for most Debian 13 desktop environments, replacing PulseAudio as the standard sound daemon. However, not every Debian 13 installation activates PipeWire automatically, particularly minimal installs, server setups, and upgrades from Bookworm. When you upgrade from Debian 12 to Debian 13 rather than doing a clean install, PipeWire does not get installed automatically and PulseAudio errors can appear.
This guide uses the official Debian Wiki recommendations, real-world community feedback, and tested commands sourced from authoritative Debian resources to make sure you get this right on the first try.
Prerequisites Before You Begin
Before running a single command, confirm you have everything in place. Skipping this step is the most common reason installations go sideways.
- A working Debian 13 “Trixie” installation (fresh install or upgrade from Bookworm)
- A non-root user account with sudo privileges
- An active internet connection for downloading packages
- Basic comfort using the Linux terminal
- Knowledge of your current audio server. Run this to check:
pactl info | grep "Server Name"
- If you see
PulseAudio (on PipeWire ...)in the output, PipeWire is already active and you only need to verify optional layers - If you see
PulseAudiowithout any mention of PipeWire, follow this guide fully - If you installed Debian 13 with GNOME as the desktop environment, PipeWire may already be active as the default
Step 1: Update Your Debian 13 System
Start by refreshing your package lists and applying any pending upgrades. This prevents dependency conflicts during the PipeWire installation.
sudo apt update && sudo apt upgrade
What this does: apt update fetches the latest package metadata from your configured repositories. apt upgrade applies all available upgrades to your current packages. Installing audio packages on a stale package list can trigger conflicts between PulseAudio and PipeWire packages, particularly around shared libraries.
Why this matters: If a kernel upgrade was applied, reboot your machine before proceeding. Running a new kernel with old module references loaded in memory can cause unexpected audio driver behavior.
sudo reboot
After the reboot, log back in and continue.
Step 2: Install PipeWire and Core Packages
This is the central step of the entire process. Debian 13 provides a pipewire-audio metapackage that installs all required components in one command.
Install Using the pipewire-audio Metapackage (Recommended)
The pipewire-audio metapackage is the cleanest and most complete way to deploy PipeWire on Debian 13. It pulls in every critical component as a dependency automatically.
sudo apt install pipewire-audio
This single command installs the following packages:
- wireplumber — The session manager for PipeWire. It handles device policy and audio routing logic. This replaces the older
pipewire-media-session, which was abandoned upstream and is no longer shipped with Debian 13. - pipewire-pulse — A drop-in replacement for the PulseAudio daemon. All PulseAudio-compatible applications work without modification through this layer.
- pipewire-alsa — Routes ALSA audio clients through PipeWire, so applications using ALSA directly are covered.
- libspa-0.2-bluetooth — Provides Bluetooth audio support for the PipeWire stack.
Install Optional but Useful Packages
Depending on your use case, install these additional packages:
sudo apt install pipewire-jack libspa-0.2-libcamera pipewire-doc
- pipewire-jack — Enables JACK compatibility for professional audio applications like Ardour, Carla, or REAPER
- libspa-0.2-libcamera — Adds camera support for video calls, screensharing via Flatpak, and virtual camera applications
- pipewire-doc — Installs offline documentation useful for deeper configuration reference
Step 3: Disable PulseAudio to Prevent Conflicts
This step is critical. Running both PulseAudio and PipeWire simultaneously is the most common cause of broken audio after installation. They both attempt to claim the same audio socket.
Check If PulseAudio Is Still Running
systemctl --user status pulseaudio.service pulseaudio.socket
If either service shows as active, stop and disable them:
systemctl --user --now disable pulseaudio.service pulseaudio.socket
Mask PulseAudio Permanently
If PulseAudio keeps restarting automatically (a common situation when it was installed as a desktop dependency), mask it:
systemctl --user mask pulseaudio
What masking does: It prevents the service from being started by any mechanism, including dependency activation, until you explicitly unmask it. This is stronger than simply disabling.
Verify PulseAudio Is Gone
dpkg -l pulseaudio
The pipewire-audio metapackage is designed to remove PulseAudio automatically to prevent exactly this type of conflict. If pulseaudio still appears as installed, remove it manually:
sudo apt remove pulseaudio
Step 4: Enable PipeWire Systemd User Services
PipeWire runs as a per-user systemd service, not as root. Always run these commands as your regular user account without sudo.
Enable WirePlumber First
WirePlumber is the session manager. It must be running before PipeWire’s pulse compatibility layer can handle device routing properly.
systemctl --user --now enable wireplumber.service
Enable PipeWire and PipeWire-Pulse
systemctl --user --now enable pipewire pipewire-pulse
Reload the User Daemon
systemctl --user daemon-reload
What this does: Reloading the daemon tells systemd to re-read all service unit files in your user session. This is necessary when new service files were installed during the apt install step.
To restart all PipeWire services together at any point, use the officially recommended command:
systemctl --user restart wireplumber pipewire pipewire-pulse
Step 5: Verify Your PipeWire on Debian 13 Setup Is Running Correctly
Before configuring optional layers, confirm your installation is active and handling audio properly.
Check the Server Name
LANG=C pactl info | grep '^Server Name'
Expected output:
Server Name: PulseAudio (on PipeWire 1.4.2)
If you see this output, PipeWire is running and correctly handling PulseAudio-compatible applications.
Check Device and Stream Status
wpctl status
A healthy output looks like this:
Audio
├─ Devices:
│ 48. alsa_card.pci-0000_17_00.0 [alsa]
├─ Sinks:
│ * 65. alsa_output.pci-0000_17_00.0 [vol: 0.55]
├─ Sources:
│ * 68. alsa_input.pci-0000_17_00.0 [vol: 1.00]
The * symbol marks the currently active default input and output.
Verify ALSA Integration
LANG=C aplay -L | grep -A 1 default
Expected output:
default
Default ALSA Output (currently PipeWire Media Server)
Run a Quick Playback Test
speaker-test -c 2
If you hear audio from both channels, the core installation is working. If any check fails, jump to the Troubleshooting section below.
Step 6: Enable ALSA and JACK Compatibility Layers
This step configures deeper system audio integration for users who need to work with ALSA-native applications or professional JACK-dependent software.
Enabling ALSA Routing Through PipeWire
The pipewire-alsa package was already installed via the metapackage. Confirm ALSA routes through PipeWire using the aplay -L check from Step 5.
One important note for users upgrading from Debian 11 or older guides: you no longer need to create empty configuration files inside media-session.d/ when using WirePlumber. That directory does not exist in the WirePlumber workflow.
Enabling JACK Compatibility
Install pipewire-jack if you did not already:
sudo apt install pipewire-jack
To run a specific JACK application through PipeWire without changing system-wide libraries, use the pw-jack wrapper:
pw-jack ardour
For system-wide JACK library replacement so all JACK applications automatically use PipeWire, copy the linker configuration and refresh the library cache:
sudo cp /usr/share/doc/pipewire/examples/ld.so.conf.d/pipewire-jack-*.conf /etc/ld.so.conf.d/
sudo ldconfig
ARM64 users: Rename the config file to 0-pipewire-jack-aarch64-linux-gnu.conf before running ldconfig.
Step 7: Configure PipeWire Bluetooth Audio
Bluetooth audio support is included through libspa-0.2-bluetooth, which the pipewire-audio metapackage already installed.
Remove the PulseAudio Bluetooth Module
This module conflicts with PipeWire’s Bluetooth handling. Remove it:
sudo apt remove pulseaudio-module-bluetooth
Restart PipeWire services after removal:
systemctl --user restart wireplumber pipewire pipewire-pulse
Optional: Extend Bluetooth Codec Support
For users who need advanced Bluetooth codec control, create a WirePlumber configuration override:
mkdir -p ~/.config/wireplumber/wireplumber.conf.d/
nano ~/.config/wireplumber/wireplumber.conf.d/51-bluez-config.conf
Add the following content:
monitor.bluez.properties = {
bluez5.roles = [ a2dp_sink a2dp_source hsp_hs hsp_ag hfp_hf hfp_ag ]
bluez5.codecs = [ sbc sbc_xq aac ]
bluez5.enable-sbc-xq = true
bluez5.hfphsp-backend = "native"
bluez5.enable-hw-volume = true
}
Restart services to apply:
systemctl --user restart wireplumber pipewire pipewire-pulse
PipeWire selects the best available Bluetooth codec automatically in most situations. WirePlumber also supports automatic profile switching when an application requests microphone access.
Step 8: Configure PipeWire on Debian 13 for Performance Tuning
For most desktop users, the default configuration works well. For users doing audio production, game streaming, or running PipeWire under high CPU load, a few tuning adjustments make a real difference.
Create the User Configuration Directory
mkdir -p ~/.config/pipewire/pipewire.conf.d/
Set a Custom Sample Rate and Buffer Size
nano ~/.config/pipewire/pipewire.conf.d/custom-clock.conf
Add:
context.properties = {
default.clock.rate = 48000
default.clock.quantum = 256
default.clock.min-quantum = 256
}
Restart PipeWire to apply the new settings:
systemctl --user restart wireplumber pipewire pipewire-pulse
Monitor Runtime Performance
Use pw-top to inspect current quantum size and CPU usage per audio node in real time:
pw-top
Use wpctl inspect <ID> to get detailed properties on a specific device or node. Get the node ID from wpctl status first.
Important for Debian 12 upgraders: WirePlumber 0.5.x in Debian 13 uses a JSON-based configuration system. The older Lua-format config files from WirePlumber 0.4.x will not work and must be manually rewritten.
Step 9: Manage Audio Routing with GUI Tools
PipeWire enables arbitrary audio routing between any source and sink, a capability that previously required complex JACK patchbay setups. Two graphical tools are available from Debian 13’s repositories.
Install a PipeWire Patchbay
sudo apt install helvum qpwgraph
- helvum — GTK-based, lightweight, and straightforward. Good for simple routing between applications and hardware.
- qpwgraph — Qt-based, more feature-rich, and a strong replacement for QjackCtl. Recommended for users coming from a JACK workflow.
Both tools let you visually drag connections between PipeWire ports.
CLI Routing with pw-link
For sysadmins who prefer the terminal, pw-link creates and destroys connections between PipeWire ports without a GUI. It replaces JACK’s jack_connect and jack_disconnect commands directly.
List all available ports:
pw-link -l
Connect two ports:
pw-link <source-port> <destination-port>
Troubleshooting Common PipeWire Issues on Debian 13
Even with a clean install, a few issues come up regularly. Here are the most common problems and their solutions.
Problem 1: pactl info Still Shows PulseAudio as the Server
Cause: PulseAudio is still running and winning the socket race against PipeWire.
Fix:
systemctl --user mask pulseaudio
systemctl --user restart pipewire pipewire-pulse
Then re-run pactl info | grep "Server Name" to confirm.
Problem 2: Audio Skipping or Choppy Playback Under Load
Cause: PipeWire’s default quantum (buffer size) is too small for your system’s current load.
Temporary fix (applies immediately without restart):
pw-metadata -n settings 0 clock.force-quantum 2048
Permanent fix:
nano ~/.config/pipewire/pipewire.conf.d/fix-choppy.conf
Add:
context.properties = {
default.clock.quantum = 2048
default.clock.min-quantum = 2048
}
Restart services:
systemctl --user restart wireplumber pipewire pipewire-pulse
Problem 3: pacmd Fails with “No PulseAudio Daemon Running”
Cause: The pacmd command is PulseAudio-specific and does not work with PipeWire’s compatibility layer.
Fix: Use pactl instead. It is fully functional against a PipeWire backend and covers all common use cases.
Problem 4: Bluetooth Device Fails or Shows “Protocol Not Available”
Cause: The pulseaudio-module-bluetooth package is still installed and conflicting with PipeWire’s Bluetooth layer.
Fix:
sudo apt remove pulseaudio-module-bluetooth
sudo apt install libspa-0.2-bluetooth
systemctl --user restart wireplumber pipewire pipewire-pulse
Also confirm bluez is installed:
sudo apt install bluez
Problem 5: Volume Resets to 40% on Every Login (SDDM Users)
Cause: SDDM starts its own PipeWire and WirePlumber session during login, which overwrites your saved user volume state.
Fix:
sudo install -o sddm -g sddm \
~/.local/state/wireplumber/default-routes \
/var/lib/sddm/.local/state/wireplumber/default-routes
Congratulations! You have successfully installed PipeWire. Thanks for using this tutorial for installing PipeWire server for handling audio and video streams on your Debian 13 “Trixie” system. For additional help or useful information, we recommend you check the official PipeWire website.