Pipewire doesn't actually recognize any Sound outputs (devices)

❯ systemctl --user status pipewire-pulse.service
● pipewire-pulse.service - PipeWire PulseAudio
     Loaded: loaded (/usr/lib/systemd/user/pipewire-pulse.service; enabled; vendor preset: disabled)
     Active: active (running) since Wed 2021-10-06 10:54:33 CDT; 29min ago
TriggeredBy: ● pipewire-pulse.socket
   Main PID: 1141 (pipewire-pulse)
      Tasks: 2 (limit: 19093)
     Memory: 2.3M
        CPU: 7ms
     CGroup: /user.slice/user-1000.slice/user@1000.service/session.slice/pipewire-pulse.service
             └─1141 /usr/bin/pipewire-pulse

Oct 06 10:54:33 caliburn systemd[1096]: Started PipeWire PulseAudio.

Good to know but this also doesn’t appear to be the issue. I checked /etc/pipewire and it didn’t exist. I created it and copied the pipewire.conf from /etc/share/pipewire to /etc/pipewire. Still no change. So with no /etc/pipewire at all, and with an /etc/pipewire with the preferred pipewire.conf yield the same result.

Either way pipewire-pulse starts up fine and doesn’t throw any errors. Still no sound (output) devices are recognized by pipewire. Worth mentioning I can for example start up mpd and play some music. It will show up in Pulse Audio Control as a device providing audio input, it just doesn’t have any device to send that output to (i.e. my soundcard, GPU hdmi sound, or external usb DAC), and as a result no audio is heard. All the three mentioned sound outputs show up fine under pulse.

What you are saying makes sense tho, any chance pipewire needs further manual config through pipewire.conf file? I am reading up on it now but I am not seeing a setting or change needed that would make this work.

As an aside, we may want to post an edit to the pipewire wiki with your info. I am sure someone else has hit this when trying to use that doc.

1 Like

Nice, thanks. I have installed pavucontrol and that is what I am using to test right now. It works great under pulse and pipewire in Arch linux (latest). Thanks for the head up on QJackCTL. I have grabbed that as well. Sadly none of these show any output devices under pipewire.

1 Like

Fedora 35 comes with wireplumber, if you wana give a try , test with the live image.
Changes/WirePlumber - Fedora Project Wiki

2 Likes

I may give it a shot at some point. For now I will likely just carry on with Fedora 34 pulse, i don’t want to move to a less stable release. Worth mentioning I am not on Gnome. I am using i3wm via xinitrc/xorg. I have a minimal build, so it’s likely something like this is probably needed but Fedora doesn’t recognize it as dependency.

Another thing I should mention. I use startx to bring up my i3wm session and X windows in general. I had to remove the default “unset” of the DBUS_SESSION_BUS_ADDRESS. This was done in order to allow my desktop notifications to actually work (under dunst, it needs a DBUS_SESSION_BUS_ADDRESS).

Example of what I had to do.

sed -i 's/unset\ DBUS_SESSION_BUS_ADDRESS/#unset\ DBUS_SESSION_BUS_ADDRESS/g' /usr/bin/startx

Not sure if the fact a DBUS_SESSION_BUS_ADDRESS exists would cause pipewire to be not work? I don’t see why that is the case but this is the only build related oddity I have in my fedora deployment.

Can you also check the status of pipewire.service?

Also see if pipewire-media-session is running.

1 Like

Check groups again and see if you have the following too:

pulse-access:x:972:admin,standarduser
pulse-rt:x:971:admin,standarduser
pulse:x:171:admin,standarduser
pipewire:x:987:admin,standarduser
audio:x:63:admin,standarduser
video:x:39:admin,standarduser

Change admin and standarduser(if you have any) with your accounts.

Also, I know this sounds stupid by try disabling secure boot in the bios. I had a problem with an external graphic card not being recognized with secure boot AFTER installing the system with secure boot enabled without the card attached.

With this, I have the following in PulseAudio Manager:


Everything works on my end on Fedora 34.

1 Like

Good information here thanks! I was missing pipewire-rt and video from my user. Sadly however there is no change once those were added (and rebooted). I can see in dmesg that my audio hardware is recognized by the OS and loaded so I don’t think it’s secure boot (looking through my bios it appears my board may be so old I don’t have secure boot). It’s almost as if pipewire is missing some configuration. The program itself seems to run fine.

1 Like

pipewire-media-session doesn’t exist. Maybe this is part of the problem.

I assumed the lack of it is part of the Fedora implementation, possibly rolling it into pipewire-pulse. I also was unable to find any media-session like package in the repo, nor any mention of it in the fedora pipewire implementation doc. All this lead me to believe it was not in use or it’s functionality was wrapped into one of the other two packages. Can people with a working pipewire install show me the results of ps -ef | grep pipwire on their system?

If this does end up being the problem, the question would then be where can I install pipewire-media-session from?

❯ sudo systemctl status | grep pipewire
           │   │ │ ├─pipewire-pulse.service
           │   │ │ │ └─1284 /usr/bin/pipewire-pulse
           │   │ │ └─pipewire.service
           │   │ │   └─1283 /usr/bin/pipewire
           │     ├─1689 grep --color=auto --exclude-dir=.bzr --exclude-dir=CVS --exclude-dir=.git --exclude-dir=.hg --exclude-dir=.svn --exclude-dir=.idea --exclude-dir=.tox pipewire
❯ ps -ef | grep pipewire
me         1283    1274  0 10:43 ?        00:00:00 /usr/bin/pipewire
me         1284    1274  0 10:43 ?        00:00:00 /usr/bin/pipewire-pulse

I hope this is the issue because it would likely be an easy fix once we identify the package that pipewire-media-session is apart of. However that would also mean pipewire-pulse is missing a dependency lol.

Yep this was the issue!

I just manually started /usr/bin/pipewire-media-session from the command line. And it’s working!

So it appears for a default install pipewire-media-session is neither run with any of the other services nor does it have a service of it own. I will go about creating a custom systemctl service for pipewire-media-session. This sounds like a bug. Is this supposed to have it’s own service?
Can someone run a systemctl status --user pipewire-media-session?

After building a custom service for pipewire-media-session I could start it. i am still curious if this how it is supposed to be run. Does everyone else just have this service?

I had to create this service and enable/start…

❯ cat /usr/lib/systemd/user/pipewire-media-session.service
[Unit]
Description=PipeWire Media Session Service

Requires=pipewire-pulse.socket
ConditionUser=!root
Wants=pipewire.service
After=pipewire.service
Conflicts=pulseaudio.service

[Service]
LockPersonality=yes
MemoryDenyWriteExecute=yes
NoNewPrivileges=yes
RestrictNamespaces=yes
SystemCallArchitectures=native
SystemCallFilter=@system-service
Type=simple
ExecStart=/usr/bin/pipewire-media-session
Restart=on-failure
Slice=session.slice

[Install]
WantedBy=default.target

In short it does look like this is installed as a apart of the pipewire pacakge. There is just no instruction in it to run it as a service…

dnf provides pipewire-media-session

pipewire-0.3.25-1.fc34.i686 : Media Sharing Server
Repo        : fedora
Matched from:
Filename    : /usr/bin/pipewire-media-session

Wild, the service currently even asks for it but no errors are thrown…

❯ cat /usr/lib/systemd/user/pipewire-pulse.service
[Unit]
Description=PipeWire PulseAudio

# We require pipewire-pulse.socket to be active before starting the daemon, because
# while it is possible to use the service without the socket, it is not clear
# why it would be desirable.
#
# A user installing pipewire and doing `systemctl --user start pipewire-pulse`
# will not get the socket started, which might be confusing and problematic if
# the server is to be restarted later on, as the client autospawn feature
# might kick in. Also, a start of the socket unit will fail, adding to the
# confusion.
#
# After=pipewire-pulse.socket is not needed, as it is already implicit in the
# socket-service relationship, see systemd.socket(5).
Requires=pipewire-pulse.socket
ConditionUser=!root
Wants=pipewire.service pipewire-session-manager.service
After=pipewire.service pipewire-session-manager.service
Conflicts=pulseaudio.service

[Service]
LockPersonality=yes
MemoryDenyWriteExecute=yes
NoNewPrivileges=yes
RestrictNamespaces=yes
SystemCallArchitectures=native
SystemCallFilter=@system-service
Type=simple
ExecStart=/usr/bin/pipewire-pulse
Restart=on-failure
Slice=session.slice

[Install]
Also=pipewire-pulse.socket
WantedBy=default.target
❯ cat /usr/lib/systemd/user/pipewire.service
[Unit]
Description=PipeWire Multimedia Service

# We require pipewire.socket to be active before starting the daemon, because
# while it is possible to use the service without the socket, it is not clear
# why it would be desirable.
#
# A user installing pipewire and doing `systemctl --user start pipewire`
# will not get the socket started, which might be confusing and problematic if
# the server is to be restarted later on, as the client autospawn feature
# might kick in. Also, a start of the socket unit will fail, adding to the
# confusion.
#
# After=pipewire.socket is not needed, as it is already implicit in the
# socket-service relationship, see systemd.socket(5).
Requires=pipewire.socket

[Service]
LockPersonality=yes
MemoryDenyWriteExecute=yes
NoNewPrivileges=yes
RestrictNamespaces=yes
SystemCallArchitectures=native
SystemCallFilter=@system-service
Type=simple
ExecStart=/usr/bin/pipewire
Restart=on-failure
Slice=session.slice

[Install]
Also=pipewire.socket
WantedBy=default.target

You forgot the parameter --user.
To start and check the status.

Apologies, edited. Out of curiosity did you have this service?

With F34 yes. I’m on F35 now.

F35 uses wireplumber instaed.

btw. in the wiki document you posted on the beginning, in the section Documentation, see the video:

1 Like

Interesting, so maybe they jumped the gun on some of this in the latest 34 install? Expecting wireplumber to be used instead of the media session service. My install is fresh and only a week or two old.

Very cool, wireplumber sounds like a neat idea. That said, still doesn’t explain why pipewire didn’t ship with a .service for the media session on fedora 34. I opened a bug report here. Bug Access Denied

Guess we will see if this is intentional.

I believe it should be run from /usr/share/pipewire/pipewire.conf

Under context.exec=
there should be a line
{ path = "/usr/bin/pipewire-media-session" args = "" }

In F35, it changes to a service.

1 Like

You probably mean /usr/share/pipewire/pipewire.conf not /usr/share/pipewire.conf right?

It is in there. Interesting, I wonder why it is not running it.

To be fair they do say you “can” run it here but it is better to be run as a service in the comments. Maybe one of the reasons it is better to run it as as service is what I am seeing now, ha ha.

I assume since it isn’t doing anything I should comment it out.

229 context.exec = [
230     #{ path = <program-name> [ args = "<arguments>" ] }
231     #
232     # Execute the given program with arguments.
233     #
234     # You can optionally start the session manager here,
235     # but it is better to start it as a systemd service.
236     # Run the session manager with -h for options.
237     #
238     { path = "/usr/bin/pipewire-media-session" args = "" }
239     #
240     # You can optionally start the pulseaudio-server here as well
241     # but it is better to start it as a systemd service.
242     # It can be interesting to start another daemon here that listens
243     # on another address with the -a option (eg. -a tcp:4713).
244     #
245     #{ path = "/usr/bin/pipewire" args = "-c pipewire-pulse.conf" }
246   ]

Yup… /usr/share/pipewire … (need more coffee)

It also looks in
$XDG_CONFIG_HOME/pipewire/pipewire.conf
/etc/pipewire/pipewire.conf

1 Like

Ah, there is a .config based pipewire.conf file there that came over from my arch install. Arch has pipewire-media-session as a separate service but Fedora runs it using this pipewire config file. Which means in arch ~/.config/pipewire/pipewire.conf has he line line for the media session commented out.

The order the configs are read is…

I am just going to leave it as service for now, sounds like i will want it this way if I upgrade to F35.

1 Like

Detailed Description

PipeWire rt-loop object.

This loop starts a new real-time thread that is designed to run the processing graph.


I guess you really needed that in order to make it work. Glad you figured it out. I got lucky as my configurations were already prepared, thanks to a particular repo that I had to add to my system to run a few things.
Now, I wish I received as much extensive information as you did on your thread here.
My requests for info have been lost in the unknown… :slight_smile:

systemctl status --user pipewire-media-session
Unit pipewire-media-session.service could not be found.