PipeWire
To use PipeWire, install the pipewire
package.
pipewire(1) should be started as a user. Run the pipewire command in a terminal emulator in your session.
$ pipewire
When pipewire works as expected, use the autostarting mechanism of your desktop
environment or startx. The pipewire
package ships Desktop
Entry files
for pipewire
and pipewire-pulse
in /usr/share/applications
. If your
environment supports the Desktop Application Autostart
Specification,
you can enable pipewire by symlinking the desktop files to the autostart
directory:
# ln -s /usr/share/applications/pipewire.desktop /etc/xdg/autostart/pipewire.desktop
Session Management
In PipeWire, a session manager assumes responsibility for interconnecting media
sources and sinks as well as enforcing routing policy. Without a session
manager, PipeWire will not function. The reference
pipewire-media-session
was originally provided in the Void pipewire
package and configured to run by
default to satisfy this requirement. However, pipewire-media-session
is
deprecated and the authors recommend using
WirePlumber in its place.
Install the wireplumber
package to use this session manager with PipeWire.
The standard Void configuration, which causes pipewire
to launch
pipewire-media-session
automatically, must be overridden to use wireplumber
.
The only change necessary is to comment out the pipewire-media-session
invocation in the context.exec
section, which can be done with a single sed
substitution. To make this configuration change visible to all users, place the
new configuration file in /etc/pipewire
:
# mkdir -p /etc/pipewire
# sed '/path.*=.*pipewire-media-session/s/{/#{/' \
/usr/share/pipewire/pipewire.conf > /etc/pipewire/pipewire.conf
Alternatively, place the new configuration file in the expected location for a single user:
$ : "${XDG_CONFIG_HOME:=${HOME}/.config}"
$ mkdir -p "${XDG_CONFIG_HOME}/pipewire"
$ sed '/path.*=.*pipewire-media-session/s/{/#{/' \
/usr/share/pipewire/pipewire.conf > "${XDG_CONFIG_HOME}/pipewire/pipewire.conf"
A custom
pipewire.conf
in either/etc/pipewire
or${XDG_CONFIG_HOME}/pipewire
will prevent entirely the use of the default system configuration. Users who override the default configuration to enablewireplumber
are encouraged to monitor the default configuration and reconcile any changes with eachpipewire
update.
Now, configure wireplumber
to start alongside pipewire
. If your window
manager or desktop environment auto-start mechanism is used to start pipewire
,
it is recommended to use the same mechanism for starting wireplumber
. The
wireplumber
package includes a wireplumber.desktop
Desktop Entry file that
may be useful in this situation.
Be aware that
wireplumber
must launch after thepipewire
executable. The Desktop Application Autostart Specification makes no provision for ordering of services started via Desktop Entry files. When relying on these files to launchpipewire
andwireplumber
, consult the documentation for your window manager or desktop environment to determine whether proper ordering of services can be achieved.
If proper ordering of separate pipewire
and wireplumber
services is
infeasible, it is possible to configure pipewire
to launch the session manager
directly. This can be accomplished by running
# mkdir -p /etc/pipewire/pipewire.conf.d
# echo 'context.exec = [ { path = "/usr/bin/wireplumber" args = "" } ]' \
> /etc/pipewire/pipewire.conf.d/10-wireplumber.conf
for system configurations or, for per-user configurations, running
$ mkdir -p "${XDG_CONFIG_HOME}/pipewire/pipewire.conf.d"
$ echo 'context.exec = [ { path = "/usr/bin/wireplumber" args = "" } ]' \
> "${XDG_CONFIG_HOME}/pipewire/pipewire.conf.d/10-wireplumber.conf"
With either of these configurations, launching pipewire
should be sufficient
to establish a working PipeWire session that uses wireplumber
for session
management.
In its default configuration, WirePlumber requires an active D-Bus
session. If your desktop environment or window
manager is configured to provide a D-Bus session as well as launch pipewire
and wireplumber
, no further configuration should be required. Users wishing to
launch pipewire
on its own, e.g., in a .xinitrc
script, may find it
necessary to configure pipewire
to launch wireplumber
directly and wrap the
pipewire
invocation as
dbus-run-session pipewire
PulseAudio replacement
Before starting pipewire-pulse
, make sure that the PulseAudio service is
disabled and that no other PulseAudio
server instance is running.
Start the PulseAudio server by running pipewire-pulse
in a terminal emulator.
To check if the replacement is working correctly, use
pactl(1) (provided by the
pulseaudio-utils
package):
$ pactl info
[...]
Server Name: PulseAudio (on PipeWire 0.3.18)
[...]
Once you confirmed that pipewire-pulse
works as expected, it's recommended to
autostart it from the same place where you start PipeWire. It is possible to
modify pipewire.conf(5) for
auto-starting the PulseAudio server, but it's not recommended keep the PipeWire
configuration file unmodified for smoother future upgrades.
Bluetooth audio
For bluetooth audio to work, install the libspa-bluetooth
package.
ALSA integration
Install alsa-pipewire
, then enable the PipeWire ALSA device and make it the
default:
# mkdir -p /etc/alsa/conf.d
# ln -s /usr/share/alsa/alsa.conf.d/50-pipewire.conf /etc/alsa/conf.d
# ln -s /usr/share/alsa/alsa.conf.d/99-pipewire-default.conf /etc/alsa/conf.d
JACK replacement
Install libjack-pipewire
.
Use pw-jack(1) to launch JACK clients manually:
$ pw-jack <application>
Alternatively, override the library provided by libjack
(see
ld.so(8)). The following approach will work
on glibc-based systems:
# echo "/usr/lib/pipewire-0.3/jack" > /etc/ld.so.conf.d/pipewire-jack.conf
# ldconfig
Troubleshooting
The Pulseaudio replacement requires the
XDG_RUNTIME_DIR
environment
variable to work correctly.