# 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 -C build 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.