Running the WirePlumber daemon

Systemd

WirePlumber comes with a systemd unit, wireplumber.service, which should be enabled on your user session:

$ systemctl --user --now enable wireplumber

Note

On non-systemd systems, you just need to ensure that wireplumber is started after pipewire.

Run from the PipeWire source tree

PipeWire’s build system comes with an option to build WirePlumber together with PipeWire and allows executing them together without installing either of them.

To make this work, configure PipeWire with the -Dsession-managers="[ 'wireplumber' ]" option on the meson command line.

When compiling PipeWire, the build system will now also clone and compile WirePlumber as a subproject.

To execute the whole stack without installing, simply execute make run after compiling.

Synopsis:

$ meson -Dsession-managers="[ 'wireplumber' ]" build
$ ninja -C build
$ make run

Run independently or without installing

If you wish to debug WirePlumber, it may be useful to run it separately from PipeWire or run it directly from the source tree without installing. To do so:

  1. Ensure that neither WirePlumber nor pipewire-media-session are running or started together with PipeWire

    • If any of those is started by systemd,

      • Stop the relevant systemd service, wireplumber.service or pipewire-media-session.service

      • Disable that service as well if you intend to restart PipeWire (so that the session manager is not restarted with it)

    • If any of those is started from pipewire.conf,

      • Kill it, in order to stop it temporarily: killall wireplumber or killall pipewire-media-session

      • Comment out with # the relevant { path = "..."  args = "" } line from the context.exec section in pipewire.conf, if you intend to restart PipeWire

  2. Ensure that PipeWire is running

  3. Without stopping PipeWire, run WirePlumber.

    • if it is installed, execute wireplumber

    • if it is not installed, execute make run in the source tree, or use the wp-uninstalled.sh script:

      $ ./wp-uninstalled.sh wireplumber
      

Replacing pipewire-media-session

Older versions of PipeWire used to be distributed with an example session manager (pipewire-media-session) that you needed to disable and replace with WirePlumber.

Warning

These instructions are only relevant to older versions of PipeWire

systemd

In most cases, pipewire-media-session is started by a systemd service unit, pipewire-media-session.service.

To switch to WirePlumber, you will first need to disable that service:

$ systemctl --user --now disable pipewire-media-session

… and then, enable and use wireplumber.service in its place:

$ systemctl --user --now enable wireplumber

pipewire.conf

On some systems, pipewire-media-session is not started by systemd, but it is started by pipewire itself via a configuration option in pipewire.conf

To switch to wireplumber, you will need to edit /etc/pipewire/pipewire.conf in an existing installation or src/daemon/pipewire.conf.in in the PipeWire git tree and change the appropriate line in the exec section:

--- /etc/pipewire/pipewire.conf.bak
+++ /etc/pipewire/pipewire.conf
@@ -204,7 +204,7 @@ context.exec = [
     # but it is better to start it as a systemd service.
     # Run the session manager with -h for options.
     #
-    #{ path = "/usr/bin/pipewire-media-session"  args = "" }
+    { path = "wireplumber"  args = "" }
     #
     # You can optionally start the pulseaudio-server here as well
     # but it is better to start it as a systemd service.
diff --git a/src/daemon/pipewire.conf.in b/src/daemon/pipewire.conf.in
index bbafa134..16ef687b 100644
--- a/src/daemon/pipewire.conf.in
+++ b/src/daemon/pipewire.conf.in
@@ -220,7 +220,7 @@ context.exec = [
     # but it is better to start it as a systemd service.
     # Run the session manager with -h for options.
     #
-    @comment@{ path = "@media_session_path@"  args = "" }
+    { path = "wireplumber"  args = "" }
     #
     # You can optionally start the pulseaudio-server here as well
     # but it is better to start it as a systemd service.

This setup assumes that WirePlumber is installed on the target system.