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
- Single monitor setup via DisplayPort, manual icon arrangement saved in
icons.screen0.yaml - Let monitor enter DPMS sleep (or force with
xset dpms force off) - Wake monitor
- 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