pipewire: updated README.md
This commit is contained in:
parent
042e765c1a
commit
fba4eba472
2
pipewire/.vale.ini
Normal file
2
pipewire/.vale.ini
Normal file
|
@ -0,0 +1,2 @@
|
|||
[*]
|
||||
BasedOnStyles = Vale,
|
|
@ -1,36 +1,32 @@
|
|||
contrib/pipewire how to
|
||||
====================
|
||||
|
||||
## Breaking changes
|
||||
|
||||
Since pipewire 0.3.39, the default „example“ session manager was outsourced to be it's own subproject.
|
||||
Right now, you have two choices: the example `media-session` or `wireplumber`.
|
||||
This port does not decide for you, instead it builds with none and you are free to choose yours.
|
||||
|
||||
Note that you **need to choose**. Without a session manager, your audio and video setup **will stop working**!
|
||||
=======================
|
||||
|
||||
## 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
|
||||
> - Seamless support for ALSA, Bluez, GStreamer, JACK, PulseAudio..
|
||||
> - 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.
|
||||
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.
|
||||
⚠️ Work in progress!
|
||||
> Although `pipewire` works perfectly fine with everything I have thrown at it by date (HDMI, USB, Bluetooth, ..) this article is incomplete.
|
||||
> You can make it better by expanding it.
|
||||
|
||||
## 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`
|
||||
- pipewire requires a session-manager to run to operate correctly. You can choose between `contrib/media-session` and `contrib/wireplumber` freely.
|
||||
- pipewire requires a session-manager to run to operate correctly. The only supported implementation available right now is `contrib/wireplumber` and is installed by default
|
||||
- currently, pipewires default config likes to make 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
|
||||
- `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
|
||||
- [an stackoverflow question on the topic](https://stackoverflow.com/questions/817059/what-is-preemption-what-is-a-preemtible-kernel-what-is-it-good-for)
|
||||
- [Real-Time Linux collaborative project](https://wiki.linuxfoundation.org/realtime/start)
|
||||
- [Arch wiki](https://wiki.archlinux.org/index.php/Realtime_kernel_patchset)
|
||||
|
@ -38,46 +34,103 @@ This might also be considered a WIP entry. You can help by sharing your experien
|
|||
- 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:
|
||||
- [Official ALSA wiki](https://alsa-project.org/wiki/Main_Page)
|
||||
- [Gentoo wiki](https://wiki.gentoo.org/wiki/ALSA)
|
||||
- [Arch wiki](https://wiki.archlinux.org/index.php/Advanced_Linux_Sound_Architecture)
|
||||
### Setting up pipewire
|
||||
💡 Note
|
||||
> Mostly nothing of that chapter is normally needed to get a working pipewire session that manages your audio and video.
|
||||
> Doing so allows for a better control of your settings, as well as running compatibility layers provided by `pipewire` for e.g. `pulseaudio`.
|
||||
|
||||
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 copied from `/usr/share/pipewire` to `/etc/pipewire` to be modified. The configuration of `/etc/pipewire` can be copied over to `$XDG_CONFIG_HOME/pipewire`, which should most likely point you to `$HOME/config/pipewire`. There you will need to enable a session manager and optionally enable pulseaudio support for example.
|
||||
`pipewire` will always leverage `alsa`, so you should configure that first.
|
||||
Do that with e.g. `alsamixer` and use `alsactl store` to store those settings.
|
||||
Afterwards, we can configure `/etc/rc.conf` to add `alsa` and `dbus` to the SERVICES to be started.
|
||||
|
||||
With your configuration in place you need 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`).
|
||||
⚠️ Things to keep in mind
|
||||
> Currently, pipewires default config format might ~~always~~ change, so its advised to check either upstream or in `/usr/share/pipewire` for changes.
|
||||
|
||||
The default config can be copied from `/usr/share/pipewire` to `/etc/pipewire` to be modified.
|
||||
Alternatively, it will read the config from `$XDG_CONFIG_HOME/pipewire`.
|
||||
|
||||
With the config moved to either place, you should enable wireplumber.
|
||||
In `pipewire.conf`, almost at the bottom of the file, you will find the `context.exec` section where you should uncomment the lines for wireplumber:
|
||||
```
|
||||
#{ path = "/usr/bin/pipewire-media-session" args = ""
|
||||
# condition = [ { exec.session-manager = null } { exec.session-manager = true } ] }
|
||||
```
|
||||
|
||||
💡 Quality of life
|
||||
To make things easier to work with, you might opt for smaller configuration files, e.g. something like the following structure:
|
||||
|
||||
```
|
||||
/etc/pipewire
|
||||
├── pipewire-pulse.conf.d
|
||||
│ ├── 10-rtmodule.conf
|
||||
│ ├── 92-lowlatency.conf
|
||||
│ └── 10-tcp.conf
|
||||
└── pipewire.conf.d
|
||||
├── 10-sessions.conf
|
||||
├── 10-rtmodule.conf
|
||||
├── 92-lowlatency.conf
|
||||
├── 10-settings.conf
|
||||
└── 10-rates.conf
|
||||
```
|
||||
|
||||
The same words count for `wireplumber` which stores its default configs in `/usr/share/wireplumber`.
|
||||
You can copy to `/etc/wireplumber` and so on.
|
||||
|
||||
|
||||
### Managing a user session
|
||||
You are now ready to try out to run a pipewire session.
|
||||
From a users shell run `/usr/bin/pipewire` - if there aren't any serious errors your session should be working.
|
||||
|
||||
You can verify your running pipewire session by examining the output of `pw-dump`.
|
||||
|
||||
## 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 pipewire-pulse as a pulseaudio-server replacement
|
||||
It is crucial that you make sure that `pulseaudio` is not started automagically before you start your `pipewire` server, or it will not work.
|
||||
You can do that by adding `autospawn = no` to `/etc/pulse/client.conf`.
|
||||
|
||||
## Running jack applications through pipewire
|
||||
to be expanded
|
||||
After that, you can theoretically start `pulseaudio-pulse` in another terminal and run `pactl info` to see what `Server Name` it returns.
|
||||
It should say `Server Name: PulseAudio (on PipeWire 0.3.yy)`.
|
||||
Success!
|
||||
|
||||
## Debbuging pipewire
|
||||
You can run pipewire like that from a terminal: `PIPEWIRE_DEBUG=3 pipewire`
|
||||
You can have that start by default by editing your sessions configurations, e.g.:
|
||||
|
||||
# Further configuration and fine-tuning
|
||||
To help configuring, consider reading through the following resources alongside the extensive comments in the default config:
|
||||
- [Official pipewire wiki](https://gitlab.freedesktop.org/pipewire/pipewire/-/wikis/home)
|
||||
- [Advanced Configuration notes by jasker5183 (pipewire dev)](https://gitlab.freedesktop.org/jasker5183/test/-/blob/master/Advanced%20Configuration.md)
|
||||
- [Arch wiki](https://wiki.archlinux.org/index.php/PipeWire)
|
||||
- [Gentoo wiki](https://wiki.gentoo.org/wiki/PipeWire)
|
||||
```
|
||||
$ cat /etc/pipewire/pipewire.conf.d/10-sessions.conf
|
||||
context.exec = [
|
||||
{ path = "/usr/bin/wireplumber" args = ""
|
||||
condition = [ { exec.session-manager = null } { exec.session-manager = true } ] }
|
||||
{ path = "/usr/bin/pipewire" args = "-c pipewire-pulse.conf"
|
||||
condition = [ { exec.pipewire-pulse = null } { exec.pipewire-pulse = true } ] }
|
||||
]
|
||||
```
|
||||
|
||||
# tl;dr
|
||||
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
|
||||
⚠️ Work in progress!
|
||||
> There is no jack port in CRUX and therefor this port lacks support of it.
|
||||
|
||||
### Debbuging pipewire
|
||||
You can run `pipewire` like that from a terminal: `PIPEWIRE_DEBUG=3 pipewire`
|
||||
Make sure to kill your previous session.
|
||||
|
||||
## 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
|
||||
|
||||
- optional: `prt-get depinst xorg-libxtst pulseaudio` et al, see Pkgfile
|
||||
- install `prt-get depinst pipewire`
|
||||
- install a session manager, you don't need both!
|
||||
- `prt-get depinst media-session` or `prt-get depinst wireplumber`
|
||||
- make changes to your config per usual
|
||||
- setup `pipewire` to use `wireplumber` as your session-manager
|
||||
- execute while starting your X11/Wayland-Session: `/usr/bin/pipewire`
|
||||
- optional: execute in addition to have pulseaudio-server support: `/usr/bin/pipewire-pulse`
|
||||
|
||||
// vim:filetype=markdow
|
||||
## Ressources
|
||||
|
||||
- [Official pipewire wiki](https://gitlab.freedesktop.org/pipewire/pipewire/-/wikis/home)
|
||||
- [Official ALSA wiki](https://alsa-project.org/wiki/Main_Page)
|
||||
- [Gentoo wiki - ALSA](https://wiki.gentoo.org/wiki/ALSA)
|
||||
- [Gentoo wiki - Pipewire](https://wiki.gentoo.org/wiki/PipeWire)
|
||||
- [Arch wiki - ALSA](https://wiki.archlinux.org/index.php/Advanced_Linux_Sound_Architecture)
|
||||
- [Arch wiki - Pipewire](https://wiki.archlinux.org/index.php/PipeWire)
|
||||
|
||||
// vim:filetype=markdown
|
||||
// End of file
|
||||
|
|
Loading…
Reference in New Issue
Block a user