pipewire(1)

๐Ÿ’– pipewire(1) โ€” the PipeWire media server, explained by your fave Unix bestie ๐Ÿ’–

okay so you opened the pipewire(1) manual page from the General Commands Manual section?? periodt, let's go. this is the daemon itself, the main character, the thing that makes your audio not be a dumpster fire. sit down, hydrate, let's read it together ๐Ÿซถ


โœจ NAME โœจ

pipewire โ€” The PipeWire media server. that's it, that's the girl ๐Ÿ’…


โœจ SYNOPSIS โœจ

pipewire [options]

likeโ€ฆ that's the whole invocation. no positional args, no drama. just vibes and options โœจ


โœจ DESCRIPTION โœจ

So PipeWire is a service that facilitates sharing of multimedia content between devices and applications. that's the โœจofficialโœจ way of saying: it's the friend in the group chat who makes sure everyone's audio and video actually reaches everyone else, no matter which app is screaming. a social butterfly, truly. main character energy fr fr ๐ŸŒˆ

And important: the pipewire daemon reads a config file โ€” and all the tea about that config file lives in the pipewire.conf(5) manual page. go read it, bestie, it's the lore ๐Ÿ˜ญ


โœจ OPTIONS โœจ

one bullet per option, exactly as they exist, no cutting corners:

  • -h, --help โ€” shows you the help. your little flashlight in the dark ๐Ÿ”ฅ
  • -v, --verbose โ€” bumps the verbosity up by exactly one level. and here's the cute part: you can specify this option multiple times to keep climbing the ladder of chatter. stack it like bracelets โœจ
  • --version โ€” shows version information. the "who even am I" option ๐Ÿ’…
  • -c, --config=FILE โ€” loads the config file you point at. the default? pipewire.conf. (Original: Default: pipewire.conf.) ๐ŸŽ€
  • -P, --properties=PROPS โ€” adds the properties you give it, as a SPA JSON object, straight into the context. fancy ๐Ÿ’œ

โœจ RUNTIME SETTINGS โœจ

plot twist: a PipeWire daemon also exposes a settings metadata object, and you can use it to change some settings at runtime. no restart, no drama, we love a flexible queen ๐Ÿ‘‘

ngl, normally these settings can bypass any of the restrictions listed in the config options above โ€” yes, even the ones about quantum and samplerate values. so be mindful, bestie, this is the "you have power, use it responsibly" section ๐Ÿ’€

you tweak them with pw-metadata(1) like so:

pw-metadata -n settings                  # list settings
pw-metadata -n settings 0                # list server settings
pw-metadata -n settings 0 log.level 2    # modify a server setting

and here are the settings, all of them, no skips:

  • log.level = INTEGER โ€” changes the log level of the PipeWire daemon. turn the volume knob on the diary entries ๐Ÿ““
  • clock.rate = INTEGER โ€” the default samplerate.
  • clock.allowed-rates = [ RATE1 RATE2... ] โ€” the allowed samplerates. a lil guest list ๐ŸŽŸ๏ธ
  • clock.force-rate = INTEGER โ€” temporarily forces the graph to operate in a fixed sample rate. and ooh: both DSP processing and devices will switch to the new rate immediately. running streams (PulseAudio, native and ALSA applications) will automatically resample to match the new rate. no cap, it's that fast โœจ

set the value to 0 to allow the sample rate to vary again. (the "okay go be free" switch ๐Ÿฆ‹)

  • clock.quantum = INTEGER โ€” the default quantum (buffer size).
  • clock.min-quantum = INTEGER โ€” smallest quantum to be used.
  • clock.max-quantum = INTEGER โ€” largest quantum to be used.
  • clock.force-quantum = INTEGER โ€” temporarily force the graph to operate in a fixed quantum.

set the value to 0 to allow the quantum to vary again. same energy, different knob ๐Ÿ’…


โœจ ENVIRONMENT VARIABLES โœจ

the environment variables section, aka the vibes you can set before launching. every single one is here, organized exactly like the original ๐ŸŽ€

Socket directories

  • PIPEWIRE_RUNTIME_DIR
  • XDG_RUNTIME_DIR
  • USERPROFILE โ€” used to find the PipeWire socket on the server (and native clients). the "where u at" GPS ๐Ÿ—บ๏ธ
  • PIPEWIRE_CORE โ€” name of the socket to make. you're the creator here ๐Ÿ’–
  • PIPEWIRE_REMOTE โ€” name of the socket to connect to. you're the guest here ๐Ÿซถ
  • PIPEWIRE_DAEMON โ€” if set to true, then the process becomes a new PipeWire server. glow-up activated ๐Ÿ‘‘

Config directories, config file name and prefix

  • PIPEWIRE_CONFIG_DIR
  • XDG_CONFIG_HOME
  • HOME โ€” used to find the config file directories. yes girl, $HOME is doing the legwork ๐Ÿ 
  • PIPEWIRE_CONFIG_PREFIX
  • PIPEWIRE_CONFIG_NAME โ€” used to override the application provided config prefix and config name. โœจ
  • PIPEWIRE_NO_CONFIG โ€” enables (false) or disables (true) overriding on the default configuration. read it twice, the truth is inverted, iykyk ๐Ÿ˜ญ

Context information

as part of a client context, the following info gets collected from environment variables and placed right into the context properties:

  • LANG โ€” the current language, in application.language. ๐Ÿ—ฃ๏ธ
  • XDG_SESSION_ID โ€” set as the application.process.session-id property.
  • DISPLAY โ€” is set as the window.x11.display property.

Modules

  • PIPEWIRE_MODULE_DIR โ€” sets the directory where to find PipeWire modules. ๐Ÿ“ฆ
  • SPA_SUPPORT_LIB โ€” the name of the SPA support lib to load. this can be used to switch to an alternative support library โ€” for example, to run on the EVL realtime kernel. hot-swap behavior, obsessed ๐Ÿ’…

Logging options

  • JOURNAL_STREAM โ€” is used to parse the stream used for the journal. this is usually configured by systemd. โœจ
  • PIPEWIRE_LOG_LINE โ€” enables the logging of line numbers. default true. ๐Ÿ”ข
  • PIPEWIRE_LOG_TIMESTAMP โ€” logging timestamp type: "local", "monotonic", "realtime", "none". default "local". โฐ
  • PIPEWIRE_LOG โ€” specifies a log file to use instead of the default logger. ๐Ÿ“„
  • PIPEWIRE_LOG_SYSTEMD โ€” enables the use of systemd for the logger, default true.

Other settings

  • PIPEWIRE_CPU โ€” selects the CPU and flags. this is a bitmask of any of the CPU flags. ๐Ÿง 
  • PIPEWIRE_VM โ€” selects the Virtual Machine PipeWire is running on. this can be any of the VM types. โ˜๏ธ
  • DISABLE_RTKIT โ€” disables the use of RTKit or the Realtime Portal for realtime scheduling. ๐Ÿšซ
  • NO_COLOR โ€” disables the use of colors in the console output. (a life without colorโ€ฆ devastating, but valid ๐ŸŽจ)

Debugging options

  • PIPEWIRE_DLCLOSE โ€” enables (true) or disables (false) the use of dlclose when a shared library is no longer in use. and here's the pro tip straight from the source: when debugging, it might make sense to disable dlclose to be able to get debugging symbols from the object. ๐Ÿ”

Stream options

  • PIPEWIRE_NODE โ€” makes a stream connect to a specific object.serial or node.name. ๐Ÿ“
  • PIPEWIRE_PROPS โ€” adds extra properties to a stream or filter. ๐Ÿ’…
  • PIPEWIRE_QUANTUM โ€” forces a specific rate and buffer-size for the stream or filter. ๐Ÿ”’
  • PIPEWIRE_LATENCY โ€” sets a specific latency for a stream or filter. heads up: this is only a suggestion but the configured latency will not be larger. ๐Ÿ‘€
  • PIPEWIRE_RATE โ€” sets a rate for a stream or filter. also only a suggestion. the rate will be switched when the graph is idle. ๐Ÿ˜ด
  • PIPEWIRE_AUTOCONNECT โ€” overrides the default stream autoconnect settings. ๐Ÿ”Œ

Plugin options

  • SPA_PLUGIN_DIR โ€” is used to locate SPA plugins. ๐Ÿงฉ
  • SPA_DATA_DIR โ€” is used to locate plugin specific config files. this is used by the bluetooth plugin currently to locate the quirks database. ๐Ÿฆท
  • SPA_DEBUG โ€” set the log level for SPA plugins. this is usually controlled by the PIPEWIRE_DEBUG variable when the plugins are managed by PipeWire, but some standalone tools (like spa-inspect) uses this variable. ๐Ÿ›
  • ACP_BUILDDIR โ€” if set, the ACP profiles are loaded from the builddir. ๐Ÿ—๏ธ
  • ACP_PATHS_DIR
  • ACP_PROFILES_DIR โ€” used to locate the ACP paths and profile directories respectively. ๐Ÿ—‚๏ธ
  • LADSPA_PATH โ€” comma separated list of directories where the ladspa plugins can be found. ๐ŸŽ›๏ธ
  • LIBJACK_PATH โ€” directory where the jack1 or jack2 libjack.so can be found. ๐ŸŽท

โœจ AUTHORS โœจ

The PipeWire Developers โ€” that's the whole squad, no individual credits, a true collective ๐Ÿ’–

<https://gitlab.freedesktop.org/pipewire/pipewire/issues> โ€” that's where the issues live, go say hi ๐Ÿ‘‹

and PipeWire is available from <https://pipewire.org> โ€” the mothership ๐ŸŒˆ


โœจ SEE ALSO โœจ

go read these too, bestie, they're the extended universe:

pw-top(1), pw-dump(1), pw-mon(1), pw-cat(1), pw-cli(1), libpipewire-modules(7)


and that's the whole page, no skips, no cuts, every option and env var accounted for. you're basically a PipeWire scholar now, no cap ๐Ÿ‘‘

sign-off time: this whole thing is PipeWire, version 1.6.11, and it's the pipewire(1) page, okay bye bestie, go make some noise ๐Ÿ’…โœจ๐ŸŽ€๐Ÿฆ‹๐ŸŒธ๐Ÿซถ

๐Ÿ“ฆ where this page comes from