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.