$linuxjunkies
>

Configure PipeWire for Pro Audio

Configure PipeWire as a full JACK replacement for pro audio: low-latency buffer tuning, realtime scheduling privileges, MIDI bridging, and DAW integration.

AdvancedUbuntuDebianFedoraArch12 min readUpdated June 7, 2026

Before you start

  • A working desktop session (Wayland or X11) with a supported audio interface
  • sudo privileges to modify system limits and install packages
  • PipeWire 0.3.65 or newer — check with pipewire --version before starting
  • Basic familiarity with systemd user services and config file editing

PipeWire has matured into a genuine replacement for both PulseAudio and JACK, offering low-latency audio, pro-grade routing, and MIDI bridging under a single daemon. If you're running a DAW, working with hardware synthesizers, or recording live inputs, this guide gets PipeWire tuned for serious work — not casual desktop use.

Prerequisites and Architecture Overview

PipeWire exposes compatibility layers: pipewire-pulse replaces PulseAudio, and pipewire-jack provides a JACK-compatible interface. Applications that speak JACK natively (Ardour, Carla, Hydrogen) talk to PipeWire transparently through this layer. You never run jackd separately — PipeWire handles scheduling itself.

  • pipewire — the core daemon
  • pipewire-pulse — PulseAudio replacement session service
  • pipewire-jack — JACK compatibility shim
  • wireplumber — session/policy manager (replaced pipewire-media-session)
  • pipewire-alsa — ALSA routing through PipeWire

Step 1: Install PipeWire and the JACK Bridge

Most modern desktops ship PipeWire already. Verify the running version first:

pipewire --version
wireplumber --version

Target PipeWire ≥ 0.3.65 and WirePlumber ≥ 0.4.14 for stable pro audio support. Install any missing pieces:

Debian / Ubuntu (24.04 LTS or 22.04 with backports)

sudo apt install pipewire pipewire-audio pipewire-jack pipewire-alsa \
  wireplumber libspa-0.2-jack qpwgraph

Fedora 39/40

sudo dnf install pipewire pipewire-jack-audio-connection-kit \
  wireplumber pipewire-alsa qpwgraph

Arch Linux

sudo pacman -S pipewire pipewire-jack pipewire-alsa pipewire-pulse \
  wireplumber qpwgraph

On Ubuntu 22.04, if PulseAudio is still active, remove it cleanly before proceeding:

sudo apt remove pulseaudio pulseaudio-utils
systemctl --user --now enable pipewire pipewire-pulse wireplumber

Step 2: Grant Realtime Scheduling Privileges

Low latency requires your user to raise process priority above normal scheduling. Without this, you'll get xruns (buffer underruns) constantly. The modern approach uses RealtimeKit (rtkit), which PipeWire queries automatically, or a limits.conf / sysctl entry.

Install and enable rtkit

# Debian/Ubuntu
sudo apt install rtkit

# Fedora
sudo dnf install rtkit

# Arch
sudo pacman -S realtime-privileges rtkit
sudo systemctl enable --now rtkit-daemon

Add your user to the audio and realtime groups

sudo usermod -aG audio,realtime $USER

Log out and back in (or reboot) for group membership to take effect. Verify with groups.

Set memory-lock and RT priority limits

Create a limits file so processes can lock memory (prevents swapping audio buffers):

sudo tee /etc/security/limits.d/99-realtime-audio.conf <<'EOF'
@audio   -  rtprio     95
@audio   -  memlock    unlimited
@realtime - rtprio     95
@realtime - memlock    unlimited
EOF

Step 3: Tune PipeWire for Low Latency

PipeWire's quantum (buffer size) and sample rate are configured through drop-in files under ~/.config/pipewire/. Start by copying the default configs:

mkdir -p ~/.config/pipewire
cp /usr/share/pipewire/pipewire.conf ~/.config/pipewire/pipewire.conf

Rather than editing the main file, use a drop-in override — cleaner and upgrade-safe:

mkdir -p ~/.config/pipewire/pipewire.conf.d
tee ~/.config/pipewire/pipewire.conf.d/99-pro-audio.conf <<'EOF'
context.properties = {
    default.clock.rate          = 48000
    default.clock.quantum       = 128
    default.clock.min-quantum   = 32
    default.clock.max-quantum   = 8192
    default.clock.allowed-rates = [ 44100 48000 88200 96000 ]
}
EOF

A quantum of 128 at 48 kHz gives roughly 2.7 ms latency. Go lower (64 or 32) only if your hardware and CPU reliably handle it without xruns. Push it down gradually.

Also tune the JACK node settings for compatibility with DAWs that negotiate their own buffer sizes:

tee ~/.config/pipewire/pipewire.conf.d/99-jack-settings.conf <<'EOF'
jack.properties = {
    node.latency = 128/48000
    node.rate    = 1/48000
}
EOF

Restart PipeWire to apply:

systemctl --user restart pipewire pipewire-pulse wireplumber

Step 4: Configure the MIDI Bridge

PipeWire includes pipewire-alsa-seq support and a built-in MIDI bridge. From PipeWire 0.3.65+, the MIDI bridge is handled by the libpipewire-module-midi module loaded automatically. For hardware MIDI devices, ensure they appear in the device list:

aconnect -l
pw-cli list-objects | grep -i midi

To bridge legacy ALSA sequencer MIDI to PipeWire's graph (needed for some older synth editors):

mkdir -p ~/.config/pipewire/pipewire.conf.d
tee ~/.config/pipewire/pipewire.conf.d/99-midi-bridge.conf <<'EOF'
context.modules = [
    { name = libpipewire-module-midi }
    { name = libpipewire-module-alsa-seq
      args = {
          alsa.seq.bridge = true
      }
    }
]
EOF
systemctl --user restart pipewire wireplumber

Use qpwgraph or Carla to visually wire MIDI ports between devices and software instruments — it works identically to QjackCtl's patchbay but targets PipeWire natively.

Step 5: Point JACK Applications at PipeWire

Applications linking against libjack need to resolve to PipeWire's JACK shim instead. This is handled by the pw-jack wrapper or by replacing the system JACK library symlinks.

Wrapper method (safest)

pw-jack ardour
pw-jack guitarix
pw-jack carla

System-wide replacement (Arch / Fedora)

Arch's pipewire-jack package installs a JACK2-compatible library that intercepts calls without needing pw-jack. Check that libjack.so points to PipeWire:

ldconfig -p | grep libjack
# Should show /usr/lib/pipewire-X.X/jack/libjack.so.0

On Debian/Ubuntu, use the alternatives system:

sudo update-alternatives --config libjack-0.conf

Verification

Confirm PipeWire is running and the quantum matches your settings:

pw-cli info 0 | grep -E 'clock|quantum|rate'

Check for xruns in real time during a session:

pw-top

pw-top shows per-node latency, quantum, and error counts. The ERR column should stay at 0 during audio work. If it climbs, increase your quantum or investigate CPU frequency scaling.

Verify the JACK bridge is live:

pw-jack jack_lsp

You should see system playback and capture ports listed, identical to a running JACK server.

Troubleshooting

High xrun count / audio dropouts

  • Disable CPU frequency scaling: sudo cpupower frequency-set -g performance (install linux-tools or cpupower package). Revert after the session.
  • Check IRQ affinity — USB audio interfaces compete with other USB IRQs. Dedicated PCIe audio cards perform better at ultra-low quantum.
  • Increase quantum to 256 or 512 to confirm hardware is the bottleneck before tuning further down.

Application says JACK server is not running

  • Make sure you launched the app with pw-jack or that the libjack alternatives point to PipeWire.
  • Confirm pipewire-jack is installed: pacman -Q pipewire-jack / rpm -q pipewire-jack-audio-connection-kit / dpkg -l pipewire-jack.

MIDI device not visible in PipeWire graph

  • Check dmesg for USB device recognition and confirm the ALSA sequencer module is loaded: lsmod | grep snd_seq.
  • The ALSA MIDI bridge module must be loaded — re-check your 99-midi-bridge.conf drop-in and restart PipeWire.

WirePlumber resets quantum after session manager starts

WirePlumber can override your quantum via its own config. Create a WirePlumber override:

mkdir -p ~/.config/wireplumber/wireplumber.conf.d
tee ~/.config/wireplumber/wireplumber.conf.d/99-quantum.conf <<'EOF'
monitor.alsa.rules = [
  {
    matches = [ { node.name = "~alsa_output.*" } ]
    actions = { update-props = { api.alsa.period-size = 128 } }
  }
]
EOF
tested on:Ubuntu 24.04Fedora 40Arch rollingDebian 12

Frequently asked questions

Do I need to run jackd alongside PipeWire?
No. PipeWire's JACK compatibility layer replaces jackd entirely. Running both simultaneously will cause port conflicts and is not supported.
What is the lowest stable quantum I can expect?
On a modern CPU with a dedicated PCIe audio interface, 64 or even 32 samples at 48 kHz is achievable. USB audio interfaces typically need 128 or higher due to USB interrupt timing.
Will PipeWire handle 96 kHz and 192 kHz sample rates?
Yes, add those rates to default.clock.allowed-rates in your drop-in config. PipeWire resamples other streams automatically, though 192 kHz significantly increases CPU load per quantum.
Can I use Ardour, Reaper, or LMMS without any changes?
Ardour and LMMS link against JACK natively and work via pw-jack or the system-wide shim with no application-side changes. Reaper also works through pw-jack; the Linux native build detects JACK automatically.
WirePlumber keeps changing my quantum — how do I lock it?
Create a WirePlumber drop-in under ~/.config/wireplumber/wireplumber.conf.d/ that sets api.alsa.period-size on your output node explicitly. This overrides WirePlumber's default adaptive behavior.

Related guides