DebianDebian Based

How To Install PipeWire on Debian 13

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.

Table of Contents

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 PulseAudio without 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.

VPS Manage Service Offer
If you don’t have time to do all of this stuff, or if this is not your area of expertise, we offer a service to do “VPS Manage Service Offer”, starting from $10 (Paypal payment). Please contact us to get the best deal!

r00t

r00t is a dedicated and highly skilled Linux Systems Administrator with over a decade of progressive experience in designing, deploying, and maintaining enterprise-grade Linux infrastructure. His professional journey began in the telecommunications industry, where early exposure to Unix-based operating systems ignited a deep and enduring passion for open-source technologies and server administration.​ Throughout his career, r00t has demonstrated exceptional proficiency in managing large-scale Linux environments, overseeing more than 300 servers across development, staging, and production platforms while consistently achieving 99.9% system uptime. He holds advanced competencies in Red Hat Enterprise Linux (RHEL), Debian, and Ubuntu distributions, complemented by hands-on expertise in automation tools such as Ansible, Terraform, Bash scripting, and Python.
Back to top button