In today’s run of “dnf update” a bunch of packages were udpated. But I picked pipewire-*
packages because all I know about it is that it’s the new subsystem for Linux audio. Before PipeWire it used to be ALSA and PulseAudio. And I always stayed away from it because it seemed more complicated than required. So, today I decided to learn more about PipeWire project as a part of writing this blog.
List of packages pipewire-*
updated in today’s run of dnf update
:
pipewire
pipewire-alsa
pipewire-gstreamer
pipewire-libs
pipewire-pulseaudio
pipewire-utils
I was under an impression that PipeWire replaced ALSA and PulseAUdio. But this list has all three of them in it. I hope not to end up in a rabbit hole I can’t return from.
40,000 feet overview Link to heading
The description of dnf info pipewire
says it’s a multimedia server for Linux and other UNIX like OSes. On the other hand, pipewire-utils
provides a bunch of CLI utilities to interact with the PipeWire media server, and pipewire-libs
provides runtime libraries for applications that wish to interact with a PipeWire media server.
The package pipewire-alsa
provides an ALSA plugin for the PipeWire media server, pipewire-gstreamer
contains GStreamer elements to interact with the PipeWire media server, and pipewire-pulseaudio
provides PulseAudio implementation based on PipeWire.
20,000 feet view Link to heading
Since sound subsystem is something that’s always required on a desktop OS, I was curious to see what PipeWire processes were already running:
$ ps aux | grep pipewire
dshah 2803 0.0 0.0 326984 13408 ? D<sl 11:15 0:00 /usr/bin/pipewire
dshah 3513 0.0 0.0 316108 9372 ? S<sl 11:15 0:00 /usr/bin/pipewire-pulse
/usr/bin/pipewire
binary is provided by the pipewire
RPM while pipewire-pulse
by the pipewire-pulseaudio
RPM.
Looking into the cgroup
file for these processes we see two corresponding services:
$ cat /proc/{2803,3513}/cgroup
0::/user.slice/user-1000.slice/user@1000.service/session.slice/pipewire.service
0::/user.slice/user-1000.slice/user@1000.service/session.slice/pipewire-pulse.service
From a previous experience, I remember doing systemctl --user restart pipewire
to restart pipewire service when required. So I decided to check what units corresponding to pipewire are running on the system using:
$ systemctl --user list-units | grep pipewire
pipewire-pulse.service loaded active running PipeWire PulseAudio
pipewire.service loaded active running PipeWire Multimedia Service
pipewire-pulse.socket loaded active running PipeWire PulseAudio
pipewire.socket loaded active running PipeWire Multimedia System Sockets
That’s two active services and sockets each that belong to pipewire.
Rabbit hole Link to heading
While I was hoping not to end up in a rabbit hole, eventually I did end up in one. It started with me doing systemctl --user restart pipewire.service
for no reason but to make my life miserable. Since then, I couldn’t bring the audio back on my system even though both the pipewire and pulseaudio servers were reporting running! However, when I stepped away from the system for a few hours (simply locking the screen to go do something else outside of the compute), the audio was back. But I wasn’t in a position/mood to try and find why it got automagically fixed, and I simply shutdown the laptop.
Next day, I found this amazing video on YouTube which I very highly recommend listening to.
I ended up learning bits I was never aware of. The audio subsystem of Linux has always made me cringe at the thought of dealing with it. It’s not like I’m a pro at any of Linux’s subsystems, but audio has a special place where I just don’t want to go.
What I learned from the video is that ALSA, PulseAudio, Jack, PipeWire aren’t mutually exclusive like I earlier thought.
- ALSA is the kernel module that interacts with the audio hardware on our system. It replaced OSS in the kernel version 2.6. So it’s always going to be there in a Linux system.
- PulseAudio is a userspace sound server that allows multiple software access the interfaces provided by ALSA. That’s how we can listen to audio playing from different software (e.g. VLC and YouTube on a browser tab) at the same time.
- JACK has lesser latency than PulseAudio which is important to folks working professionally. For day-to-day users like me, the latency of PulseAudio doesn’t really matter.
- PipeWire is yet another multimedia server and, if I understood correctly, will eventually help overcome the limitation of only single software being able to access the camera at the moment, e.g., multiple software can’t access a webcam simultaneously at the moment.
So my renewed understanding is that:
- One can’t remove alsa package(s) from the system.
- PipeWire is the new userspace multimedia server that’s meant to replace PulseAudio and, to an extent, JACK in future.
Out of curiosity I tried to remove packages related to PulseAudio and JACK from my system. But bluetooth related packages would get deleted along with PulseAudio, and many virtualization related packages would get removed if I were to delete jack-audio-connetion-kit
package. Hence, I refrained from removing either.
That’s it Link to heading
I initially planned to have a section on “Learning from rpm -ql
outputs” in this post. But that caused me to procrastinate posting this by almost 10 days! Maybe I’ll cover that in a different post when PipeWire pops up in my dnf update
output once again and, more importantly, if I have the motivation for it. 😉