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.
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(installlinux-toolsorcpupowerpackage). 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-jackor that the libjack alternatives point to PipeWire. - Confirm
pipewire-jackis installed:pacman -Q pipewire-jack/rpm -q pipewire-jack-audio-connection-kit/dpkg -l pipewire-jack.
MIDI device not visible in PipeWire graph
- Check
dmesgfor 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.confdrop-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 } }
}
]
EOFFrequently 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
Linux Clipboards Explained (+ Clipboard Managers)
Learn the difference between Linux's PRIMARY and CLIPBOARD selections, use xclip, xsel, and wl-clipboard from the terminal, and manage history with GPaste or Klipper.
Configure LibreOffice for Daily Use
Configure LibreOffice for daily use: set default save formats for MS Office interop, tune autosave, install fonts, and add productivity extensions.
Configure the Touchpad and Multitouch Gestures
Configure Linux touchpad behavior and multitouch gestures using libinput, libinput-gestures, and native GNOME and KDE Plasma settings on both Wayland and X11.
Wayland vs X11: How to Choose and Configure Each
Know when to run Wayland or X11, how to check your current session, switch at login with GDM/SDDM/LightDM, and handle NVIDIA and XWayland edge cases.