Running multiple instances

WirePlumber has the ability to run either as a single instance daemon or as multiple instances, meaning that there can be multiple processes, each one doing a different task.

In the default configuration, both setups are supported. The default is to run in single-instance mode.

In single-instance mode, WirePlumber reads wireplumber.conf, which is the default configuration file, and from there it loads main.lua, policy.lua and bluetooth.lua, which are lua configuration files (deployed as directories) that enable all the relevant functionality.

In multi-instance mode, WirePlumber is meant to be started with the --config-file command line option 3 times:

$ wireplumber --config-file=main.conf
$ wireplumber --config-file=policy.conf
$ wireplumber --config-file=bluetooth.conf

That loads one process which reads main.conf, which then loads main.lua and enables core functionality. Then another process that reads policy.conf, which then loads policy.lua and enables policy functionality… and so on.

To make this easier to work with, a template systemd unit is provided, which is meant to be started with the name of the main configuration file as a template argument:

$ systemctl --user disable wireplumber # disable the single instance

$ systemctl --user enable wireplumber@main
$ systemctl --user enable wireplumber@policy
$ systemctl --user enable wireplumber@bluetooth

It is obviously possible to start as many instances as desired, with manually crafted configuration files, as long as it is ensured that these instances serve a different purpose and they do not conflict with each other.