Skip to content

[Bug]: Video wallpaper audio nodes cause WirePlumber "proxy destroyed" crash, killing system audio output #269

Description

@crahn

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

  1. Configure the plugin with multiple videos in the playlist
  2. Leave the system running for an extended period (minutes to hours)
  3. The wallpaper cycles between videos
  4. Audio output dies with no visible error to the user
  5. 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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions