The all-in-one audio control center for Linux, built on PipeWire.
Mix, route, process and tune all of your audio in one app, without hand-editing a config file.
Install · Features · Screenshots · Changelog · Discussions · Contributing · Working on · Support
| I want to… | Go to |
|---|---|
| turn one app down, or move it to another device while it plays | Dashboard → Mixer |
| balance my speakers, or turn down one side of my headphones | Dashboard → Mixer: the Channels button on any row |
| keep the devices I use most one glance away | Dashboard → Favorites: pin any output, input or virtual device |
| play on two devices at once | Virtual Devices → Combined output |
| EQ my headphones with an AutoEQ profile | Equalizer: drop the ParametricEq.txt on the list, then drag the curve to taste |
| stop my mic picking up echo and room noise | Equalizer → Mic, then pick the clean mic as your input |
| hear 7.1 surround on headphones | Surround Setup → Virtual 7.1 Headphones |
| set up real 5.1 or 7.1 speakers | Surround Setup: a wizard with a test tone for each speaker |
| get better Bluetooth audio | Session & Bluetooth: SBC-XQ, mSBC, and a codec per device |
| stop the pop or cut-off at the start of sounds | Session & Bluetooth → never suspend devices |
| work out why the audio crackles | Monitor: dropouts, DSP load and a live pw-top |
| start it with my computer, quietly in the background | Preferences → Startup |
| put every setting back the way it was | Tools → Reset all overrides |
That's the everyday half. All features goes from here to the advanced end: signal paths, filter chains, channel maps, per-app rules and the server clock.
- Search the whole app: the search button at the top of every page, or Ctrl+K, finds any page, setting, device, app or thing you've set up, and takes you straight to it.
- Bug fix: the line under the sidebar's header now meets the one under the page's header, on every theme (#32).
- Equalizer, redesigned: drag the curve and hear it live, then compare it with the saved one at matched loudness.
- Devices, redesigned: every device in one list; pick one to see what plays into it, where it goes, and its settings.
- Patchbay, reworked: connect whole devices or channel ranges in one go, and arrange the graph by signal flow.
- Balance and per-channel volume for every output, input and app.
- Preferences: start at login, start minimized in the background, light or dark.
- Narrow and tiled windows: the window now goes down to 360 pixels wide, and most pages fit it.
- Live updates: Devices and the Equalizer follow changes as they happen, instead of polling.
- RPM packages for Fedora 43 to 45 and openSUSE Tumbleweed, beside the
.deb. - 17 bug fixes. Every change, and every earlier release, is in the changelog.
Also: server clock and quantum, stream processing, per-app routing rules, LADSPA/LV2 effect racks, filter chains, device presets and a live performance monitor. All features · Every screenshot
Arch, CachyOS, EndeavourOS, Manjaro (AUR)
paru -S pipewire-control-center # or: yay -S pipewire-control-centerDebian 13+, Ubuntu 26.04 LTS+ (.deb)
Debian 12, Ubuntu 24.04 and Linux Mint 22 are too old, and apt will refuse the
package. To check yours first, run apt-cache policy gir1.2-adw-1: the
Candidate line needs to show 1.7 or newer.
Download the .deb from the latest release,
then, in the folder you saved it to:
sudo apt install ./pipewire-control-center_0.6.3_all.debThe ./ matters. It doesn't update itself, so install the next release's
.deb the same way. If you ran it from a checkout before, remove the old menu
entry first:
rm -f ~/.local/bin/pipewire-control-center ~/.local/bin/pwcc \
~/.local/share/applications/io.github.knightinfected.PipeWireControlCenter.desktopFedora 43+, openSUSE Tumbleweed (.rpm)
Download the .rpm for your system from the latest release,
then run the line for your distro in the folder you saved it to.
On Fedora, take the file ending in your release, fc43, fc44 or fc45
(rpm -E %fedora prints which):
sudo dnf install ./pipewire-control-center-0.6.3-1.fc44.noarch.rpmOn openSUSE Tumbleweed:
sudo zypper install --allow-unsigned-rpm ./pipewire-control-center-0.6.3-1.tumbleweed.noarch.rpmThe packages aren't signed, which is why zypper needs --allow-unsigned-rpm.
They don't update themselves, so install the next release's .rpm the same
way. If you ran it from a checkout before, remove the old menu entry first, as
in the Debian section above.
Running from source, on any distro
Install the dependencies:
# Fedora
sudo dnf install pipewire pipewire-utils wireplumber pipewire-pulseaudio \
pulseaudio-utils gtk4 libadwaita gobject-introspection python3-gobject \
python3-numpy python3-soundfile
# Debian / Ubuntu (Ubuntu: add libspa-0.2-modules-extra for LV2 and SOFA)
sudo apt install pipewire wireplumber pipewire-pulse pulseaudio-utils \
gir1.2-gtk-4.0 gir1.2-adw-1 python3-gi python3-gi-cairo python3-numpy \
python3-soundfile
# Arch
sudo pacman -S --needed pipewire wireplumber pipewire-pulse gtk4 libadwaita \
python-gobject python-cairo python-numpy python-soundfileElsewhere you need GTK 4, libadwaita, PyGObject with its cairo support
(python3-gobject-cairo on openSUSE), numpy, soundfile, and pactl for
switching Bluetooth codecs (pulseaudio-utils). Then:
git clone https://github.com/knightinfected/PipeWireController.git
cd PipeWireController && ./pipewire-control-centerFor a pwcc command and an app-menu entry:
mkdir -p ~/.local/bin ~/.local/share/applications
ln -sf "$PWD/pipewire-control-center" ~/.local/bin/
ln -sf "$PWD/pipewire-control-center" ~/.local/bin/pwcc
sed "s|^Exec=.*|Exec=$HOME/.local/bin/pipewire-control-center|" \
io.github.knightinfected.PipeWireControlCenter.desktop \
> ~/.local/share/applications/io.github.knightinfected.PipeWireControlCenter.desktopIf a new terminal can't find pwcc, log out and back in once.
Optional extras: noise-suppression-for-voice (the RNNoise mic template),
lsp-plugins-ladspa (more LADSPA plugins), and PipeWire built with libmysofa
(the SOFA surround templates).
PipeWire 1.0+, WirePlumber 0.5+ and libadwaita 1.7+, which rules out Debian 12, Ubuntu 24.04 and Linux Mint 22 (built on Ubuntu 24.04). Python 3.10+, and no build step.
Will it mess up my config? No. It never edits the files your distro ships. Its changes go into files of its own, listed below. Tools → Reset all overrides removes every setting it wrote, and anything you built, like a chain or a virtual device, comes off its own page.
Do I need to restart anything? Some changes apply instantly. When one needs a restart, a banner names the service and restarts it for you. Filter chains, virtual devices and equalizers each run as their own process, so changing one never interrupts the rest of your audio.
Something's broken. Please open an issue. I use this daily, which means I mostly find the bugs I happen to walk into, and every PipeWire setup is different. Even a one-line report helps more than you'd think.
Uninstalling the package leaves your settings alone. To remove those too, these are the only places the app writes:
| What | Where |
|---|---|
| Settings drop-ins | ~/.config/pipewire/{pipewire,client,pipewire-pulse}.conf.d/99-pipewire-controller.conf and ~/.config/wireplumber/wireplumber.conf.d/99-pipewire-controller.conf |
| Everything you build | ~/.config/pipewire-controller/: chains, signal paths, equalizers, virtual devices, snapshots, HRIRs, rules, preferences |
| The runner unit | ~/.config/systemd/user/pwctl-chain@.service, its links in pipewire.service.wants/, and any pwctl-chain@*.service.d/ folders |
| Start at login, only while it's on | ~/.config/autostart/io.github.knightinfected.PipeWireControlCenter.desktop |
| The app-menu entry, if you made one from a checkout | ~/.local/share/applications/io.github.knightinfected.PipeWireControlCenter.desktop |
There's one exception. Import existing devices on the Virtual Devices
page moves the drop-in it adopts into an inactive/ folder next to it, so
PipeWire doesn't load it twice. Move the file back to undo that. Importing a
filter chain copies it and leaves your file where it was.
The unrelated pipewire-controller app from PyPI also keeps a settings.json
in ~/.config/pipewire-controller/. If you use both, delete only what's
listed above.
Right now PipeWire Controller is a one-person project: I design it, build it, test it, package it and answer every issue myself. If it has earned a place on your desktop, sponsoring it or a one-off donation means more of my time goes into it. Bug reports, ideas and feedback count just as much. The app is GPL-3.0 and stays that way: nothing is ever locked behind a donation.
Want to help with code? Read CONTRIBUTING.md first.
If you like tinkering like me…
…here are some cool GitHubs to visit for sound tools:
- JDSP4Linux: JamesDSP audio effects processor for PipeWire/PulseAudio
- EasyEffects: the classic effects rack for PipeWire
- coppwr: low-level PipeWire graph inspector and patchbay
- polybar-pulseaudio-control: volume/sink switcher module for Polybar
- virtual-surround-manager: HRIR-based virtual surround setup tool for Windows and Linux
…and some goated repos for presets, HRIRs, and DDCs:
- M0Rf30/easyeffects-presets: easily the best EasyEffects preset collection
- HRIR database: big searchable HRIR database (Airtable)
- GentleDynamics: the best presets if you want to add your own HRIRs
- JackHack96/EasyEffects-Presets: the default recommendation for EasyEffects presets
- JamesDSP DDC library: headphone DDC correction files
- Linux_Audio: hard stuff for large speaker systems
Licensed GPL-3.0-or-later. The icons in pwctl/icons/ are from the GNOME
icon-development-kit, under CC0 1.0.
Thanks to Wim Taymans, creator of PipeWire, for reviewing the app.








