mirror of
https://gitlab.freedesktop.org/pipewire/pipewire.git
synced 2026-05-05 06:46:28 -04:00
docs: Add Tools and Configuration sections
This commit is contained in:
parent
671cd08ed3
commit
5c0a33db6c
1 changed files with 126 additions and 2 deletions
|
|
@ -71,7 +71,7 @@ and the remaining two channels as stereo output.
|
||||||
\image html Routing-Remap.drawio.svg
|
\image html Routing-Remap.drawio.svg
|
||||||
|
|
||||||
Most of these settings need configuration files, there is no GUI yet.
|
Most of these settings need configuration files, there is no GUI yet.
|
||||||
To unlock the full power of PipeWire, you will have to dive into the deeper areas of Lake Audio!
|
To unlock the full power of PipeWire, you will have to dive into the deeper areas of Lake Config!
|
||||||
|
|
||||||
# What do I need?
|
# What do I need?
|
||||||
|
|
||||||
|
|
@ -85,9 +85,133 @@ PipeWire, as well as WirePlumber, run in *userspace,* so interfacing with them w
|
||||||
happens in *user context* with the `--user` flag, for example
|
happens in *user context* with the `--user` flag, for example
|
||||||
`systemctl --user status pipewire.service` or `journalctl --user -fu wireplumber.service`.
|
`systemctl --user status pipewire.service` or `journalctl --user -fu wireplumber.service`.
|
||||||
|
|
||||||
**WirePlumber** provides [Session Management](https://pipewire.pages.freedesktop.org/wireplumber/design/understanding_session_management.html): It enables new devices when they appear on ALSA, creates and configures nodes,
|
The session manager is normally **WirePlumber** – it describes its work on [Session Management](https://pipewire.pages.freedesktop.org/wireplumber/design/understanding_session_management.html):
|
||||||
|
It enables new devices when they appear on ALSA, creates and configures nodes,
|
||||||
create links between nodes to route sound from an application to a consumer, etc.
|
create links between nodes to route sound from an application to a consumer, etc.
|
||||||
|
|
||||||
|
## PipeWire Tools
|
||||||
|
|
||||||
|
PipeWire alone includes a \ref page_programs "considerable number of programs".
|
||||||
|
This is just a short selection of tools that you will need more often.
|
||||||
|
|
||||||
|
- [qpwgraph](https://gitlab.freedesktop.org/rncbc/qpwgraph) gives a quick visual overview over the current system configuration with nodes and links between them.
|
||||||
|
It also allows creating and deleting links on the fly.
|
||||||
|
- `pw-dump` dumps the whole configuration as JSON, which is extremely helpful for debugging.
|
||||||
|
- `pw-cli` allows to query and configure PipeWire, for example setting a sound card profile (like Stereo, Pro Audio, 7.1 Surround) with
|
||||||
|
the command `pw-cli s Profile CARD_ID "{index: PROFILE_ID, save: true}"`. You can also do it in the interactive mode of `pw-cli`. **Important:** In interactive mode, do *not* use quotes around JSON data.
|
||||||
|
- `wpctl` interfaces with WirePlumber, for example `wpctl status` shows an ASCII representation of the nodes, sources, sinks, and routing.
|
||||||
|
|
||||||
|
# Configuration Basics
|
||||||
|
|
||||||
|
This section gives a short configuration overview, for the complete reference see the \ref page_config "Configuration" reference.
|
||||||
|
|
||||||
|
Both PipeWire and WirePlumber have a set of config files for configuring different *sections* like `node.rules`.
|
||||||
|
They use the same “SPA JSON” format.
|
||||||
|
Configuration files are loaded from different files/directories and then merged based on their priority.
|
||||||
|
For example, settings from `$HOME/.config/pipewire/pipewire.conf` have priority over those in `/etc/pipewire/pipewire.conf`,
|
||||||
|
and all settings in config files in `$HOME/.config/pipewire/pipewire.conf.d/` have least priority.
|
||||||
|
<!-- TODO is that really true? Manpage says so. -->
|
||||||
|
|
||||||
|
## PipeWire Server Configuration
|
||||||
|
|
||||||
|
The **PipeWire server configuration** configures the PipeWire instance, defines which modules PipeWire should load, adds device rules, etc.
|
||||||
|
|
||||||
|
- Location: `pipewire/pipewire.conf`
|
||||||
|
- Docs: \ref page_man_pipewire_conf_5 "pipewire.conf"
|
||||||
|
- Configures: `context.exec`, `context.modules`, `context.properties`, `context.spa-libs`, `device.rules`, `node.rules`
|
||||||
|
|
||||||
|
## PipeWire Client Configuration
|
||||||
|
|
||||||
|
The **PipeWire client configuration** contains configuration for PipeWire and ALSA clients.
|
||||||
|
For example, if VLC uses the PipeWire or ALSA backend, its runtime behaviour can be modified with a rule in `stream.rules`
|
||||||
|
which defines to always route `vlc` sound output to Bluetooth earbuds and `pw-play` to a stereo headset.
|
||||||
|
|
||||||
|
- Location: `pipewire/client.conf`, for example `~/.config/pipewire/client.conf.d/`
|
||||||
|
- Docs: \ref page_man_pipewire-client_conf_5 "client.conf"
|
||||||
|
- Docs: \ref page_man_pipewire-props_7 "PipeWire object property reference" (also contains WirePlumber related options!)
|
||||||
|
- Configures: `alsa.properties`, `alsa.rules`, `stream.properties`, `stream.rules`
|
||||||
|
|
||||||
|
## PulseAudio, JACK, and other Configuration
|
||||||
|
|
||||||
|
The **PulseAudio/JACK configuration** contains configuration for PipeWire’s PulseAudio and JACK servers.
|
||||||
|
|
||||||
|
- Docs: \ref page_man_pipewire-pulse_conf_5 "pipewire-pulse.conf"
|
||||||
|
- Docs: \ref page_man_pipewire-jack_conf_5 "jack.conf"
|
||||||
|
|
||||||
|
## WirePlumber Configuration
|
||||||
|
|
||||||
|
The **WirePlumber configuration** configures general WirePlumber aspects (should it even bring up ALSA devices
|
||||||
|
or save/restore user settings configured with e.g. `pavucontrol`) and also ALSA/Bluetooth monitor aspects
|
||||||
|
(choosing a default profile like Stereo or 7.1, setting device priorities that affect default routing, setting device properties, etc.).
|
||||||
|
|
||||||
|
- Location: `wireplumber.conf`, e.g. `~/.config/wireplumber/wireplumber.conf.d/`
|
||||||
|
- Docs: [WirePlumber daemon configuration](https://pipewire.pages.freedesktop.org/wireplumber/daemon/configuration.html)
|
||||||
|
- Docs: [ALSA configuration](https://pipewire.pages.freedesktop.org/wireplumber/daemon/configuration/alsa.html) and more
|
||||||
|
- Configures: `context`, `device`, `linking`, `wireplumber`, `monitor` (like `monitor.alsa.properties`, `monitor.alsa.rules`), `node` (like `node.software-dsp`),`support`, `policy`
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Rules in config file can define default outputs for specific nodes (e.g. VLC sound always goes to the 7.1 sound card).
|
||||||
|
[ArchLinux: WirePlumber](https://wiki.archlinux.org/title/WirePlumber) gives a short introduction to using them.
|
||||||
|
|
||||||
|
## Writing Rules and Examples
|
||||||
|
|
||||||
|
Rules often need IDs of nodes or other components.
|
||||||
|
One way to find them is by using the `pwdump` tool and then searching in the JSON output with `pwdump | less`.
|
||||||
|
It can also print specific types only, for example `pwdump Node | less`.
|
||||||
|
|
||||||
|
Rules can use regular expression when strings start with `~`, for example `"~alsa.*"`.
|
||||||
|
This is explained in [PipeWire: Working with rules](https://pipewire.pages.freedesktop.org/wireplumber/daemon/configuration/modifying_configuration.html#working-with-rules).
|
||||||
|
|
||||||
|
```text
|
||||||
|
# Goes to e.g. ~/.config/wireplumber/wireplumber.conf.d/wireplumber-default-device.conf
|
||||||
|
# Restart wireplumber.service so it loads the rules:
|
||||||
|
# systemctl restart --user wireplumber.service
|
||||||
|
# This sample rule increases the priority of the stereo output on a Raspberry Pi,
|
||||||
|
# so it is used by default.
|
||||||
|
monitor.alsa.rules = [
|
||||||
|
{
|
||||||
|
matches = [
|
||||||
|
{
|
||||||
|
# An exact match could be the following name:
|
||||||
|
# node.name = "alsa_output.platform-fe00b840.mailbox.stereo-fallback"
|
||||||
|
# Instead, let’s use a regular expression to keep the configuration portable:
|
||||||
|
node.name = "~alsa_output.platform-.*.mailbox.stereo-fallback"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
actions = {
|
||||||
|
update-props = {
|
||||||
|
priority.driver = 3000
|
||||||
|
priority.session = 3000
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
```text
|
||||||
|
# Goes to ~/.config/pipewire/client.conf.d/default-pw-play-output.conf
|
||||||
|
# Restart wireplumber.service so it loads the rules
|
||||||
|
# This sample rule uses a specific sound card for playback with pw-play.
|
||||||
|
# If it does not exist, WirePlumber takes the next suitable one.
|
||||||
|
stream.rules = [
|
||||||
|
{
|
||||||
|
matches = [
|
||||||
|
{
|
||||||
|
application.name = "pw-play"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
actions = {
|
||||||
|
update-props = {
|
||||||
|
target.object = "alsa_output.usb-PreSonus_Audio_AudioBox_USB-01.pro-output-0"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
# Concepts
|
# Concepts
|
||||||
|
|
||||||
## The PipeWire Server
|
## The PipeWire Server
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue