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. PipeWire handles bluetooth audio devices if the pipewire-pulse package is installed.
wireplumber is the "Session / policy manager implementation for PipeWire" and it is usually needed.
The default configuration of pipewire is usually sufficient. In most cases, no further configuration is needed.
The default configuration files are located in /usr/share/pipewire. The system-wide configuration files are located in /etc/pipewire. The user-specific configuration files are located in $HOME/.config/pipewire.
PipeWire is not started by default. You need to start it manually or enable it to start automatically at login. There are many ways to start PipeWire, depending on your system and preferences.
Be aware Depending on how you start PipeWire, The processes can remain active after logging out. This can cause issues.
In general, you need to start the following three processes in the exact order:
/usr/bin/pipewire /usr/bin/pipewire-pulse /usr/bin/wireplumber
You can use any of the methods mentioned in Archlinux Autostarting to start these processes automatically at login. Here are some common methods:
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
If you are using xinit, you can add the following lines to your ~/.xinitrc file:
~/.xinitrc ... /usr/bin/pipewire & /usr/bin/pipewire-pulse & /usr/bin/wireplumber & exec openbox-session // or your preferred window manager
This will start PipeWire, PipeWire PulseAudio, and WirePlumber when you start X11. Make sure to replace openbox-session with your preferred window manager or desktop environment.
If you are using a desktop environment that supports XDG autostart, you can create a .desktop file in the ~/.config/autostart directory. This file will be executed when you log in to your desktop environment.
~/.config/autostart/custom-pipewire.desktop ... [Desktop Entry] Type=Application Exec=/path/to/your/start-pipewire.sh Hidden=false NoDisplay=false X-GNOME-Autostart-enabled=true Name=PipeWire Comment=Start PipeWire and WirePlumber
and
start-pipewire.sh ... #!/bin/bash /usr/bin/pipewire & /usr/bin/pipewire-pulse & /usr/bin/wireplumber &
You can use artix-pipewire-launcher instead of start-pipewire.sh. You can use pipewire.desktop instead of custom-pipewire.desktop.
If you are using a desktop environment like KDE, XFCE, or GNOME, you can create a script With the following content:
~/.config/autostart/start-pipewire.sh ... #!/bin/sh /usr/bin/pipewire & /usr/bin/pipewire-pulse & /usr/bin/wireplumber &
Then add the script to your desktop environment's startup applications. The method for doing this varies by desktop environment, but it usually involves going to the settings or preferences and finding a section for startup applications or autostart. For more information, refer to Archlinux's Autostarting page.
Reboot or re-login to see the effect.
You can use artix-pipewire-launcher instead of start-pipewire.sh.
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
PipeWire can start session managers and other servers automatically. This is done by creating a file in .config/pipewire/pipewire.conf.d called 02-autostart.conf
~/.config/pipewire/pipewire.conf.d/02-autostart.conf ... context.exec = [ { path = "/usr/bin/wireplumber" args = "" condition = [ { exec.session-manager = null } { exec.session-manager = true } ] } { path = "/usr/bin/pipewire-pulse" args = "" condition = [ { exec.pipewire-pulse = null } { exec.pipewire-pulse = true } ] } ]
However, This method is not recommended. This method still requires you to start PipeWire using one of the methods mentioned above. It is not a replacement for starting PipeWire. It is just a way to start session managers and other servers automatically when PipeWire starts.
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, } } } ]