X11 fallback monitor causes app confusion during DPMS (and other?) wakeups

Issue Description

When a DisplayPort monitor wakes from DPMS sleep, xfdesktop resets all desktop icon positions to column 0, overwriting the saved icons.screen0.yaml with scrambled positions and injecting a ghost "Default Monitor" entry.

Steps to Reproduce

  1. Single monitor setup via DisplayPort, manual icon arrangement saved in icons.screen0.yaml
  2. Let monitor enter DPMS sleep (or force with xset dpms force off)
  3. Wake monitor
  4. Desktop icons are rearranged to column 0 (intermittent — roughly 50% of wake cycles)

Expected Behavior

Icon positions saved in icons.screen0.yaml should be preserved across monitor sleep/wake cycles.

Actual Behavior

xfdesktop rewrites icons.screen0.yaml on wake, adding a ghost monitor entry and clearing saved positions:

  • level: 0 monitors:
    • id: "152a49732d4cb24514a7c04b38eebbf01d5e33e2" display_name: "Default Monitor" # ghost entry — not the real monitor geometry: x: 0 y: 0 width: 2560 height: 1440
    • id: "f359e08b4a9cfbd55a1a64e33cbb62a2dd3c1ba0" display_name: "Microstep MSI G273Q CA8A421800157 (DisplayPort-0)" geometry: x: 0 y: 0 width: 2560 height: 1440 icons: {} # positions lost

Root Cause (confirmed via udevadm)

The monitor drops HPD on DPMS sleep, causing the GPU to fire DRM change events on wake (confirmed via udevadm monitor --subsystem-match=drm). xfdesktop responds to these events by reinitializing the desktop. During the brief moment the monitor has no EDID identity, xfdesktop creates a "Default Monitor" fallback entry with a different ID, finds no saved layout for it, and auto-arranges all icons.

KERNEL[16469.671535] change /devices/.../drm/card1 (drm) UDEV [16469.677745] change /devices/.../drm/card1 (drm) KERNEL[16470.081315] change /devices/.../drm/card1 (drm) UDEV [16470.082869] change /devices/.../drm/card1 (drm)

Two rapid change events per wake cycle are consistent with DP link retraining (negotiate → blip → settle).

Workaround

Setting the YAML immutable via sudo chattr +i ~/.config/xfce4/desktop/icons.screen0.yaml prevents overwriting but is not a real fix.

Environment

  • OS: Arch Linux
  • Xfdesktop version: 4.20.2-1
  • Windowing system: X11
  • GPU: ASRock Radeon RX 6700 XT (amdgpu driver)
  • Monitor: Microstep MSI G273Q connected via DisplayPort
  • Single monitor setup