pipewire-client.conf(5)
π pipewire-client.conf(5) β your client.conf bestie guide π
okay so real talk, this is the manual for <pink>pipewire-client.conf(5)</pink>, aka the client.conf file. it's giving "configuration for PipeWire native clients" and honestly? iconic. let me walk you through it fr fr.
β¨ NAME β¨
pipewire-client.conf β it's literally client.conf, no cap π
πΈ SYNOPSIS πΈ
the way these paths are laid out, bestie β here's where this file lives:
$XDG_CONFIG_HOME/pipewire/client.conf
/etc/pipewire/client.conf
/usr/share/pipewire/client.conf
/usr/share/pipewire/client.conf.d/
/etc/pipewire/client.conf.d/
$XDG_CONFIG_HOME/pipewire/client.conf.d/
like, pick your fighter π
π¦ DESCRIPTION π¦
so this is the PipeWire client configuration file, periodt.
it's the config for PipeWire native clients and for PipeWire's ALSA plugin. a PipeWire native client program selects the default config to load, and if nothing is specified, it usually loads client.conf. simple as that β¨
the configuration file format and lookup logic is the same as for pipewire.conf(5) β so if you already know that one, you're lowkey set.
drop-in configuration files client.conf.d/*.conf can be used, and are recommended. see pipewire.conf(5) for the deets π«Ά
π§ CONFIGURATION FILE SECTIONS π§
here's the section lineup, no skips:
stream.propertiesβ configures options for native client streams. the main character of stream config ngl.stream.rulesβ configures rules for native client streams.alsa.propertiesβ ALSA client configuration. yes queen.alsa.rulesβ ALSA client match rules.
in addition, the PipeWire context configuration sections may also be specified β see pipewire.conf(5) for the full tea β
π STREAM PROPERTIES π
the client configuration files contain a stream.properties section that configures the options for client streams. here's the whole vibe:
# ~/.config/pipewire/client.conf.d/custom.conf
stream.properties = {
#node.latency = 1024/48000
#node.autoconnect = true
#resample.disable = false
#resample.quality = 4
#resample.window = exp # blackman kaiser
#resample.cutoff = 0.0
#resample.n-taps = 0
#resample.param.exp.A = 0.0
#resample.param.blackman.alpha = 0.0
#resample.param.kaiser.alpha = 0.0
#resample.param.kaiser.stopband-attenuation = 0.0
#resample.param.kaiser.transition-bandwidth = 0.0
#monitor.channel-volumes = false
#channelmix.disable = false
#channelmix.min-volume = 0.0
#channelmix.max-volume = 10.0
#channelmix.normalize = false
#channelmix.lock-volume = 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 = ""
}
some of the properties refer to different aspects of the stream, bestie β here's the breakdown:
- general stream properties to identify the stream.
- general stream properties to classify the stream.
- how it is going to be scheduled by the graph.
- how it is going to be linked by the session manager.
- how the internal processing will be done.
- properties to configure the media format.
a list of object properties that can be applied to streams can be found in pipewire-props(7) Common Node Properties and pipewire-props(7) Audio Adapter Properties π₯
π STREAM RULES π
you can add match rules β see pipewire(1) to set properties for certain streams and filters. yes bestie, we're doing rules now π
stream.rules and filter.rules provides an update-props action that takes an object with properties that are updated on the node object of the stream and filter.
add a stream.rules or filter.rules section in the config file like this:
# ~/.config/pipewire/client.conf.d/custom.conf
stream.rules = [
{
matches = [
{
# all keys must match the value. ! negates. ~ starts regex.
application.process.binary = "firefox"
}
]
actions = {
update-props = {
node.name = "My Name"
}
}
}
]
will set the node.name of Firefox to "My Name". slay π
π ALSA CLIENT PROPERTIES π
an alsa.properties section can be added to configure client applications that connect via the PipeWire ALSA plugin. okay so:
# ~/.config/pipewire/client.conf.d/custom.conf
alsa.properties = {
#alsa.deny = false
#alsa.format = 0
#alsa.rate = 0
#alsa.channels = 0
#alsa.period-bytes = 0
#alsa.buffer-bytes = 0
#alsa.volume-method = cubic # linear, cubic
}
and here's what each one does, no cap:
alsa.denyβ denies ALSA access for the client. useful in rules orPIPEWIRE_ALSAenvironment variable. it's giving "you shall not pass" πalsa.formatβ the ALSA format to use for the client. this is an ALSA format name. default0, which is to allow all formats.alsa.rateβ the samplerate to use for the client. the default is0, which is to allow all rates.alsa.channelsβ the number of channels for the client. the default is0, which is to allow any number of channels.alsa.period-bytesβ the number of bytes per period. the default is0which is to allow any number of period bytes.alsa.buffer-bytesβ the number of bytes in the alsa buffer. the default is0, which is to allow any number of bytes.alsa.volume-method = cubic | linearβ this controls the volume curve used on the ALSA mixer. possible values arecubicandlinear. the default is to usecubic.
β ALSA CLIENT RULES β
it is possible to set ALSA client specific properties by using match rules β see pipewire(1). you can set any of the above ALSA properties or any of the stream.properties. icon behavior honestly β¨
π Example π
# ~/.config/pipewire/client.conf.d/custom.conf
alsa.rules = [
{ matches = [ { application.process.binary = "resolve" } ]
actions = {
update-props = {
alsa.buffer-bytes = 131072
}
}
}
]
π ENVIRONMENT VARIABLES π
see pipewire(1) for common environment variables. many of these also apply to client applications. the environment variables also influence ALSA applications that are using PipeWire's ALSA plugin β so yes, they matter bestie π«Ά
PIPEWIRE_ALSAβ this can be an object with properties fromalsa.propertiesorstream.propertiesthat will be used to construct the client and streams.
for example:
PIPEWIRE_ALSA='{ alsa.buffer-bytes=16384 node.name=foo }' aplay ...
starts aplay with custom properties. cute.
PIPEWIRE_NODEβ instructs the ALSA client to link to a particular sink or sourceobject.serialornode.name.
for example:
PIPEWIRE_NODE=alsa_output.pci-0000_00_1b.0.analog-stereo aplay ...
makes aplay play on the give audio sink. (yes, the original says "give" β keeping that exactly as-is, no edits π)
π 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 thing β literally every flag and path and property, none skipped π this manual page is from PipeWire 1.6.8 and ngl it ate. go configure your streams and slay β¨ππ¦
π¦ where this page comes from
- alpine 3.24: pipewire-doc 1.6.8-r4 Β· MIT
- ubuntu stonking: pipewire-bin 1.6.8-1ubuntu4 Β· MIT
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms