> LC_ALL=C.UTF-8 ls -l /etc/systemd/user-preset/
ls: cannot access '/etc/systemd/user-preset/': No such file or directory
> LC_ALL=C.UTF-8 ls -l /etc/systemd/user/pipewire-pulse*
ls: cannot access '/etc/systemd/user/pipewire-pulse*': No such file or directory
> LC_ALL=C.UTF-8 stat /etc/systemd/user/pipewire-pulse.service
stat: cannot statx '/etc/systemd/user/pipewire-pulse.service': No such file or directory
Yes, created after the update, does not exists (deleted) before the update.
No local preset overrides, that’s eliminated from the equation. Thanks for confirming that the mask is created only after the update, and not present before.
Digging in to this, I note…
~> rpm -q --scripts pipewire-pulseaudio
preinstall scriptlet (using /bin/sh):
if [ -x /usr/lib/systemd/systemd-update-helper ]; then
/usr/lib/systemd/systemd-update-helper mark-install-user-units pipewire-pulse.service pipewire-pulse.socket || :
fi
postinstall scriptlet (using /bin/sh):
if [ -x /usr/lib/systemd/systemd-update-helper ]; then
/usr/lib/systemd/systemd-update-helper install-user-units pipewire-pulse.service pipewire-pulse.socket || :
fi
# If the pipewire-pulse.socket user service is not enabled and the workaround
# for boo#1186561 has never been executed, we need to execute it now
if [ ! -L /etc/systemd/user/sockets.target.wants/pipewire-pulse.socket \
-a ! -f /var/lib/pipewire/pipewire-pulseaudio_post_workaround \
-a -x /usr/bin/systemctl ]; then
for service in pipewire-pulse.service pipewire-pulse.socket ; do
/usr/bin/systemctl --global preset "$service" || :
done
mkdir -p /var/lib/pipewire
cat << EOF > /var/lib/pipewire/pipewire-pulseaudio_post_workaround
# The existence of this file means that the pipewire-pulseaudio user service was
# enabled at least once. Please don't remove this file as that would
# make the services to be enabled again in the next package update.
#
# Check the following bugs for more information:
# https://bugzilla.opensuse.org/show_bug.cgi?id=1184852
# https://bugzilla.opensuse.org/show_bug.cgi?id=1183012
# https://bugzilla.opensuse.org/show_bug.cgi?id=1186561
EOF
fi
# Update the /etc/profile.d/pulseaudio.* files
setup-pulseaudio --auto > /dev/null
preuninstall scriptlet (using /bin/sh):
if [ $1 -eq 0 ] && [ -x /usr/lib/systemd/systemd-update-helper ]; then
# Package removal, not upgrade
/usr/lib/systemd/systemd-update-helper remove-user-units pipewire-pulse.service pipewire-pulse.socket || :
fi
postuninstall scriptlet (using /bin/sh):
:
…which can run systemctl --global preset for the units, which could mask them if the preset says disable.
Based on the package scripts, the recurring mask happens because of the pipewire-pulseaudio post-install workaround, which only runs once per system. On your system, it looks like it triggered in a way that masked the units. You should be able to fix this permanently as explained below.
Remove any current masks… sudo systemctl --global unmask pipewire-pulse.service pipewire-pulse.socket
Enable and start the services… systemctl --user enable --now pipewire-pulse.service pipewire-pulse.socket
You can ensure the workaround file exists so the script won’t re-mask them ever. The following steps will create and empty file, and once that exists the update post-install script will check if it exists and skip running the systemctl --global preset that can re-mask the units…
Late here so out of time to investigate further…not sure why that didn’t work given the script’s workaround test…
# If the pipewire-pulse.socket user service is not enabled and the workaround
# for boo#1186561 has never been executed, we need to execute it now
if [ ! -L /etc/systemd/user/sockets.target.wants/pipewire-pulse.socket \
-a ! -f /var/lib/pipewire/pipewire-pulseaudio_post_workaround \
-a -x /usr/bin/systemctl ]; then
for service in pipewire-pulse.service pipewire-pulse.socket ; do
/usr/bin/systemctl --global preset "$service" || :
done
mkdir -p /var/lib/pipewire
cat << EOF > /var/lib/pipewire/pipewire-pulseaudio_post_workaround
# The existence of this file means that the pipewire-pulseaudio user service was
# enabled at least once. Please don't remove this file as that would
# make the services to be enabled again in the next package update.
#
Hopefully others can identify the root of the issue. I’ve never been impacted or aware of others who have either.
I’m not sure that this was a valid thing to do. That will result in the package being removed before being reinstalled. During the transaction, the old unit files are removed temporarily, sosystemd-update-helper think the units are new. This triggers the preset logic and creates the /dev/null symlinks.
If the pipewire-pulse.socket user service is not enabled and the workaround
So what does systemctl --user status pipewire.socket pipewire-pulse.socket give?
(Please note that the preset for pipewire.service and pipewire-pulse.service is disabled and the services are triggered by the respective .socket upon graphical login for each user)
and 2 socket files in /etc/systemd/user/sockets.target.wants →
pipewire.socketand
pipewire-pulse.socket
both also dated on Oct 2022 which probably was left behind on transition times from pipewire-media-session to wireplumber. Removed these 3 files - now all works, no symlinks created.
Bad TW does not upgrade clearly in such cases removing old unused settings.
Just for the records (and to avoid confusing other users reading this thread) I see those 3 files here with apparently the same content and pipewire is working: