PipeWire Guide. Learn about how PipeWire gives your Linux system a Professional Audio/Video Processing workflow.
Note: You can easily convert this markdown file to a PDF in VSCode using this handy extension Markdown PDF.
PipeWire is a server and user space API to deal with multimedia pipelines.It provides a low-latency, graph based processing engine on top of audio and video devices that can be used to support the use cases currently handled by both pulseaudio and JACK. PipeWire was designed with a powerful security model that makes interacting with audio and video devices from containerized applications easy. Nodes in the graph can be implemented as separate processes, communicating with sockets and exchanging multimedia content using fd passing. PipeWire was created by Wim Taymans, Principal Engineer at Red Hat and co-creator of the GStreamer multimedia framework.
Key features of PipeWire include:
How WirePlumber, the PipeWire session manager works. Source: Collabora
WirePlumber is a modular session / policy manager for PipeWire and a GObject-based high-level library that wraps PipeWire’s API, providing convenience for writing the daemon’s modules as well as external tools for managing PipeWire. The WirePlumber daemon implements the session & policy management service. It follows a modular design, having plugins that implement the actual management functionality.
Core API is used by all clients that need to communicate with the PipeWire Daemon and provides the necessary structs to interface with the daemon.
Implementation API is primarily used by the PipeWire Daemon itself but also by the PipeWire Session Manager and modules/extensions that need to build objects in the graph.
SPA (Simple Plugin API) is an extensible API to implement all kinds of plugins.
PipeWire-rs is a Rust bindings for pipewire and SPA libraries.
EasyEffects is an applicaton that provides a limiter, compressor, convolver, equalizer and auto volume and many other plugins for PipeWire applications.
Helvum is a GTK-based patchbay for pipewire, inspired by the JACK tool Catia.
qpwgraph is a graph manager dedicated to PipeWire, using the Qt C++ framework, based and pretty much like the same of QjackCtl.
RaySession is a GNU/Linux session manager for audio programs such as Ardour, Carla, QTractor, Guitarix, Patroneo, Jack Mixer. This allows audio programs to load together, then be able to save or close all documents together. Checkout the RaySesson manual.
Studio One is an DAW audio tool that has features like Dolby Atmos integration and ARA (Audio Random Access) support. Studio One is a Wayland application and won't run in an X11 session. The plug-in editor can be rendered into a bitmap with the new IPlugViewRendering interface which the host will then display in a Wayland surface. For user input, mouse events are passed to the plug-in via IPlugViewMouseInput in addition to keyboard events handled by standard VST3 APIs. Please check out this knowledge base.
coppwr is a tool that provides low level control over the PipeWire multimedia server. It aims to expose and provide as many ways to inspect and control the many components of the PipeWire multimedia server as possible. It can be used as a diagnostic tool for PipeWire and to help develop software that interacts with it. coppwr flatpak version.
Whisper is a tool that allows you to listen to your microphone through your speakers using Pipewire. Whisper flatpak version
JamesDSP for Linux is an audio effect processor for PipeWire and PulseAudio clients.
NoiseTorch is an easy to use open source application for Linux with PulseAudio or PipeWire. It creates a virtual microphone that suppresses noise, in any application.
SuperCollider is a platform for audio synthesis and algorithmic composition, used by musicians, artists, and researchers working with sound. It consists of:
SonoBus is an easy to use application for streaming high-quality, low-latency peer-to-peer audio between devices over the internet or a local network.
REAPER is a complete digital audio production application for computers, offering a full multitrack audio and MIDI recording, editing, processing, mixing and mastering toolset. REAPER supports a vast range of hardware, digital formats and plugins, and can be comprehensively extended, scripted and modified.
Soundux is a cross-platform soundboard.
JUCE is an open-source cross-platform C++ application framework for desktop and mobile applications, including VST, VST3, AU, AUv3, RTAS and AAX audio plug-ins.
Helio Workstation is free and open-source music sequencer, designed to be used on all major platforms.
Zrythm is a digital audio workstation designed to be featureful and easy to use. It offers streamlined editing workflows with flexible tools, limitless automation capabilities, powerful mixing features, chord assistance and support for various plugin and file formats.
Yabridge is a modern and transparent way to use Windows VST2 and VST3 plugins on Linux.
Squeezer is a flexible general-purpose audio compressor with a touch of citrus.
Matchering 2.0 is a novel Containerized Web Application and Python Library for audio matching and mastering.
QjackCtl is a simple Qt application to control the JACK sound server daemon, specific for the Linux Audio Desktop infrastructure.
Catia is a JACK Patchbay, with some neat features like A2J bridge support and JACK Transport. It's supposed to be as simple as possible so it can work nicely on non-Linux platforms.
JACK Audio Connection Kit AKA JACK is a professional sound server daemon that provides real-time, low-latency connections for both audio and MIDI data between applications that implement its API. JACK can be configured to send audio data over a network to a main machine, which then outputs the audio to a physical device. This can be useful to mix audio from a number of linked computers without requiring additional cables or hardware mixers, and keeping the audio path digital for as long as possible.
JACK2 is a C++ version of the JACK low-latency audio server for multi-processor machines. It is a new implementation of the JACK server core features that aims at removing some limitations of the JACK1 design. The activation system has been changed for a data flow model and lock-free programming techniques for graph access have been used to have a more dynamic and robust system.
Cava is a bar spectrum audio visualizer for terminal (ncurses) or desktop (SDL).
Musikcube is a cross-platform, terminal-based audio engine, library, player and server written in c++.
LabSound is a C++ graph-based audio engine.
Pure Data is a free real-time computer music system.
OpenMAX™ is a cross-platform API that provides comprehensive streaming media codec and application portability by enabling accelerated multimedia components to be developed, integrated and programmed across multiple operating systems and silicon platforms.
H.264(AVC) is a video compression standard based on block-oriented and motion-compensated integer-DCT coding that defines multiple profiles (tools) and levels (max bitrates and resolutions) with support up to 8K.
H.265(HEVC) is a video compression standard that is the successor to H.264(AVC). It offers a 25% to 50% better data compression at the same level of video quality, or improved video quality at the same bit-rate.
FFmpeg is a leading multimedia framework that can decode, encode, transcode, mux, demux, stream, filter and play pretty much anything that humans and machines have created. It supports the most obscure ancient formats up to the cutting edge ones on multiple platforms such as Windows, macOS, and Linux.
GStreamer is a library for constructing graphs of media-handling components. The applications it supports range from simple Ogg/Vorbis playback, audio/video streaming to complex audio (mixing) and video (non-linear editing) processing. Applications can take advantage of advances in codec and filter technology transparently.
Media Source Extensions (MSE) is a W3C specification that allows JavaScript to send byte streams to media codecs within Web browsers that support HTML5 video and audio. Also, this allows the implementation of client-side prefetching and buffering code for streaming media entirely in JavaScript.
WebRTC is an open-source project that adds real-time communication capabilities to your application that works on top of an open standard. It supports video, voice, and generic data to be sent between peers, allowing developers to build powerful voice- and video-communication solutions.
Transcoding is the process of converting an audio (including OGG, ACC, MP3, FLAC, Wave, and many others.) or video file from one encoding format to another in order to increase the number of compatible target devices that a media file can be played on.
Note: PipeWire is default in Debian 12 and Linux Mint Dedbian Edition 6. The instructions below are for those still using Debian 10 and Debian 11.
Before you begin make sure to cd /etc/apt/sources.list.d
in the terminal.
sudo apt install pipewire
Create this empty file:
# touch /etc/pipewire/media-session.d/with-pulseaudio
Create a pipewire-pulse service by copying the example files:
# cp /usr/share/doc/pipewire/examples/systemd/user/pipewire-pulse.* /etc/systemd/user/
Check for new service files with:
systemctl --user daemon-reload
Disable and stop the PulseAudio service with:
systemctl --user --now disable pulseaudio.service pulseaudio.socket
Enable and start the new pipewire-pulse service with:
systemctl --user --now enable pipewire pipewire-pulse
This will configure PipeWire to activate its PulseAudio replacement daemon. Verify that it's enabled by running:
LANG=C pactl info | grep '^Server Name'
It should say Server Name: PulseAudio (on PipeWire 0.3.19).
To ensure this continues working after a reboot. You will need to "mask" the PulseAudio service by running:
systemctl --user mask pulseaudio
Note: For those using Pop!_OS 22.04 or later PipeWire is already setup by default. PipeWire will be default starting with Ubuntu 22.10 (October 2022). So these install instructions are for those running older Ubuntu versions like 22.04 and 20.04 LTS releases.
Before you begin make sure to cd /etc/apt/sources.list.d
in the terminal.
sudo apt install pipewire
Create this empty file:
# touch /etc/pipewire/media-session.d/with-pulseaudio
Create a pipewire-pulse service by copying the example files:
# cp /usr/share/doc/pipewire/examples/systemd/user/pipewire-pulse.* /etc/systemd/user/
Check for new service files with:
systemctl --user daemon-reload
Disable and stop the PulseAudio service with:
systemctl --user --now disable pulseaudio.service pulseaudio.socket
Enable and start the new pipewire-pulse service with:
systemctl --user --now enable pipewire pipewire-pulse
This will configure PipeWire to activate its PulseAudio replacement daemon. Verify that it's enabled by running:
LANG=C pactl info | grep '^Server Name'
It should say Server Name: PulseAudio (on PipeWire 0.3.19).
To ensure this continues working after a reboot. You will need to "mask" the PulseAudio service by running:
systemctl --user mask pulseaudio
Note: With openSUSE TumbleWeed PipeWire comes installed already, but for openSUSE Leap you will need to install PipeWire.
sudo zypper in pipewire pipewire-pulseaudio pipewire-alsa pipewire-aptx
systemctl --user enable --now pipewire.socket
systemctl --user enable --now pipewire-pulse.socket
systemctl --user enable --now wireplumber.service
Note: Helvum (GTK patchbay for PipeWire).
sudo pacman -S pipewire pipewire-alsa pipewire-pulse pipewire-jack wireplumber helvum
or
Note: qpwgraph (PipeWire Graph Qt GUI Interface).
sudo pacman -S pipewire pipewire-alsa pipewire-pulse pipewire-jack wireplumber qpwgraph
systemctl --user enable --now pipewire.socket
systemctl --user enable --now pipewire-pulse.socket
systemctl --user enable --now wireplumber.service
OBS (Open Broadcaster Software) is free and open source software for video recording and live streaming. Stream to Twitch, YouTube and many other providers or record your own videos with high quality H264 / AAC encoding. OBS Studio added native PipeWire and Wayland support in version 27.
OBS PipeWire Audio Capture is a plugin adds 3 sources for OBS Studio tocapture audio outputs, inputs and applications using PipeWire.
OBS Scale To Sound is a plugin for OBS Studio that adds a filter which makes a source scale based on the audio levels of any audio source you choose.
OBS Studio Fully-loaded is a script for Ubuntu/Debian-based systems that installs OBS Studio along with pre-loaded extra features and plugins. This project is developed and maintained by Martin Wimpress.
Wayland is a protocol for a compositor to talk to its clients as well as a C library implementation of that protocol. The compositor can be a standalone display server running on Linux kernel modesetting and evdev input devices, an X application, or a wayland client itself.
Weston is a lightweight and functional Wayland compositor.
XWayland is an X Server running as a Wayland client(for backwards compatibility), allowing the Xorg server can be modified to use wayland input devices for input and forward either the root window or individual top-level windows as wayland surfaces.
KWin is the window manager for the KDE Plasma Desktop. It gives you complete control over your windows, making sure they're not in the way but aid you in your task. It paints the window decoration, the bar on top of every window with (configurable) buttons like close, maximize and minimize.
Qt is the faster, smarter way to create innovative devices, modern UIs & applications for multiple screens. It is one of the most popular toolkits for the Wayland and X11 windowing.
GTK is a free and open source cross-platform widget toolkit for creating graphical user interfaces developed by GNOME Project. It is one of the most popular toolkits for the Wayland and X11 windowing.
NVIDIA Wayland EGL External Platform library is a work-in-progress implementation of a EGL External Platform library to add client-side Wayland support to EGL on top of EGLDevice and EGLStream families of extensions.
NVIDIA EGL External Platform Interface is a work-in-progress specification of the EGL External Platform interface for writing EGL platforms and their interactions with modern window systems on top of existing low-level EGL platform implementations. This keeps window system implementation specifics out of EGL drivers by using application-facing EGL functions.
Sway is an i3-compatible Wayland compositor.
wlroots is a modular Wayland compositor library.
WayfireWM is a 3D Wayland compositor, inspired by Compiz and based on wlroots.
SDDM is a modern display manager for X11 and Wayland aiming to be fast, simple and beautiful. It uses modern technologies like QtQuick, which in turn gives the designer the ability to create smooth, animated user interfaces.
x11docker is an application that you allows to run graphical desktop applications (and entire desktops) in Docker Linux containers.
Mako is alightweight notification daemon for Wayland. It also works on Sway.
Wayland-rs is a Rust implementation of the wayland protocol (client and server).
Wine-wayland is an application that allows you to running DX9/DX11 and Vulkan games using pure Wayland and Wine/DXVK.
Distributed under the Creative Commons Attribution 4.0 International (CC BY 4.0) Public License.