https://bugs.freedesktop.org/show_bug.cgi?id=100289 --- Comment #14 from OmegaPhil@startmail.com --- After messing around with this on and off for months, I have found that the radeon_scanout_flip error is irrelevant - when the third monitor is turned off and on, sometimes DisplayPort-0 is reported as Disconnected and then Connected - through monitoring the root window (xev -root), I can finally get into a useful X events stream: ====================================================================== RRScreenChangeNotify event, serial 114, synthetic NO, window 0x4bc, root 0x4bc, timestamp 332828415, config_timestamp 386328254 size_index 65535, subpixel_order SubPixelHorizontalRGB rotation RR_Rotate_0 width 5760, height 1200, mwidth 1526, mheight 318 RRNotify event, serial 114, synthetic NO, window 0x4bc, subtype XRROutputChangeNotifyEvent output DisplayPort-0, crtc 79, mode 1920x1200 (1920x1200) rotation RR_Rotate_0 connection RR_Disconnected, subpixel_order SubPixelHorizontalRGB RRScreenChangeNotify event, serial 115, synthetic NO, window 0x4bc, root 0x4bc, timestamp 332828415, config_timestamp 386328254 size_index 65535, subpixel_order SubPixelHorizontalRGB rotation RR_Rotate_0 width 5760, height 1200, mwidth 1526, mheight 318 RRNotify event, serial 115, synthetic NO, window 0x4bc, subtype XRRCrtcChangeNotifyEvent crtc 79, mode None, rotation RR_Rotate_0 x 0, y 0, width 0, height 0 RRNotify event, serial 115, synthetic NO, window 0x4bc, subtype XRROutputChangeNotifyEvent output DisplayPort-0, crtc None, mode None rotation RR_Rotate_0 connection RR_Disconnected, subpixel_order SubPixelHorizontalRGB ConfigureNotify event, serial 115, synthetic NO, window 0x4bc, event 0x4bc, window 0x4bc, (0,0), width 5760, height 1200, border_width 0, above 0x0, override NO RRScreenChangeNotify event, serial 117, synthetic NO, window 0x4bc, root 0x4bc, timestamp 386328636, config_timestamp 386328813 size_index 65535, subpixel_order SubPixelHorizontalRGB rotation RR_Rotate_0 width 5760, height 1200, mwidth 1526, mheight 318 RRNotify event, serial 117, synthetic NO, window 0x4bc, subtype XRROutputChangeNotifyEvent output DisplayPort-0, crtc None, mode None rotation RR_Rotate_0 connection RR_Connected, subpixel_order SubPixelHorizontalRGB RRScreenChangeNotify event, serial 117, synthetic NO, window 0x4bc, root 0x4bc, timestamp 386328636, config_timestamp 386328813 size_index 65535, subpixel_order SubPixelHorizontalRGB rotation RR_Rotate_0 width 3840, height 1200, mwidth 1016, mheight 318 ConfigureNotify event, serial 117, synthetic NO, window 0x4bc, event 0x4bc, window 0x4bc, (0,0), width 3840, height 1200, border_width 0, above 0x0, override NO ... RRScreenChangeNotify event, serial 125, synthetic NO, window 0x4bc, root 0x4bc, timestamp 386328636, config_timestamp 386328813 size_index 65535, subpixel_order SubPixelHorizontalRGB rotation RR_Rotate_0 width 3840, height 1200, mwidth 1016, mheight 318 RRNotify event, serial 125, synthetic NO, window 0x4bc, subtype XRRCrtcChangeNotifyEvent crtc 79, mode 1920x1200, rotation RR_Rotate_0 x 0, y 0, width 1920, height 1200 RRNotify event, serial 125, synthetic NO, window 0x4bc, subtype XRROutputChangeNotifyEvent output DisplayPort-0, crtc 79, mode 1920x1200 (1920x1200) rotation RR_Rotate_0 connection RR_Connected, subpixel_order SubPixelHorizontalRGB ConfigureNotify event, serial 125, synthetic NO, window 0x4bc, event 0x4bc, window 0x4bc, (0,0), width 3840, height 1200, border_width 0, above 0x0, override NO ====================================================================== In the middle of that mess, there is a RRScreenChangeNotify event with width 3840, which signifies the invalid desktop state that I get as the result of the problem - I've managed to smoke it out to xfsettingsd (part of the xfce4-settings package) - it responds to the disconnection by disabling the CRTC, and then when it reappears, it enables it without a clue of what the monitor is, despite it being described in the xfconf settings - and therefore not putting it in the right place again. xfsettingsd's version of the events: ========================================================= Gtk-Message: GtkDialog mapped without a transient parent. This is discouraged. xfce4-settings(displays): RRScreenChangeNotify event received. xfce4-settings(displays): Refreshing RandR cache. xfce4-settings(displays): Detected CRTC 80. xfce4-settings(displays): Detected CRTC 79. xfce4-settings(displays): Detected CRTC 81. xfce4-settings(displays): Detected CRTC 82. xfce4-settings(displays): Detected CRTC 83. xfce4-settings(displays): Detected CRTC 84. xfce4-settings(displays): Detected output 85 DisplayPort-0. xfce4-settings(displays): Detected output 86 HDMI-0. xfce4-settings(displays): Detected output 88 DVI-1. xfce4-settings(displays): Noutput: before = 3, after = 3. xfce4-settings(displays): RRScreenChangeNotify event received. xfce4-settings(displays): Refreshing RandR cache. xfce4-settings(displays): Detected CRTC 80. xfce4-settings(displays): Detected CRTC 79. xfce4-settings(displays): Detected CRTC 81. xfce4-settings(displays): Detected CRTC 82. xfce4-settings(displays): Detected CRTC 83. xfce4-settings(displays): Detected CRTC 84. xfce4-settings(displays): Detected output 85 DisplayPort-0. xfce4-settings(displays): Detected output 86 HDMI-0. xfce4-settings(displays): Detected output 88 DVI-1. xfce4-settings(displays): Noutput: before = 3, after = 3. xfce4-settings(displays): RRScreenChangeNotify event received. xfce4-settings(displays): Refreshing RandR cache. xfce4-settings(displays): Detected CRTC 80. xfce4-settings(displays): Detected CRTC 79. xfce4-settings(displays): Detected CRTC 81. xfce4-settings(displays): Detected CRTC 82. xfce4-settings(displays): Detected CRTC 83. xfce4-settings(displays): Detected CRTC 84. xfce4-settings(displays): Detected output 86 HDMI-0. xfce4-settings(displays): Detected output 88 DVI-1. xfce4-settings(displays): Noutput: before = 3, after = 2. xfce4-settings(displays): Output disconnected: DisplayPort-0 xfce4-settings(displays): Disabling CRTC 79. xfce4-settings(displays): Normalized CRTC 80: size=1920x1200, pos=0x0. xfce4-settings(displays): Normalized CRTC 81: size=1920x1200, pos=1920x0. xfce4-settings(displays): min_h = 200, min_w = 320, max_h = 16384, max_w = 16384, prev_h = 1200, prev_w = 5760, prev_hmm = 318, prev_wmm = 1524, h = 1200, w = 3840, hmm = 318, wmm = 1016. xfce4-settings(displays): Applying desktop dimensions: 3840x1200 (px), 1016x318 (mm). xfce4-settings(displays): Configuring CRTC 80. xfce4-settings(displays): Configuring CRTC 79. xfce4-settings(displays): Configuring CRTC 81. xfce4-settings(displays): Configuring CRTC 82. xfce4-settings(displays): Configuring CRTC 83. xfce4-settings(displays): Configuring CRTC 84. xfce4-settings(displays): RRScreenChangeNotify event received. xfce4-settings(displays): Refreshing RandR cache. xfce4-settings(displays): Detected CRTC 80. xfce4-settings(displays): Detected CRTC 79. xfce4-settings(displays): Detected CRTC 81. xfce4-settings(displays): Detected CRTC 82. xfce4-settings(displays): Detected CRTC 83. xfce4-settings(displays): Detected CRTC 84. xfce4-settings(displays): Detected output 85 DisplayPort-0. xfce4-settings(displays): Detected output 86 HDMI-0. xfce4-settings(displays): Detected output 88 DVI-1. xfce4-settings(displays): Noutput: before = 2, after = 3. xfce4-settings(displays): New output connected: DisplayPort-0 xfce4-settings(displays): enabling crtc for DisplayPort-0 xfce4-settings(displays): CRTC 79 assigned to DisplayPort-0. xfce4-settings(displays): CRTC 79, output list[0] -> 85. xfce4-settings(displays): Normalized CRTC 80: size=1920x1200, pos=0x0. xfce4-settings(displays): Normalized CRTC 79: size=1920x1200, pos=0x0. xfce4-settings(displays): Normalized CRTC 81: size=1920x1200, pos=1920x0. xfce4-settings(displays): min_h = 200, min_w = 320, max_h = 16384, max_w = 16384, prev_h = 1200, prev_w = 5760, prev_hmm = 318, prev_wmm = 1524, h = 1200, w = 3840, hmm = 318, wmm = 1016. xfce4-settings(displays): Applying desktop dimensions: 3840x1200 (px), 1016x318 (mm). xfce4-settings(displays): Configuring CRTC 80. xfce4-settings(displays): Configuring CRTC 79. xfce4-settings(displays): Applying changes to CRTC 79. xfce4-settings(displays): Configuring CRTC 81. xfce4-settings(displays): Configuring CRTC 82. xfce4-settings(displays): Configuring CRTC 83. xfce4-settings(displays): Configuring CRTC 84. xfce4-settings(displays): RRScreenChangeNotify event received. xfce4-settings(displays): Refreshing RandR cache. xfce4-settings(displays): Detected CRTC 80. xfce4-settings(displays): Detected CRTC 79. xfce4-settings(displays): Detected CRTC 81. xfce4-settings(displays): Detected CRTC 82. xfce4-settings(displays): Detected CRTC 83. xfce4-settings(displays): Detected CRTC 84. xfce4-settings(displays): Detected output 85 DisplayPort-0. xfce4-settings(displays): Detected output 86 HDMI-0. xfce4-settings(displays): Detected output 88 DVI-1. xfce4-settings(displays): Noutput: before = 3, after = 3. xfce4-settings(displays): RRScreenChangeNotify event received. xfce4-settings(displays): Refreshing RandR cache. xfce4-settings(displays): Detected CRTC 80. xfce4-settings(displays): Detected CRTC 79. xfce4-settings(displays): Detected CRTC 81. xfce4-settings(displays): Detected CRTC 82. xfce4-settings(displays): Detected CRTC 83. xfce4-settings(displays): Detected CRTC 84. xfce4-settings(displays): Detected output 85 DisplayPort-0. xfce4-settings(displays): Detected output 86 HDMI-0. xfce4-settings(displays): Detected output 88 DVI-1. xfce4-settings(displays): Noutput: before = 3, after = 3. xfce4-settings(displays): RRScreenChangeNotify event received. xfce4-settings(displays): Refreshing RandR cache. xfce4-settings(displays): Detected CRTC 80. xfce4-settings(displays): Detected CRTC 79. xfce4-settings(displays): Detected CRTC 81. xfce4-settings(displays): Detected CRTC 82. xfce4-settings(displays): Detected CRTC 83. xfce4-settings(displays): Detected CRTC 84. xfce4-settings(displays): Detected output 85 DisplayPort-0. xfce4-settings(displays): Detected output 86 HDMI-0. xfce4-settings(displays): Detected output 88 DVI-1. xfce4-settings(displays): Noutput: before = 3, after = 3. ========================================================= I'm assuming the important part from the X perspective is when xfsettingsd/displays.c:xfce_displays_helper_screen_on_event realises the display is Disconnected, and runs xfce_displays_helper_disable_crtc which calls XRRSetCrtcConfig with RRCrtc->mode of None/NULL. If the daemon is killed, no reconfiguration occurs and the desktop keeps its correct configuration - presumably at the X level its just treated like a monitor powering off and on - so I guess the next step is for me to understand what is causing the Disconnect event to be fired through the stack, since the monitor is definitely not disconnected in reality. Kudos to Michel for the guess earlier. -- You are receiving this mail because: You are the assignee for the bug.