contrib/pipewire
2021-09-30 22:50:23 +02:00
..
.footprint pipewire: 0.3.37 -> 0.3.38 2021-09-30 22:50:23 +02:00
.signature pipewire: 0.3.37 -> 0.3.38 2021-09-30 22:50:23 +02:00
Pkgfile pipewire: 0.3.37 -> 0.3.38 2021-09-30 22:50:23 +02:00
README.md pipewire: 0.3.28 -> 0.3.29 2021-06-05 07:58:56 +00:00

contrib/pipewire how to

Consider reading online CRUX wiki

Intro

pipewire is a modern multimedia server. Quoting gentoo wiki, it's strenghts are:

  • Minimal latency capture/playback of audio and video
  • Real-time multimedia processing
  • Multi-process architecture allowing multimedia content sharing between applications
  • Seamless support for PulseAudio, JACK, ALSA, and GStreamer
  • applications sandboxing support with Flatpak

Getting pipewire to run is relatively easy on CRUX. This is a simple guide and relies on further reading upon official and unofficial resources.

This might also be considered a WIP entry. You can help by sharing your experiences and thoughts.

Prerequisites

  • working kernel with alsa audio
  • opt/alsa-utils will be installed by default as a dependency and needs to be configured by the user
  • currently, pipewires default config makes use of opt/alsa-ucm-conf, consider installing that alongside the default dependency opt/alsa-utils

Optional prerequisites

  • pipewire needs pulseaudio to be built with xorg-libxtst around to have the pulseaudio portal available
    • prt-get depinst xorg-libxtst && prt-get update -fr pulseaudio
  • contrib/rtkit and a realtime compatible kernel to help with latency, add your user to rtkit group to be able to make use of it
  • please look at contrib/pipewire/Pkgfile for further optional dependencies listed and rebuild the package after installing new optional dependencies

Running pipewire

pipewire will always leverage alsa, so you should configure that first. Use alsactl store to store those settings, and configure /etc/rc.conf to start /etc/rc.d/alsa by default. While you are in rc.conf, make sure you start /etc/rc.d/dbus too, if you haven't already.

Resources:

Currently, pipewires default config format might always change, so it is advised to keep an eye on rejmerge to keep your configs updated.
The default config can be modified in directly /etc/pipewire. The configuration of /etc/pipewire can be copied over to $XDG_CONFIG_HOME/pipewire, which should most likely point you to $HOME/config/pipewire.

Normally, you wouldn't need to change anything to run pipewire as an a/v-server, so in the simplest setup it should suffice to run /usr/bin/pipewire from a users shell or script (for example I have this in my i3 config: exec "/usr/bin/pipewire"), just make sure that whatever session you are running will be executed as a dbus-user-session too (for example from my ~/.xinitrc: exec dbus-run-session -- i3)

Running pipewire-pulse as a pulseaudio-server

If you are a pulseaudio-user, make sure it won't autostart with your session. For pipewire to handle pulse-clients, you will need to run /usr/bin/pipewire-pulse as well. Verify that it is working with pactl info which should now report: Server Name: PulseAudio (on PipeWire 0.3.22). Now you can use tools like contrib/pavucontrol or contrib/ncpamixer to control your typical sources and sink settings, ports like opt/firefox-bin and whatever else uses pulseaudio should work ootb for you too.

Running jack applications through pipewire

to be expanded

Debbuging pipewire

You can run pipewire like that from a terminal: PIPEWIRE_DEBUG=3 pipewire

Further configuration and fine-tuning

To help configuring, consider reading through the following resources alongside the extensive comments in the default config:

tl;dr

"I don't have any time to read up on stuff myself, tell me what I need to do right now to get this hot mess!" -some user

  • install prt-get depinst pipewire
  • optional: prt-get depinst xorg-libxtst pulseaudio et al
  • execute while executing your X11/Wayland-Session: /usr/bin/pipewire
  • optional: execute in addition to have pulseaudio-server support: /usr/bin/pipewire-pulse

// vim:filetype=markdown
// End of file