pipewire-pulse.conf(5)

πŸŽ€ NAME πŸŽ€

pipewire-pulse.conf β€” it's the config file for PipeWire's PulseAudio-compatible server, and yeah it lives in the File Formats Manual corner of your system (that's the (5), bestie).


✨ DESCRIPTION ✨

It is the PipeWire Pulseaudio server configuration file. That's the whole vibe. πŸ’…

πŸ¦‹ SYNOPSIS πŸ¦‹

The places it looks, in order-ish, no cap:

$XDG_CONFIG_HOME/pipewire/pipewire-pulse.conf

/etc/pipewire/pipewire-pulse.conf

/usr/share/pipewire/pipewire-pulse.conf

/usr/share/pipewire/pipewire-pulse.conf.d/

/etc/pipewire/pipewire-pulse.conf.d/

$XDG_CONFIG_HOME/pipewire/pipewire-pulse.conf.d/

πŸ’– DESCRIPTION πŸ’– (yes, again, the manpage really does this)

So this is the configuration for PipeWire's PulseAudio-compatible daemon 🫢.

Important bit: the file format and the lookup logic are the exact same as for pipewire.conf(5). Same brain, different file.

Drop-in configuration files β€” pipewire-pulse.conf.d/*.conf β€” can be used, and honestly they're recommended. Go read pipewire.conf(5) for the deets on how that works. ✨


🌸 CONFIGURATION FILE SECTIONS 🌸

Here's the whole menu, and yes every single one is here, I'm not skipping anything:

  • stream.properties β€” Dictionary. These properties configure the PipeWire Pulseaudio server properties.
  • stream.rules β€” Dictionary. These properties configure the PipeWire Pulseaudio server properties.
  • pulse.properties β€” Dictionary. These properties configure the PipeWire Pulseaudio server properties.
  • pulse.cmd β€” Array of dictionaries. A set of commands to be executed on startup.
  • pulse.rules β€” Array of dictionaries. A set of match rules and actions to apply to clients.
πŸ“– The detailed description of all of this lives in libpipewire-module-protocol-pulse(7). Go look, it's giving thorough.

Also, plot twist: the PipeWire context configuration sections may also be specified here. See pipewire.conf(5). πŸ‘‘


🌈 STREAM PROPERTIES 🌈

The stream.properties section holds the properties for streams created by the pipewire-pulse server. πŸŽ€

All the available options are described in pipewire-client.conf(5) under stream.properties. Not repeating them here, go check.

Some of these properties map to the PulseAudio /etc/pulse/default.pa config entries, like this:

  • remixing-use-all-sink-channels β†’ channelmix.upmix
  • remixing-produce-lfe β†’ channelmix.lfe-cutoff β€” Notes: Set to > 0 to enable
  • remixing-consume-lfe β†’ channelmix.mix-lfe
  • lfe-crossover-freq β†’ channelmix.lfe-cutoff

πŸ“ Example

# ~/.config/pipewire/pipewire-pulse.conf.d/custom.conf

stream.properties = {
    #node.latency = 1024/48000
    #node.autoconnect = true
    #resample.disable = false
    #resample.quality = 4
    #monitor.channel-volumes = false
    #channelmix.disable = false
    #channelmix.min-volume = 0.0
    #channelmix.max-volume = 10.0
    #channelmix.normalize = false
    #channelmix.mix-lfe = true
    #channelmix.upmix = true
    #channelmix.upmix-method = psd  # none, simple
    #channelmix.lfe-cutoff = 150.0
    #channelmix.fc-cutoff = 12000.0
    #channelmix.rear-delay = 12.0
    #channelmix.stereo-widen = 0.0
    #channelmix.hilbert-taps = 0
    #dither.noise = 0
    #dither.method = none # rectangular, triangular, triangular-hf, wannamaker3, shaped5
    #debug.wav-path = ""
}

πŸ’œ STREAM RULES πŸ’œ

The stream.rules section works the same as pipewire-client.conf(5) stream.rules. Same energy, same rules, literally. πŸ¦‹


πŸ‘‘ PULSEAUDIO PROPERTIES πŸ‘‘

For the pulse.properties section, go see libpipewire-module-protocol-pulse(7) for the available options. That's where they live. πŸ’–


πŸ”₯ PULSEAUDIO RULES πŸ”₯

For each client, you can write a set of rules in the pulse.rules section to configure quirks of the client, or to force some pulse-specific stream configuration. Very main character of you, honestly. ✨

The general look of this section follows the layout of match rules, see pipewire(1).

See libpipewire-module-protocol-pulse(7) for available options.

🌸 Example

# ~/.config/pipewire/pipewire-pulse.conf.d/custom.conf

pulse.rules = [
    {
        # skype does not want to use devices that don't have an S16 sample format.
        matches = [
             { application.process.binary = "teams" }
             { application.process.binary = "teams-insiders" }
             { application.process.binary = "skypeforlinux" }
        ]
        actions = { quirks = [ force-s16-info ] }
    }
    {
        # speech dispatcher asks for too small latency and then underruns.
        matches = [ { application.name = "~speech-dispatcher*" } ]
        actions = {
            update-props = {
                pulse.min.req          = 1024/48000     # 21ms
                pulse.min.quantum      = 1024/48000     # 21ms
            }
        }
    }
]

🫢 PULSEAUDIO COMMANDS 🫢

As part of the server startup procedure you can execute some additional commands with the pulse.cmd section in pipewire-pulse.conf. Little startup to-do list, slay. πŸ’…

# ~/.config/pipewire/pipewire-pulse.conf.d/custom.conf

pulse.cmd = [
    { cmd = "load-module" args = "module-always-sink" flags = [ ] }
    { cmd = "load-module" args = "module-switch-on-connect" }
    { cmd = "load-module" args = "module-gsettings" flags = [ "nofail" ] }
]
...

Additional commands can also be run via the context.exec section β€” see pipewire.conf(5).

Supported commands, the whole list:

  • load-module β€” Load the specified Pulseaudio module on startup, as if you were using pactl(1) to load the module. Periodt.

🧚 PULSEAUDIO MODULES 🧚

For the contents of the pulse.modules section, see pipewire-pulse-modules(7). πŸ’–


⭐ AUTHORS ⭐

The PipeWire Developers <https://gitlab.freedesktop.org/pipewire/pipewire/issues>; PipeWire is available from <https://pipewire.org>


πŸ¦‹ SEE ALSO πŸ¦‹

libpipewire-module-protocol-pulse(7), pipewire.conf(5), pipewire-pulse(1), pipewire-pulse-modules(7)


okay bestie that's the whole page, no skips, no crumbs left behind πŸŽ€ this was PipeWire version 1.6.11 dropping pipewire-pulse.conf(5) β€” go configure something iconic, ily, bye πŸ’–βœ¨

πŸ“¦ where this page comes from