PipeWire Guide
A guide covering PipeWire including the applications and tools that will make you a better and more efficient with your PipeWire.
Note: You can easily convert this markdown file to a PDF in VSCode using this handy extension Markdown PDF.
Table of Contents
Getting Started with PipeWire
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:
- Capture and playback of audio and video with minimal latency.
- Real-time Multimedia processing on audio and video.
- Multiprocess architecture to let applications share multimedia content.
- Seamless support for PulseAudio, JACK, ALSA and GStreamer applications.
YouTube Tutorials
Developer Resources
How WirePlumber, the PipeWire session manager works. Source: Collabora
PipeWire Tools
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.
Audio Tools & Libraries to use with PipeWire
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.
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:
- Scsynth, a real-time audio server with hundreds of unit generators ("UGens") for audio analysis, synthesis, and processing
- Supernova, an alternative server to scsynth with support for parallel DSP on multi-core processors.
- Sclang, an interpreted programming language that controls the servers.
- Scide, an editing environment for sclang with an integrated help system.
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.
DAW/Sequencers
- dino is an integrated MIDI piano roll editor and sequencer engine.
- friniika is a complete music workstation for Windows/Linux/macOS.
- Harrison Mixbus is the first full-featured DAW with true analog style mixing.
- helio-workstation is a free linear-based music for macOS, Linux, Windows, iOS and Android, with clean interface, version control, synchronization between devices, undo history, and more.
- Laborejo is a MIDI sequencer based on classical music notation.
- meterec is a minimalistic multi track recorder.
- muse is a Qt4-based audio/MIDI sequencer.
- ossia score is an interactive sequencer with intelligent timelines supporting audio, video, OSC, MIDI, DMX and more.
- Patroneo is an easy to use, pattern based midi sequencer.
- qtractor is a MIDI/Audio multi-track sequencer application.
- REAPER is a complete digital audio production application for computers, offering a full multitrack audio and MIDI recording, editing, processing, mixing and mastering toolset.
- sequencer64 is a real-time MIDI sequencer, a major reboot of seq24 with many new features.
- Stargate DAW is a Cross-platform, all-in-one DAW and plugin suite.
- Zrythm is a highly automated and intuitive digital audio workstation.
System utilities - Plugin hosts & adapters
- carla-lv2/vst is an audio plugin host (LV2/VST plugins).
- festige is a graphical interface for fst and dssi-vst, allowing you to run Windows VST plugins on Linux.
- dssi-vst is an Adapter for VST an VSTi audio plugins.
- linvst is a LinVst enables Windows VSTs to be used as Linux VSTs in Linux VST-capable DAWs.
- mod-host is a LV2 host for JACK, controllable via socket or command line.
- synthpod is a Synthpod is an LV2 host.
- vst-bridge is a VST bridge for Windows vst on Linux.
- wineasio is a Wine ASIO driver for JACK.
- yabridge is a modern and transparent way to use Windows VST2 and VST3 plugins on Linux
System utilities - Network streaming/broadcasting
- autoradio is a radio automation software.
- gpac is a GPAC Project on Advanced Content.
- jamulus is a Low latency audio server/client for collaborative music sessions.
- larigira is a radio automation software based on MPD.
- Open Broadcaster Software is a recorder and streamer for live video content.
- vlc-bin is a multimedia player and streamer (headless).
- vlc is a multimedia player and streamer.
- zita-njbridge is a Jack clients to transmit multichannel audio over a local IP network.
Installing PipeWire for Debian
Before you begin make sure to cd /etc/apt/sources.list.d
in the terminal.
Install PipeWire
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/
Run these three commands as your regular user (not as root):
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
Installing PipeWire for Ubuntu
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.
Install PipeWire
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/
Run these three commands as your regular user (not as root):
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
Installing PipeWire on openSUSE
Note: With openSUSE TumbleWeed PipeWire comes installed already, but for openSUSE Leap you will need to install PipeWire.
Install PipeWire packages:
sudo zypper in pipewire pipewire-pulseaudio pipewire-alsa pipewire-aptx
Then enable pipewire sockets and session manager:
systemctl --user enable --now pipewire.socket
systemctl --user enable --now pipewire-pulse.socket
systemctl --user enable --now wireplumber.service
Installing PipeWire on Arch Linux
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
Then enable pipewire sockets and session manager:
systemctl --user enable --now pipewire.socket
systemctl --user enable --now pipewire-pulse.socket
systemctl --user enable --now wireplumber.service
Setting up OBS Studio
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.
Useful OBS Studio 3rd party plugins and themes.
- Advanced Scene Switcher plugin; an automated scene switcher.
- Audio Pan plugin; control stereo pan of audio source.
- Browser plugin; CEF-based OBS Studio browser plugin.
- Directory Watch Media plugin; filter you can add to media source to load the oldest or newest file in a directory.
- Downstream Keyer plugin; add a Downstream Keyer dock.
- Dynamic Delay plugin; filter for dynamic delaying a video source.
- Freeze Filter plugin; freeze a source using a filter.
- Gradient Source plugin; adding gradients as a Soource.
- GStreamer plugins; feed GStreamer launch pipelines into OBS Studio and use GStreamer encoder elements.
- Move Transition plugin; move source to a new position during scene transition.
- Multi Source Effect plugin; provides a custom effect to render multiple sources.
- NDI plugin; Network A/V via NewTek's NDI.
- NvFBC plugin; screen capture via NVIDIA FBC API. Requires NvFBC patches for Nvidia drivers for consumer grade GPUs.
- Pulse App Capture plugin; capture application audio from PulseAudio.
- Soundboard plugin; adds a soundboard dock.
- Source Copy plugin; adds copy and paste options to the tools menu.
- Source Dock plugin; create a Dock for a source, which lets you see audio levels, change volume and control media.
- Recursion Effect plugin; recursion effect filter.
- Replay Source plugin; slow motion replay async sources from memory.
- RGB Levels plugin; simple filter to adjust RGB levels.
- RTSPServer plugin; encode and publish to a RTSP stream.
- Scale to Sound plugin; adds a filter which makes a source scale based on the audio levels of any audio source you choose
- Scene Collection Manager plugin; filter, backup and restore Scene Collections.
- Scene Notes Dock plugin; create a Dock for showing and editing notes for the current active scene.
- Source Record plugin; make sources available to record via a filter.
- Source Switcher plugin; to switch between a list of sources.
- Spectralizer plugin; audio visualization using fftw.
- StreamFX plugin; collection modern effects filters and transitions.
- Teleport plugin; open NDI-like replacement.
- Text Pango plugin; Provides a text source rendered using Pango with multi-language support, emoji support, vertical rendering and RTL support.
- Text PThread plugin; Rich text source plugin with many advanced features.
- Time Warp Scan plugin; a time warp scan filter.
- Transition Table plugin; customize scene transitions.
- Virtual Cam Filter plugin; make sources available to the virtual camera via a filter
- VNC Source plugin; VNC viewer that works as a source.
- Websockets plugin; remote-control OBS Studio through WebSockets, compatible with StreamControl.
Wayland Development
Wayland Learning Resources
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.
Wayland Tools
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.
Contribute
- If would you like to contribute to this guide simply make a Pull Request.
License
Distributed under the Creative Commons Attribution 4.0 International (CC BY 4.0) Public License.