How to Configure PipeWire for Audio on Arch Linux

This guide explains how to set up PipeWire for audio on Arch Linux, including installation, configuration, troubleshooting.

PipeWire has rapidly become the new standard multimedia server on many modern Linux distributions, offering a unified solution for handling audio and video streams. Initially developed by Red Hat for professional audio/video use cases, it has now matured into a full replacement for both PulseAudio and JACK. Arch Linux, being a bleeding-edge rolling release distribution, offers robust support for PipeWire and makes it easy for users to switch or configure it for various use cases.

This article will walk you through configuring PipeWire for audio on Arch Linux, explaining the relevant components, installation process, configuration steps, troubleshooting tips, and how to replace PulseAudio or JACK entirely.


What is PipeWire?

PipeWire is a server for handling multimedia streams. It is designed to support a wide range of applications, including:

  • Desktop audio (similar to PulseAudio)
  • Low-latency pro audio (similar to JACK)
  • Video capture and screen sharing
  • Secure sandboxed audio/video streams (e.g., in Flatpak apps)

Advantages of PipeWire

  • Unified audio/video handling
  • Compatibility with PulseAudio and JACK
  • Improved Bluetooth audio support
  • Better performance and lower latency
  • Security enhancements with sandboxing support

Prerequisites

Before diving into configuration, ensure you have the following:

  • A working Arch Linux installation
  • A user with sudo privileges
  • A desktop environment or window manager (e.g., GNOME, KDE, i3, etc.)

Start by installing PipeWire and its audio components.

sudo pacman -S pipewire pipewire-audio pipewire-pulse pipewire-alsa wireplumber

Optional (for JACK compatibility)

sudo pacman -S pipewire-jack

Optional (Bluetooth support)

sudo pacman -S pipewire-bluetooth

Explanation of packages:

  • pipewire: Core PipeWire service.
  • pipewire-audio: Audio components for PipeWire.
  • pipewire-pulse: PulseAudio replacement compatibility layer.
  • pipewire-alsa: ALSA plugin compatibility.
  • pipewire-jack: JACK server replacement.
  • wireplumber: A session and policy manager for PipeWire, replacing the older pipewire-media-session.

Step 2: Enable and Start the PipeWire Services

You typically don’t need to manually enable PipeWire as it’s user-level. But you can check and manage the services using systemctl --user.

Start and enable services

systemctl --user enable --now pipewire pipewire-pulse wireplumber

Verify PipeWire is running

systemctl --user status pipewire

You should see the service active and running.


Step 3: Remove or Disable PulseAudio (if applicable)

If you’re migrating from PulseAudio, make sure it’s not running.

Remove PulseAudio (optional)

sudo pacman -Rns pulseaudio

If you prefer to disable it temporarily (without uninstalling)

systemctl --user mask pulseaudio

Then restart your session or reboot.


Step 4: Check Audio Functionality

Once everything is installed and running:

Test audio

You can use speaker-test to test:

speaker-test -t wav

Or play a sound file with a media player like mpv, vlc, or aplay.

Check audio levels

Use a graphical tool:

sudo pacman -S pavucontrol

Run it:

pavucontrol

It should work with PipeWire via the pipewire-pulse layer.


Step 5: Fine-Tuning and Configuration

PipeWire uses configuration files typically stored in /usr/share/pipewire/ and /etc/pipewire/. It is recommended to copy the default configuration to /etc/pipewire/ if you plan to edit it.

Copy default configuration

sudo cp -r /usr/share/pipewire /etc/pipewire

Edit the main config

sudo nano /etc/pipewire/pipewire.conf

You can also configure session behavior via:

sudo nano /etc/pipewire/media-session.d/bluez-monitor.conf  # For Bluetooth

However, WirePlumber uses Lua scripts for configuration instead. The configuration files can be found at:

/etc/wireplumber/

You can tweak routing, volume defaults, or even device priorities using these Lua scripts. For advanced customization, refer to the WirePlumber documentation.


Step 6: Configure Bluetooth Audio

PipeWire improves Bluetooth audio, including better support for codecs like AAC, LDAC, and aptX.

Install required packages (if not already done)

sudo pacman -S pipewire-bluetooth bluez bluez-utils

Enable Bluetooth service

sudo systemctl enable --now bluetooth

Connect to your Bluetooth device

bluetoothctl

Commands inside bluetoothctl:

power on
agent on
scan on
pair <MAC_ADDRESS>
connect <MAC_ADDRESS>
trust <MAC_ADDRESS>

You should now see the device in pavucontrol.


Step 7: Verify Audio Backend Usage

To confirm that applications are using PipeWire:

pw-cli ls Node

Or:

pw-top

You can also run:

pactl info

This should show:

Server Name: PulseAudio (on PipeWire x.x.x)

Which means the PulseAudio compatibility layer is working properly.


Step 8: Use JACK Applications with PipeWire

PipeWire’s JACK support allows running JACK apps without needing to install the traditional JACK server.

Confirm JACK support

pw-jack <jack-app>

For example:

pw-jack qjackctl

Or:

pw-jack carla

The pw-jack command wraps the app with environment variables for JACK compatibility with PipeWire.


Step 9: Autostart PipeWire with the Desktop Session

Most modern desktops already support PipeWire out of the box (GNOME, KDE). If using a minimal WM like i3 or bspwm, make sure to start PipeWire and WirePlumber in your session.

Add the following to your .xinitrc, .xprofile, or the startup script for your window manager:

systemctl --user start pipewire
systemctl --user start wireplumber

Troubleshooting Tips

No sound?

  • Check with pavucontrol that output is not muted or set to the wrong device.
  • Make sure no other audio server (like PulseAudio or JACK) is interfering.
  • Restart PipeWire:
systemctl --user restart pipewire pipewire-pulse wireplumber

Bluetooth not working?

  • Ensure pipewire-bluetooth is installed.
  • Ensure bluez and bluez-utils are running.
  • Use bluetoothctl to trust and connect the device.

JACK apps crash?

  • Try using pw-jack prefix.
  • Verify pipewire-jack is installed.
  • Check logs:
journalctl --user -xe

Conclusion

PipeWire is a powerful and flexible audio (and video) server that has quickly become a worthy replacement for both PulseAudio and JACK. On Arch Linux, configuring PipeWire is straightforward, and thanks to the rolling release nature of Arch, users can access the latest features and fixes.

By following the steps outlined in this guide, you can set up a fully functional audio system with support for regular playback, Bluetooth audio, pro-audio workflows with JACK, and fine-grained control over devices and streams.

As PipeWire continues to evolve, expect even greater stability and integration. Whether you’re a casual desktop user, a gamer, or a professional audio engineer, PipeWire on Arch Linux has the tools you need.