PipeWire is a new low-level multimedia framework. It aims to offer capture and playback for both audio and video with minimal latency and support for PulseAudio-, JACK-, ALSA- and GStreamer-based applications. The Daemon based on the framework can be configured to be both an audio server (with PulseAudio and JACK features) and a video capture server. It is also designed to replace Pulseadio and JACK.
Usually you will Install these packages:
sudo pacman -S pipewire pipewire-pulse wireplumber pipewire-alsa
Install pipewire-jack instead of pipewire-alsa if you are using jack instead of alsa (default):
sudo pacman -S pipewire pipewire-pulse wireplumber pipewire-jack
pipewire-pulse will replace pulseaudio and pulseaudio-bluetooth providing a layer of compatibility with pulseaudio applications e.g. pavucontrol.
wireplumber is the "Session / policy manager implementation for PipeWire" and it is usually needed.
Factory config files were moved from /etc/pipewire to /usr/share/pipewire. System wide config can still be done in /etc/pipewire and user config in $HOME/.config/pipewire/, but files must be copied from /usr/share/pipewire. But normally, no further action is needed. PipeWire handles Bluetooth audio devices if the pipewire-pulse package is installed.
Because pipewire does not need any service for starting, it's necessary to add the relevant start up commands, to autostart on your Desktop Environment. But after logging out processes can remain active and cause problems. Artix used to ship a script that takes care of that. You can launch that instead of just adding the commands.
To just use the commands you can create a bash script, which you can add at the startup of your DE (KDE/XFCE/GNOME allow the addition of such scripts). Only add programs from the pipewire-related packages you have installed. Here it is assumed you have installed the packages world/pipewire, world/pipewire-pulse and world/wireplumber:
#!/bin/sh /usr/bin/pipewire & /usr/bin/pipewire-pulse & /usr/bin/wireplumber
Or add it to your ~/.xinitrc, if you use it:
~/.xinitrc ... /usr/bin/pipewire & /usr/bin/pipewire-pulse & /usr/bin/wireplumber & exec openbox-session
Reboot or re-login to see the effect.
For dinit, assuming you installed the *-dinit packages, specifically:
sudo pacman -S pipewire-dinit pipewire-pulse-dinit wireplumber-dinit
Enable pipewire pipewire-pulse wireplumber:
dinitctl enable pipewire Service 'pipewire' has been enabled. Service 'pipewire' started. dinitctl enable pipewire-pulse Service 'pipewire-pulse' has been enabled. Service 'pipewire-pulse' started. dinitctl enable wireplumber Service 'wireplumber' has been enabled. Service 'wireplumber' started.
Should be available immediately
For more infos or troubleshooting see Archlinux's wiki page
To avoid speakers to go idle you can create the file ~/.config/wireplumber/ with this content:
monitor.alsa.rules = [ { matches = [ { # Matches all sources node.name = "~alsa_input.*" }, { # Matches all sinks node.name = "~alsa_output.*" } ] actions = { update-props = { session.suspend-timeout-seconds = 0 } } } ] # bluetooth devices monitor.bluez.rules = [ { matches = [ { # Matches all sources node.name = "~bluez_input.*" }, { # Matches all sinks node.name = "~bluez_output.*" } ] actions = { update-props = { session.suspend-timeout-seconds = 0, dither.method = "wannamaker3", dither.noise = 2, } } } ]