How to disable monitor auto configuration?
Solution 1
This is not a final answer, just a pointer into the right direction. On XFCE the xfsettingsd
programm is responsible for handling of the RRScreenChangeNotify
event and triggering the mode switch, the exact function can be found in xfce4-settings-4.12.0/xfsettingsd/displays.c
line 77, the function is called xfce_displays_helper_screen_on_event
. Disabling the function will make the mode no longer change when a new monitor connects.
Debug information can be obtained with:
DISPLAY=:0 XFSETTINGSD_DEBUG=512 xfsettingsd --replace --no-daemon
Solution 2
For other Cinnamon and Gnome a solution can be found here:
Cinnamon:
gsettings set org.cinnamon.settings-daemon.plugins.xrandr active false
Gnome:
gsettings set org.gnome.settings-daemon.plugins.xrandr active false
Solution 3
The following command worked for me on Ubuntu Mate 20.04:
gsettings set org.mate.SettingsDaemon.plugins.xrandr active false
Before applying this fix, I had been running into a similar situation where turning off my HDMI connected monitor would result in it never coming back unless I manually ran xrandr
with known good settings.
Related videos on Youtube
Navin Peiris
Updated on September 18, 2022Comments
-
Navin Peiris over 1 year
Im running Ubuntu 16.04 (dev branch), XFCE as desktop environment.
My computer is connected to two monitors. One via regular VGA cable and the other is connected to a HDMI Switcher. That setup works fine, but every time I temporarily change the HDMI Switcher to another HDMI connection Xorg detects that the monitor has been disconnected and reconfigures Xorg to only use a single monitor, switching the HDMI Switcher back to my computer doesn't reactivate dual monitor use either, I have to manually trigger that with
xrandr
How can I prevent this kind of automatic monitor detection and reconfiguration from happening? I'd like to be able to switch the HDMI Switcher without the computer doing anything.
Command used to restore the multi-monitor setup:
xrandr \ --output HDMI-1 \ --mode "1920x1080" \ --panning "1920x1080+1280+0/0x0+0+0" \ --output DVI-1-I \ --mode "1280x1024" \ --panning "1280x1024/0x0+0+0"
xrandr output on regular use:
Screen 0: minimum 320 x 200, current 3200 x 1080, maximum 8192 x 8192 DP-1 disconnected (normal left inverted right x axis y axis) HDMI-1 connected 1920x1080+1280+0 (normal left inverted right x axis y axis) 443mm x 249mm panning 1920x1080+1280+0 1920x1080 60.00*+ 60.00 50.00 59.94 59.93 1920x1080i 60.00 50.00 59.94 1680x1050 59.95 59.88 1600x1024 60.17 1400x1050 74.76 70.00 59.98 1280x1024 75.02 60.02 1440x900 59.89 59.90 1280x960 60.00 1360x768 59.80 59.96 1280x800 59.91 1152x864 75.00 75.00 70.00 60.00 1280x720 60.00 50.00 59.94 1024x768 60.04 75.03 70.07 60.00 960x720 75.00 60.00 928x696 75.00 60.05 896x672 75.05 60.01 960x600 60.00 832x624 74.55 960x540 59.99 800x600 75.00 70.00 65.00 60.00 72.19 75.00 60.32 56.25 840x525 74.96 69.88 60.01 59.88 720x576 50.00 800x512 60.17 700x525 74.76 70.06 59.98 720x480 60.00 59.94 640x512 75.02 60.02 720x450 59.89 640x480 60.00 72.81 75.00 66.67 60.00 59.94 720x400 70.08 680x384 59.80 59.96 576x432 75.00 75.00 70.00 60.06 512x384 75.03 70.07 60.00 416x312 74.66 400x300 72.19 75.12 60.32 56.34 320x240 72.81 75.00 60.05 DVI-I-1 connected 1280x1024+0+0 (normal left inverted right x axis y axis) 359mm x 287mm 1280x1024 60.02*+ 75.02 1280x960 60.00 1280x800 74.93 59.81 1152x864 75.00 1280x768 74.89 59.87 1280x720 60.00 1024x768 75.08 75.03 70.07 60.00 1024x576 59.97 832x624 74.55 800x600 72.19 75.00 70.01 60.32 56.25 848x480 60.00 640x480 75.00 72.81 66.67 60.00 720x400 70.08
xrandr output when HDMI switcher is switched to a different connection:
Screen 0: minimum 320 x 200, current 1280 x 1024, maximum 8192 x 8192 DP-1 disconnected (normal left inverted right x axis y axis) HDMI-1 disconnected (normal left inverted right x axis y axis) DVI-I-1 connected 1280x1024+0+0 (normal left inverted right x axis y axis) 359mm x 287mm 1280x1024 60.02*+ 75.02 1280x960 60.00 1280x800 74.93 59.81 1152x864 75.00 1280x768 74.89 59.87 1280x720 60.00 1024x768 75.08 75.03 70.07 60.00 1024x576 59.97 832x624 74.55 800x600 72.19 75.00 70.01 60.32 56.25 848x480 60.00 640x480 75.00 72.81 66.67 60.00 720x400 70.08
Some more things I tried:
With the monitor connected find out the modeline:
$ xvidtune -show "1920x1080" 148.50 1920 2008 2052 2200 1080 1084 1089 1125 -hsync +vsync
Then with the monitor disconnected:
$ xrandr --newmode "1920x1080-new" 148.50 1920 2008 2052 2200 1080 1084 1089 1125 -hsync +vsync $ xrandr --addmode HDMI-1 1920x1080-new $ xrandr --output HDMI-1 --mode 1920x1080-new
This allows me to activate the display when disconnected, which would otherwise fail due to non-existent mode 1920x1080. The problem however remains, if I switch the HDMI Switcher the display gets disabled, even if I have it set to a custom mode.
This are the udev events when disconnecting the display with the HDMI Switcher:
$ udevadm monitor --property monitor will print the received events for: UDEV - the event which udev sends out after rule processing KERNEL - the kernel uevent KERNEL[41678.571099] change /devices/pci0000:00/0000:00:02.0/0000:01:00.0/drm/card0 (drm) ACTION=change DEVNAME=/dev/dri/card0 DEVPATH=/devices/pci0000:00/0000:00:02.0/0000:01:00.0/drm/card0 DEVTYPE=drm_minor HOTPLUG=1 MAJOR=226 MINOR=0 SEQNUM=3248 SUBSYSTEM=drm UDEV [41678.573432] change /devices/pci0000:00/0000:00:02.0/0000:01:00.0/drm/card0 (drm) ACTION=change DEVNAME=/dev/dri/card0 DEVPATH=/devices/pci0000:00/0000:00:02.0/0000:01:00.0/drm/card0 DEVTYPE=drm_minor HOTPLUG=1 ID_FOR_SEAT=drm-pci-0000_01_00_0 ID_PATH=pci-0000:01:00.0 ID_PATH_TAG=pci-0000_01_00_0 MAJOR=226 MINOR=0 SEQNUM=3248 SUBSYSTEM=drm TAGS=:uaccess:master-of-seat:seat: USEC_INITIALIZED=31279519
This are the udev events when reenabling the display with the HDMI Switcher:
$ udevadm monitor --property monitor will print the received events for: UDEV - the event which udev sends out after rule processing KERNEL - the kernel uevent KERNEL[41696.104481] change /devices/pci0000:00/0000:00:02.0/0000:01:00.0/drm/card0 (drm) ACTION=change DEVNAME=/dev/dri/card0 DEVPATH=/devices/pci0000:00/0000:00:02.0/0000:01:00.0/drm/card0 DEVTYPE=drm_minor HOTPLUG=1 MAJOR=226 MINOR=0 SEQNUM=3249 SUBSYSTEM=drm UDEV [41696.105685] change /devices/pci0000:00/0000:00:02.0/0000:01:00.0/drm/card0 (drm) ACTION=change DEVNAME=/dev/dri/card0 DEVPATH=/devices/pci0000:00/0000:00:02.0/0000:01:00.0/drm/card0 DEVTYPE=drm_minor HOTPLUG=1 ID_FOR_SEAT=drm-pci-0000_01_00_0 ID_PATH=pci-0000:01:00.0 ID_PATH_TAG=pci-0000_01_00_0 MAJOR=226 MINOR=0 SEQNUM=3249 SUBSYSTEM=drm TAGS=:seat:master-of-seat:uaccess: USEC_INITIALIZED=31279519
.
$ sudo lshw -c display *-display description: VGA compatible controller product: Redwood XT [Radeon HD 5670/5690/5730] vendor: Advanced Micro Devices, Inc. [AMD/ATI] physical id: 0 bus info: pci@0000:01:00.0 version: 00 width: 64 bits clock: 33MHz capabilities: pm pciexpress msi vga_controller bus_master cap_list rom configuration: driver=radeon latency=0 resources: irq:55 memory:c0000000-cfffffff memory:fea20000-fea3ffff ioport:e000(size=256) memory:c0000-dffff
-
Admin about 8 yearsUpdated the post. However I don't want to just automatically restore the config, I want it to not get messed up in the first place.
-
Admin almost 8 yearsThat is most likely out of reach, unless you find a graphics driver that fixes it. The issue is caused by the fact that the communication between the driver and your screen fails on connection, jumping to defaults. You need some kind of action, either by a shortcut key or automaitcally. Make your pick, fix it dirty or not at all :)
-
Admin over 7 years@Grumbel, Could you add the output of
sudo lshw -c display
to the question. If you have nvidia, try the answer in askubuntu.com/q/858798/26246
-
-
Jim Paris over 4 yearsThanks for the suggestion. I disabled the handling of RRScreenChangeNotify and it fixed a lot of issues on my setup, including problems where monitors would wake up immediately after suspending.
-
GDorn over 3 years@JimParis But how did you disable RRScreenChangeNotify?
-
Jim Paris over 3 yearsIn the function
xfce_displays_helper_screen_on_event
, right inside theif (event_num == RRScreenChangeNotify)
block, I addedreturn GDK_FILTER_REMOVE;
-
Florian Echtler about 3 yearsThis would have been perfect, but unfortunately doesn't work with gnome-shell anymore (e.g. on Ubuntu 20.04).
-
Zoltan almost 3 yearsUnfortunately this does not work with the Cinnamon version shipped in Ubuntu 20.04 any more, the
csd-xrandr
executable must be directly dealt with instead: github.com/linuxmint/cinnamon/issues/5619