Describe the bug*
Audio output on the system cuts out completely and requires toggling the output profile in PipeWire/PulseAudio to restore it. This happens while animated wallpapers are running and cycling between videos.
This will affect anyone running the plugin with multiple videos on a system using PipeWire.
Root cause (confirmed)
The plugin creates a PipeWire audio sink input node for each video, even when MuteMode is set to Always (1) and Volume is set to 0. When the wallpaper cycles between videos, PipeWire audio nodes are created and destroyed rapidly. Eventually WirePlumber fails to activate a node that plasmashell has already torn down, producing the following error and crashing audio output:
wireplumber: wp-event-dispatcher: <WpAsyncEventHook:0x...> failed: failed to activate item: Object activation aborted: proxy destroyed
Environment
- OS: CachyOS (Arch-based), kernel 7.0.9-1-cachyos
- KDE Plasma 6 (Wayland)
- PipeWire 1.6.5 + WirePlumber 0.5.x
- Plugin version: latest (luisbocanegra.smart.video.wallpaper.reborn)
- Audio card: Creative SoundBlaster AE-7 (ca0132 driver)
- 6 videos in the playlist, RandomMode=true
Steps to reproduce
- Configure the plugin with multiple videos in the playlist
- Leave the system running for an extended period (minutes to hours)
- The wallpaper cycles between videos
- Audio output dies with no visible error to the user
- Check user journal:
journalctl --user -b 0 -u wireplumber | grep "proxy destroyed"
Expected behavior
Cycling between wallpaper videos should not affect the system audio graph. When MuteMode=Always, no PipeWire audio nodes should be created at all.
Actual behavior
Even with MuteMode=1 and Volume=0 set in the config, plasmashell creates active audio sink inputs in PipeWire for each video:
$ pactl list sink-inputs | grep "media.name"
media.name = "plasmashell"
media.name = "plasmashell"
media.name = "audio-src"
media.name = "plasmashell"
Workaround
Strip audio tracks from wallpaper videos entirely using ffmpeg:
ffmpeg -i input.mp4 -an -c:v copy output_noaudio.mp4
This prevents the plugin from creating any PipeWire audio nodes and eliminates the crash.
Suggested fix
When MuteMode is set to Always (or Volume is 0), the plugin should not open an audio output stream at all, rather than opening one and setting its volume to zero. This would prevent unnecessary PipeWire node churn and avoid the proxy destroyed race condition.
Describe the bug*
Audio output on the system cuts out completely and requires toggling the output profile in PipeWire/PulseAudio to restore it. This happens while animated wallpapers are running and cycling between videos.
This will affect anyone running the plugin with multiple videos on a system using PipeWire.
Root cause (confirmed)
The plugin creates a PipeWire audio sink input node for each video, even when
MuteModeis set to Always (1) andVolumeis set to 0. When the wallpaper cycles between videos, PipeWire audio nodes are created and destroyed rapidly. Eventually WirePlumber fails to activate a node that plasmashell has already torn down, producing the following error and crashing audio output:Environment
Steps to reproduce
journalctl --user -b 0 -u wireplumber | grep "proxy destroyed"Expected behavior
Cycling between wallpaper videos should not affect the system audio graph. When MuteMode=Always, no PipeWire audio nodes should be created at all.
Actual behavior
Even with MuteMode=1 and Volume=0 set in the config, plasmashell creates active audio sink inputs in PipeWire for each video:
Workaround
Strip audio tracks from wallpaper videos entirely using ffmpeg:
This prevents the plugin from creating any PipeWire audio nodes and eliminates the crash.
Suggested fix
When MuteMode is set to Always (or Volume is 0), the plugin should not open an audio output stream at all, rather than opening one and setting its volume to zero. This would prevent unnecessary PipeWire node churn and avoid the proxy destroyed race condition.