Pipewire is a modern approach to multimedia handling in Linux. It aims to improve the experience of working with media within Linux and can be a drop-in replacement for both PulseAudio and JACK . In this post, we’ll be setting up the pipewire pulseaudio service to handle audio inputs and outputs.
Pipewire is available in the default Void repo so all we need to do is:
sudo xbps-install pipewire
If you haven’t set up the default repository, you can run this instead
sudo xbps-install -R https://repo-default.void-linux.org/current -S pipewire
In this command, we specifically tell
xbps-install to use the default repository with the
-R flag, sync the repository with
-S, and install the
Setting up the environment
pipewire-pulse uses the
XDG_RUNTIME_DIR path to store it’s runtime files. This environment variable isn’t set by default so we need to set it and make sure the directory is writeable by the user. To achieve this, I followed the
Per-User Services documentation
and made the following changes to the run script.
#!/bin/sh -export USER="<username>" -export HOME="/home/<username>" +export USER="iain" +export HOME="/home/$USER" + +export XDG_RUNTIME_DIR="/run/user/$(id -u $USER)" +mkdir $XDG_RUNTIME_DIR +chown $USER:$USER $XDG_RUNTIME_DIR groups="$(id -Gn "$USER" | tr ' ' ':')" svdir="$HOME/service"
This creates the users runtime directory and sets the permissions on system start up. For me, it’s not a huge issue to do this before the user logs in as I only have the one user on my computer but if you wanted to wait for the user to login before creating it, you could modify the script to check that the output of
w contains the user’s username before continuing to execute.
pipewire-pulse to work, it needs to be running in a DBUS session. To do this, we need to install
dbus and enable the service.
sudo xbps-install dbus sudo ln -s /etc/sv/dbus /var/service/
Then we can change the line in
~/.xinitrc that starts your window manager to use
dbus-run-session instead of
-exec bspwm +dbus-run-session bspwm
To check that it’s working correctly, start your X session, open a terminal and check that the
DBUS_SESSION_BUS_ADDRESS environment variable is set.
Pipewire can be run using
runit, however it is recommended that it’s run in the user session. To do this, you can add the following lines to your window managers auto start programs. For
bspwm, that means adding the following lines to your
#!/bin/sh pkill pipewire pkill pipewire-pulse # ... pipewire & pipewire-pulse & # ...
bspwm starts up, you should have
pipewire-pulse running in the background.
Managing audio IO settings
To manage your audio inputs and outputs, I like to use
pavucontrol. This package is a simple GUI interface for controlling audio devices and their settings/configuration.
First install it with
sudo xbps-install pavucontrol
then in your terminal, run
In the Outputs tab, you should be able to see a list of your output devices. If you can see them then your pipewire setup is ready to go!