2020-05-01 18:29:40 +00:00
|
|
|
## Building
|
|
|
|
|
2022-06-15 14:49:53 +00:00
|
|
|
PipeWire uses a build tool called [*Meson*](https://mesonbuild.com) as a basis for its build
|
2020-12-28 03:21:51 +00:00
|
|
|
process. It's a tool with some resemblance to Autotools and CMake. Meson
|
2022-06-15 14:49:53 +00:00
|
|
|
again generates build files for a lower level build tool called [*Ninja*](https://ninja-build.org/),
|
2020-12-28 03:21:51 +00:00
|
|
|
working in about the same level of abstraction as more familiar GNU Make
|
|
|
|
does.
|
|
|
|
|
2021-04-16 05:48:02 +00:00
|
|
|
Meson uses a user-specified build directory and all files produced by Meson
|
|
|
|
are in that build directory. This build directory will be called `builddir`
|
|
|
|
in this document.
|
|
|
|
|
2020-12-28 03:21:51 +00:00
|
|
|
Generate the build files for Ninja:
|
|
|
|
|
|
|
|
```
|
2021-04-16 05:48:02 +00:00
|
|
|
$ meson setup builddir
|
2020-12-28 03:21:51 +00:00
|
|
|
```
|
|
|
|
|
2021-07-14 05:45:01 +00:00
|
|
|
For distribution-specific build dependencies, please check our
|
|
|
|
[CI pipeline](https://gitlab.freedesktop.org/pipewire/pipewire/-/blob/master/.gitlab-ci.yml)
|
|
|
|
(search for `FDO_DISTRIBUTION_PACKAGES`). Note that some dependencies are
|
|
|
|
optional and depend on options passed to meson.
|
2021-07-12 08:10:53 +00:00
|
|
|
|
2020-12-28 03:21:51 +00:00
|
|
|
Once this is done, the next step is to review the build options:
|
|
|
|
|
|
|
|
```
|
2021-04-16 05:48:02 +00:00
|
|
|
$ meson configure builddir
|
2020-12-28 03:21:51 +00:00
|
|
|
```
|
|
|
|
|
|
|
|
Define the installation prefix:
|
2020-05-01 18:29:40 +00:00
|
|
|
|
|
|
|
```
|
2021-04-16 05:48:02 +00:00
|
|
|
$ meson configure builddir -Dprefix=/usr # Default: /usr/local
|
2020-05-01 18:29:40 +00:00
|
|
|
```
|
|
|
|
|
2021-07-14 05:41:58 +00:00
|
|
|
PipeWire specific build options are listed in the "Project options"
|
2020-12-28 03:21:51 +00:00
|
|
|
section. They are defined in `meson_options.txt`.
|
2020-05-01 18:29:40 +00:00
|
|
|
|
2020-12-28 03:21:51 +00:00
|
|
|
Finally, invoke the build:
|
2020-05-01 18:29:40 +00:00
|
|
|
|
|
|
|
```
|
2022-06-15 13:35:44 +00:00
|
|
|
$ meson compile -C builddir
|
2020-05-01 18:29:40 +00:00
|
|
|
```
|
|
|
|
|
2020-12-28 03:21:51 +00:00
|
|
|
Just to avoid any confusion: `autogen.sh` is a script invoked by *Jhbuild*,
|
|
|
|
which orchestrates multi-component builds.
|
2020-05-01 18:29:40 +00:00
|
|
|
|
|
|
|
## Running
|
|
|
|
|
|
|
|
If you want to run PipeWire without installing it on your system, there is a
|
|
|
|
script that you can run. This puts you in an environment in which PipeWire can
|
|
|
|
be run from the build directory, and ALSA, PulseAudio and JACK applications
|
|
|
|
will use the PipeWire emulation libraries automatically
|
|
|
|
in this environment. You can get into this environment with:
|
|
|
|
|
|
|
|
```
|
2021-06-02 19:11:39 +00:00
|
|
|
$ ./pw-uninstalled.sh -b builddir
|
2020-05-01 18:29:40 +00:00
|
|
|
```
|
|
|
|
|
|
|
|
In most cases you would want to run the default pipewire daemon. Look
|
|
|
|
below for how to make this daemon start automatically using systemd.
|
|
|
|
If you want to run pipewire from the build directory, you can do this
|
|
|
|
by doing:
|
|
|
|
|
|
|
|
```
|
2021-04-16 05:48:02 +00:00
|
|
|
cd builddir/
|
2020-05-01 18:29:40 +00:00
|
|
|
make run
|
|
|
|
```
|
|
|
|
|
|
|
|
This will use the default config file to configure and start the daemon.
|
2022-06-15 13:46:50 +00:00
|
|
|
The default config will also start `pipewire-media-session`, a default
|
|
|
|
example media session and `pipewire-pulse`, a PulseAudio compatible server.
|
2020-05-01 18:29:40 +00:00
|
|
|
|
2023-12-27 17:24:00 +00:00
|
|
|
You can also enable more debugging with the `PIPEWIRE_DEBUG` and
|
|
|
|
`WIREPLUMBER_DEBUG` environment variables like so:
|
2020-05-01 18:29:40 +00:00
|
|
|
|
|
|
|
```
|
2021-04-16 05:48:02 +00:00
|
|
|
cd builddir/
|
2023-12-27 17:24:00 +00:00
|
|
|
PIPEWIRE_DEBUG="D" WIREPLUMBER_DEBUG="D" make run
|
2020-05-01 18:29:40 +00:00
|
|
|
```
|
|
|
|
|
|
|
|
You might have to stop the pipewire service/socket that might have been
|
2021-02-25 19:18:37 +00:00
|
|
|
started already, with:
|
2020-05-01 18:29:40 +00:00
|
|
|
|
|
|
|
```
|
2021-02-25 19:18:37 +00:00
|
|
|
systemctl --user stop pipewire.service \
|
|
|
|
pipewire.socket \
|
|
|
|
pipewire-media-session.service \
|
|
|
|
pipewire-pulse.service \
|
|
|
|
pipewire-pulse.socket
|
2020-05-01 18:29:40 +00:00
|
|
|
```
|
|
|
|
|
|
|
|
## Installing
|
|
|
|
|
2022-06-15 13:39:07 +00:00
|
|
|
PipeWire comes with quite a bit of libraries and tools, run:
|
2020-05-01 18:29:40 +00:00
|
|
|
|
|
|
|
```
|
2022-06-15 13:42:03 +00:00
|
|
|
meson install -C builddir
|
2020-05-01 18:29:40 +00:00
|
|
|
```
|
|
|
|
|
|
|
|
to install everything onto the system into the specified prefix.
|
2022-06-15 13:42:03 +00:00
|
|
|
Depending on the configured installation prefix, the above command
|
|
|
|
may need to be run with elevated privileges (e.g. with `sudo`).
|
2020-05-01 18:29:40 +00:00
|
|
|
Some additional steps will have to be performed to integrate
|
|
|
|
with the distribution as shown below.
|
|
|
|
|
|
|
|
### PipeWire daemon
|
|
|
|
|
|
|
|
A correctly installed PipeWire system should have a pipewire
|
2021-09-08 08:31:31 +00:00
|
|
|
process, a pipewire-media-session (or alternative) and an (optional)
|
|
|
|
pipewire-pulse process running. PipeWire is usually started as a
|
|
|
|
systemd unit using socket activation or as a service.
|
2020-05-01 18:29:40 +00:00
|
|
|
|
|
|
|
Configuration of the PipeWire daemon can be found in
|
2022-06-15 13:46:50 +00:00
|
|
|
`/usr/share/pipewire/pipewire.conf`. Please refer to the comments in the
|
2020-05-01 18:29:40 +00:00
|
|
|
config file for more information about the configuration options.
|
|
|
|
|
2021-02-25 06:00:56 +00:00
|
|
|
The daemon is started with:
|
|
|
|
```
|
2021-02-25 19:18:37 +00:00
|
|
|
systemctl --user start pipewire.service pipewire.socket
|
2021-02-25 06:00:56 +00:00
|
|
|
```
|
|
|
|
|
|
|
|
If you did not start the media-session in pipewire.conf, you will
|
|
|
|
also need to start it like this:
|
|
|
|
```
|
|
|
|
systemctl --user start pipewire-media-session.service
|
|
|
|
```
|
2021-02-25 19:18:37 +00:00
|
|
|
To make it start on system startup:
|
|
|
|
```
|
|
|
|
systemctl --user enable pipewire-media-session.service
|
|
|
|
```
|
|
|
|
you can write ```enable --now``` to start service immediately.
|
2021-02-25 06:00:56 +00:00
|
|
|
|
2020-05-01 18:29:40 +00:00
|
|
|
### ALSA plugin
|
|
|
|
|
|
|
|
The ALSA plugin is usually installed in:
|
|
|
|
|
2021-01-26 15:35:27 +00:00
|
|
|
On Fedora:
|
2020-05-01 18:29:40 +00:00
|
|
|
```
|
|
|
|
/usr/lib64/alsa-lib/libasound_module_pcm_pipewire.so
|
|
|
|
```
|
2021-01-26 15:35:27 +00:00
|
|
|
On Ubuntu:
|
|
|
|
```
|
|
|
|
/usr/lib/x86_64-linux-gnu/alsa-lib/libasound_module_pcm_pipewire.so
|
|
|
|
```
|
2020-05-01 18:29:40 +00:00
|
|
|
|
|
|
|
There is also a config file installed in:
|
|
|
|
|
|
|
|
```
|
|
|
|
/usr/share/alsa/alsa.conf.d/50-pipewire.conf
|
|
|
|
```
|
|
|
|
|
|
|
|
The plugin will be picked up by alsa when the following files
|
2022-06-15 13:46:50 +00:00
|
|
|
are in `/etc/alsa/conf.d/`:
|
2020-05-01 18:29:40 +00:00
|
|
|
|
|
|
|
```
|
|
|
|
/etc/alsa/conf.d/50-pipewire.conf -> /usr/share/alsa/alsa.conf.d/50-pipewire.conf
|
|
|
|
/etc/alsa/conf.d/99-pipewire-default.conf
|
|
|
|
```
|
|
|
|
|
2022-06-15 13:54:34 +00:00
|
|
|
With this setup, `aplay -l` should list a pipewire device that can be used as
|
2020-05-01 18:29:40 +00:00
|
|
|
a regular alsa device for playback and record.
|
|
|
|
|
|
|
|
### JACK emulation
|
|
|
|
|
2020-05-02 08:12:08 +00:00
|
|
|
PipeWire reimplements the 3 libraries that JACK applications use to make
|
|
|
|
them run on top of PipeWire.
|
|
|
|
|
|
|
|
These libraries are found here:
|
|
|
|
|
|
|
|
```
|
|
|
|
/usr/lib64/pipewire-0.3/jack/libjacknet.so -> libjacknet.so.0
|
|
|
|
/usr/lib64/pipewire-0.3/jack/libjacknet.so.0 -> libjacknet.so.0.304.0
|
|
|
|
/usr/lib64/pipewire-0.3/jack/libjacknet.so.0.304.0
|
|
|
|
/usr/lib64/pipewire-0.3/jack/libjackserver.so -> libjackserver.so.0
|
|
|
|
/usr/lib64/pipewire-0.3/jack/libjackserver.so.0 -> libjackserver.so.0.304.0
|
|
|
|
/usr/lib64/pipewire-0.3/jack/libjackserver.so.0.304.0
|
|
|
|
/usr/lib64/pipewire-0.3/jack/libjack.so -> libjack.so.0
|
|
|
|
/usr/lib64/pipewire-0.3/jack/libjack.so.0 -> libjack.so.0.304.0
|
|
|
|
/usr/lib64/pipewire-0.3/jack/libjack.so.0.304.0
|
|
|
|
|
|
|
|
```
|
|
|
|
|
2022-06-15 13:46:50 +00:00
|
|
|
The provided `pw-jack` script uses `LD_LIBRARY_PATH` to set the library
|
2020-05-02 08:12:08 +00:00
|
|
|
search path to these replacement libraries. This allows you to run
|
|
|
|
jack apps on both the real JACK server or on PipeWire with the script.
|
|
|
|
|
2020-11-27 16:16:57 +00:00
|
|
|
It is also possible to completely replace the JACK libraries by adding
|
|
|
|
a file `pipewire-jack-x86_64.conf` to `/etc/ld.so.conf.d/` with
|
|
|
|
contents like:
|
2020-05-02 08:12:08 +00:00
|
|
|
|
|
|
|
```
|
2020-11-27 16:16:57 +00:00
|
|
|
/usr/lib64/pipewire-0.3/jack/
|
2020-05-02 08:12:08 +00:00
|
|
|
```
|
2020-05-01 18:29:40 +00:00
|
|
|
|
2020-05-04 08:00:24 +00:00
|
|
|
Note that when JACK is replaced by PipeWire, the SPA JACK plugin (installed
|
2022-06-15 13:46:50 +00:00
|
|
|
in `/usr/lib64/spa-0.2/jack/libspa-jack.so`) is not useful anymore and
|
2020-05-04 08:00:24 +00:00
|
|
|
distributions should make them conflict.
|
|
|
|
|
|
|
|
|
2020-11-27 16:16:57 +00:00
|
|
|
### PulseAudio replacement
|
2020-05-01 18:29:40 +00:00
|
|
|
|
2020-11-27 16:16:57 +00:00
|
|
|
PipeWire reimplements the PulseAudio server protocol as a small service
|
|
|
|
that runs on top of PipeWire.
|
2020-05-02 08:12:08 +00:00
|
|
|
|
2020-11-27 16:16:57 +00:00
|
|
|
The binary is normally placed here:
|
2020-05-02 08:12:08 +00:00
|
|
|
|
|
|
|
```
|
2020-11-27 16:16:57 +00:00
|
|
|
/usr/bin/pipewire-pulse
|
2020-05-02 08:12:08 +00:00
|
|
|
```
|
2020-05-01 18:29:40 +00:00
|
|
|
|
2020-11-27 16:16:57 +00:00
|
|
|
The server can be started with provided systemd activation files or
|
2021-09-08 08:31:31 +00:00
|
|
|
from PipeWire itself. (See `/usr/share/pipewire/pipewire.conf`)
|
2020-05-02 08:12:08 +00:00
|
|
|
|
|
|
|
```
|
2021-02-25 19:18:37 +00:00
|
|
|
systemctl --user start pipewire-pulse.service pipewire-pulse.socket
|
2020-05-02 08:12:08 +00:00
|
|
|
```
|
2020-11-27 16:16:57 +00:00
|
|
|
|
|
|
|
You can also start additional PulseAudio servers listening on other
|
2022-06-15 13:46:50 +00:00
|
|
|
sockets with the `-a` option. See `pipewire-pulse -h` for more info.
|
2022-05-26 04:03:54 +00:00
|
|
|
|
|
|
|
|
|
|
|
## Uninstalling
|
|
|
|
|
2022-06-15 13:39:07 +00:00
|
|
|
To uninstall, run:
|
2022-05-26 04:03:54 +00:00
|
|
|
|
|
|
|
```
|
2022-06-15 13:42:03 +00:00
|
|
|
ninja -C builddir uninstall
|
2022-05-26 04:03:54 +00:00
|
|
|
```
|
2022-06-15 13:42:03 +00:00
|
|
|
|
|
|
|
Depending on the configured installation prefix, the above command
|
|
|
|
may need to be run with elevated privileges (e.g. with `sudo`).
|
2022-06-15 15:20:33 +00:00
|
|
|
|
|
|
|
Note that at the time of writing uninstallation only works with the
|
|
|
|
same build directory that was used for installation. Meson stores the
|
|
|
|
list of installed files in the build directory, and this list is
|
|
|
|
necessary for uninstallation to work.
|