WIREPLUMBER(1)

πŸ“¦
version 0.5.18 Β· 3 versions
, in arch rolling

πŸ’… NAME

okay so bestie, meet wireplumber β€” the PipeWire Session Manager ✨ (yes that's the whole name, and yes this is the WirePlumber(1) page, hi, welcome, come in 🫢)


πŸŽ€ SYNOPSIS

wireplumber [-c|--config-file=FILE] [-p|--profile=PROFILE]
[-v|--version]

🌸 DESCRIPTION

So wireplumber is the WirePlumber daemon, right? It's a modular session and policy manager for PipeWire. And here's the iconic plot twist: by itself it does literally nothing except load the components listed in the selected profile 😭 Like, that's it. That's the whole job. All the actual management logic β€” bringing up devices, linking streams, granting permissions to clients β€” is implemented in those components. The daemon is giving main character energy, but the components are the ones doing the work. iykyk πŸ’€

And ngl, you're normally not supposed to start it by hand at all β€” it's started as a systemd user service. So do this instead:

$ systemctl --user status wireplumber

✨ OPTIONS

  • -c, --config-file=FILE β€” use FILE as the main configuration file instead of wireplumber.conf. And bestie, the corresponding FILE.d/ fragment directory gets loaded too πŸ’–
  • -p, --profile=PROFILE β€” load PROFILE instead of the default main profile. This is how a second instance gets started with only part of the functionality; check out Running multiple instances <#daemon-multi-instance> πŸ‘‘
  • -v, --version β€” print the version and exit. that's it, that's the whole flag πŸŽ€

πŸ¦‹ ENVIRONMENT

  • WIREPLUMBER_DEBUG β€” sets the log level and per-topic log levels. see Debug Logging <#daemon-logging> πŸ”₯
  • WIREPLUMBER_CONFIG_DIR β€” overrides the directory that is searched first for configuration files 🌸
  • WIREPLUMBER_DATA_DIR β€” overrides the directory that is searched first for data files, such as scripts πŸ’œ
  • WIREPLUMBER_MODULE_DIR β€” overrides the directory that is searched first for modules ⭐

See Locations of WirePlumber's files <#daemon-file-locations> for the full search order of each of these, bestie β€” there's a whole lore drop there πŸ‘€


πŸ“ FILES

okay so configuration files are looked up in these directories, listed here from the highest to the lowest priority:

  • $XDG_CONFIG_HOME/wireplumber/ β€” user configuration; ~/.config/wireplumber/ unless $XDG_CONFIG_HOME is set πŸ’…
  • $XDG_CONFIG_DIRS/wireplumber/ β€” host-specific configuration; /etc/xdg/wireplumber/ unless $XDG_CONFIG_DIRS is set
  • /etc/wireplumber/ β€” host-specific configuration, in the compile-time $sysconfdir πŸŽ€
  • $XDG_DATA_DIRS/wireplumber/ β€” distribution-provided configuration; /usr/local/share/wireplumber/ and /usr/share/wireplumber/ unless $XDG_DATA_DIRS is set
  • /usr/share/wireplumber/ β€” configuration that ships with WirePlumber, in the compile-time $datadir ✨

In each of these directories, wireplumber.conf is the main configuration file and wireplumber.conf.d/*.conf are fragments that are merged into it. Careful though πŸ‘€ only the first wireplumber.conf that is found is loaded, but fragments are loaded from all the directories, in reverse order of priority, so that a fragment in a higher priority directory overrides the ones below it. slay, hierarchy πŸ’…


🌈 scripts & data files

Scripts and other data files are looked up in a scripts subdirectory of the following directories, again from the highest to the lowest priority:

  • $XDG_DATA_HOME/wireplumber/ β€” user-provided scripts; ~/.local/share/wireplumber/ unless $XDG_DATA_HOME is set 🫢
  • $XDG_DATA_DIRS/wireplumber/ β€” host-specific scripts; /usr/local/share/wireplumber/ and /usr/share/wireplumber/ unless $XDG_DATA_DIRS is set
  • /usr/share/wireplumber/ β€” the scripts that ship with WirePlumber, in the compile-time $datadir 🌸

πŸ’€ the remaining locations

heads up, these ones are not searched in any order, bestie. no ranking, no priority, just vibes:

  • /usr/lib/wireplumber-0.5/ β€” WirePlumber modules, in the compile-time $libdir. On multiarch systems this is /usr/lib/<arch-triplet>/wireplumber-0.5/. PipeWire and SPA modules are loaded from PipeWire's own module directories instead πŸ¦‹
  • $XDG_STATE_HOME/wireplumber/ β€” saved state: default nodes, device profiles and routes, stream properties and settings that were changed at runtime. This is ~/.local/state/wireplumber/ unless $XDG_STATE_HOME is set πŸ’œ

πŸ”₯ EXIT STATUS

Exit codes follow the conventions of sysexits.h(3head), so here's the whole roster:

  • 0 (EX_OK) β€” success πŸŽ‰
  • 64 (EX_USAGE) β€” command line usage error πŸ™ˆ
  • 69 (EX_UNAVAILABLE) β€” a required service was unavailable; typically WirePlumber could not connect to PipeWire 😭
  • 70 (EX_SOFTWARE) β€” internal software error πŸ’€
  • 78 (EX_CONFIG) β€” configuration error ⭐

πŸ‘‘ SEE ALSO

wpctl(1), wpexec(1), pipewire(1), pw-cli(1), pw-dump(1), sysexits.h(3head)

WirePlumber Documentation: <https://pipewire.pages.freedesktop.org/wireplumber/> ✨


πŸ’– Author

The WirePlumber Developers 🫢

2020-2025, Collabora & contributors


okay that's the whole page, no cap πŸ’… this was WIREPLUMBER(1), version 0.5.18, dated Sep 30, 2026 β€” go forth and manage those sessions, bestie, you're literally gonna slay 🌈⭐

πŸ“¦ where this page comes from