PipeWire 0.3.26 Upgrade Support Notes
As PipeWire got updated in D10936, I've added aptX and LDAC codecs support for it, but because I lack the required/proper equipment for the actual testing, I need your valuable feedback for the task (and maybe untap some other issues with). And as this also inquires switching the sound system I'll also need those comments too.
This testing is being performed on the unstable repository (or on stable in case the update gets synced) and may also involve or require real-time communication via the Solus development IRC channel (#Solus-Dev).
If you are not on the unstable repository and wish to help test, assuming you understand that the intent of unstable is to be the place where stuff might get broken and operate under the assumption you check IRC to know when not to update, you can run the below mentioned command to switch to the unstable repository:
sudo eopkg ar Solus https://mirrors.rit.edu/solus/packages/unstable/eopkg-index.xml.xz
Upgrading Properly
Do not run any commands until you fully read this section. Thank you.
First of all we need to make sure that you have a fully upgraded system, either by checking the Software Center or by running sudo eopkg up, then reboot your system and lastly you switch over to unstable (see the Upgrading Properly section in T9683).
If you are on the unstable repository, likewise perform a full upgrade via either the Software Center or the Terminal, then reboot. If you use Budgie and GNOME and encounter the grey "Something happened" fullscreen window after a reboot and attempt to login, switch to a TTY (typically Ctrl+Alt+F2-9, pick one), login and run sudo usysconf run -f then reboot (sudo reboot).
Setup
Setting up is explained at the PipeWire wiki, but as a quick recap is done as following:
- Enable (without having to run under sudo) the user PipeWire service and socket with: systemctl --user enable pipewire.
- Then continue with the user PipeWire PulseAudio: systemctl --user enable pipewire-pulse.
- And the PipeWire Multimedia Service Session Manager: systemctl --user enable pipewire-media-session.
- Disable the PulseAudio socket and service with: systemctl --user disable pulseaudio pulseaudio.socket.
- Install the pipewire-jack package if you want to test JACK support.
- Reboot.
- Check pactl info for the server name to see if it's running under PipeWire.
You can revert your PulseAudio changes by issuing systemctl --user disable pipewire-pulse pipewire-media-sessionand then systemctl --user enable pulseaudio and then rebooting. JACK can also be done like that by uninstalling pipewire-jack (and rebooting in case of failure).
Known Issues
There's a Troubleshooting wiki article provided in the Freedesktop GitLab repo.
- DSP load is a bit higher than before. Probably an issue with renicing (as we don't ship RTKit and I cannot provide a functional package for it).
- RTKit errors. Explained above.
- Underrun/Underflow and Broken Pipe Errors. Quoting from the wiki:
Applications not providing data fast enough and not enough headroom in the device to recover. Increase headroom.
- PulseEffects crashes. Our PulseEffects version is incompatible with PipeWire, meaning that if you use it you can revert your changes with systemctl xor PulseEffects should be updated.
Testing
Basically testing consists in using your system as usual, but now you are using PipeWire instead of PulseAudio. I recommend doing both mono and stereo if you can.
Testing Notes:
- This list may not be comprehensive. Feel free to report other things!
- Phabricator may indicate something is complete even if it isn't explicitly checked off. Ignore that and only look for the checkbox.
- Even if it's checked you can also redo the test and post your results.
- Check your audio device's product page on its official website or online store (like Amazon) for aptX, LDAC, SBC or any Bluetooth codec in general.
- Bluetooth
- Virtual devices
- Tested with pw-cli create-node adapter '{ factory.name=support.null-audio-sink node.name=my-mic media.class=Audio/Duplex object.linger=true audio.position=[ FL FR ] }' and then used that "microphone" in a conference.
- JACK
- Both with Carla and LMMS.
- PulseAudio
- See test plan in D10936.
- GStreamer
- Audio
- Looped audio with gst-launch-1.0 audiotestsrc ! pulsesink device=my-mic and gst-launch-1.0 pipewiresrc ! audioconvert ! autoaudiosink.
- Do the same as above but with pipewiresink by using the path property (see pw-mon in the ID column of the device).
- Video
- FIXME: Create a video sink node (using V4L2) and loop it with gst-launch-1.0 videotestsrc ! pipewiresink and gst-launch-1.0 pipewiresrc ! videoconvert ! autovideosink. Cannot be done with current GStreamer.
- Audio