PipeWire
0.3.66
|
The PipeWire daemon is the central process that manages data exchange between devices and clients.
Typically general, users run one PipeWire daemon that listens for incoming connections and manages devices. Clients (including the PipeWire Session Manager) are separate processes that talk to the daemon using the PipeWire socket (default: $XDG_RUNTIME_DIR/pipewire-0
). This approach provides address-space separation between the privileged daemon and non-privileged clients.
As shown above, the protocol is handled by the PipeWire Module: Protocol Native. From PipeWire's point-of-view this module is just another module.
On startup, the daemon reads a configuration file to configure itself. It executes a series of commands listed in the config file. The lookup order for configuration files are:
$XDG_CONFIG_HOME/pipewire/pipewire.conf
(usually $HOME/.config/pipewire/pipewire.conf
)$sysconfdir/pipewire/pipewire.conf
(usually /etc/pipewire/pipewire.conf
)$datadir/pipewire/pipewire.conf
(usually /usr/share/pipewire/pipewire.conf
)The first configuration file found is loaded as the base configuration.
Next, configuration sections are collected in the directories in this order:
$datadir/pipewire/pipewire.conf.d/
(usually /usr/share/pipewire/pipewire.conf.d/
)$sysconfdir/pipewire/pipewire.conf.d/
(usually /etc/pipewire/pipewire.conf.d/
)$XDG_CONFIG_HOME/pipewire/pipewire.conf.d/
(usually $HOME/.config/pipewire/pipewire.conf.d/
)They are applied to the global configuration file. Properties are overwritten and array elements are appended. This makes it possible to make small custom customizations or additions to the main configuration file.
The environment variables PIPEWIRE_CONFIG_DIR
, PIPEWIRE_CONFIG_PREFIX
, and PIPEWIRE_CONFIG_NAME
. Can be used to specify an alternative configuration directory, subdirectory, and filename respectively.
PipeWire's configuration file format is JSON. In addition to true JSON PipeWire also understands a more compact JSON representation. Where "
can be omitted around strings, no trailing commas are required and :
or =
can be used to separate object keys from their values. Also, #
can be used to start a comment until the end of the line.
The configuration file format is grouped into sections. A section is either a dictionary ({}
) or an array ([]
). Dictionary and array entries are separated by whitespace and may be simple value assignment, an array or a dictionary. For example:
Allowed configuration file sections are:
The PIPEWIRE_DEBUG
environment variable can be used to enable more debugging. This variable supports the following format:
PIPEWIRE_DEBUG=[<level>][,<glob1>:<level1>][,<glob2>:<level2>,...]
where the globs are shell globs to match on log topics and the levels are the respective log level to set for that topic. Globs are applied in order and a matching glob overrides an earlier glob for that category. A level without a glob prefix will set the global log level and is a more preformant version of *:<level>
. For example, PIPEWIRE_DEBUG=E,mod.*:D,mod.foo:X
enables global error messages, debugging on all modules but no messages on the foo module.<level>
specifies the log level:X
or 0
: No logging is enabled.E
or 1
: Error logging is enabled.W
or 2
: Warnings are enabled.I
or 3
: Informational messages are enabled.D
or 4
: Debug messages are enabled.T
or 5
: Trace messages are enabled. These messages can be logged from the realtime threads.PipeWire uses a category.topic
naming scheme, with the following categories:
pw.*
: PipeWire internal topics.mod.*
: Module topics, for example mod.foo
would usually refer to the foo
module.ms.*
: Media session topics.ms.mod.*
: Media session modules, for example ms.foo
would usually refer to the media-session-foo
module.conn.*
: Connection specific topics such as printing raw messages sent over a communication socket. These are in a separate namespace as they are usually vastly more verbose than the normal debugging topics. This namespace must be explicitly enabled with a conn.<glob>
glob.The behavior of the logging can be further controlled with the following environment variables:
PIPEWIRE_LOG_SYSTEMD=false
: Disable logging to the systemd journal.PIPEWIRE_LOG=<filename>
: Redirect the log to the given filename.PIPEWIRE_LOG_LINE=false
: Don't log filename, function, and source code line.