Как отключить автоматическую настройку монитора?

14

Я использую Ubuntu 16.04 (ветвь разработчика), XFCE как среду рабочего стола.

Мой компьютер подключен к двум мониторам. Один через обычный кабель VGA, а другой подключен к HDMI-коммутатору. Эта настройка работает нормально, но каждый раз, когда я временно меняю переключатель HDMI на другое соединение HDMI, Xorg обнаруживает, что монитор был отключен, и переконфигурирует Xorg для использования только одного монитора, переключение переключателя HDMI обратно на мой компьютер не активирует двойной монитор использовать либо, я должен вручную вызвать это сxrandr

Как можно предотвратить автоматическое обнаружение и изменение конфигурации монитора? Я хотел бы иметь возможность переключать переключатель HDMI без компьютера ничего не делая.

Команда, используемая для восстановления настройки нескольких мониторов:

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 при регулярном использовании:

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 при переключении HDMI-переключателя на другое соединение:

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  

Еще несколько вещей, которые я попробовал:

С подключенным монитором узнайте моделин:

$ xvidtune -show 
"1920x1080"   148.50   1920 2008 2052 2200   1080 1084 1089 1125 -hsync +vsync

Затем с отключенным монитором:

$ 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

Это позволяет мне активировать дисплей при отключении, что в противном случае не помогло бы из-за несуществующего режима 1920x1080. Однако проблема остается, если я переключаю HDMI Switcher, дисплей отключается, даже если он установлен в пользовательский режим.

Это события udev при отключении дисплея с помощью 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

Это события udev при повторном включении дисплея с помощью 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
Grumbel
источник
Я предполагаю, что монитор включен в список xrandrпри повторном подключении? Не могли бы вы опубликовать вывод, xrandrкогда установка будет такой, какой вам нравится? затем мы можем легко восстановить его автоматически при повторном подключении. Кроме того, что ваша xrandrкоманда для « запуска вручную ».
Джейкоб Влейм
Обновил пост. Однако я не хочу просто автоматически восстанавливать конфигурацию, я хочу, чтобы она не испортилась в первую очередь.
Грамбель
Скорее всего, это недостижимо, если вы не найдете графический драйвер, который это исправляет. Проблема вызвана тем, что при подключении происходит сбой связи между драйвером и экраном, что приводит к скачкам по умолчанию. Вам нужно какое-то действие, либо с помощью сочетания клавиш, либо автоматически. Сделай свой выбор, починить его грязным или нет совсем :)
Джейкоб Влейм
@ Грумбель, не могли бы вы добавить вывод sudo lshw -c displayк вопросу. Если у вас есть nvidia, попробуйте ответ в askubuntu.com/q/858798/26246
user.dz

Ответы:

2

Это не окончательный ответ, просто указатель в правильном направлении. На XFCE xfsettingsdпрограмма отвечает за обработку RRScreenChangeNotifyсобытия и запуск переключателя режима, точная функция находится в xfce4-settings-4.12.0/xfsettingsd/displays.cстроке 77, функция вызывается xfce_displays_helper_screen_on_event. Отключение функции отключит режим при подключении нового монитора.

Отладочную информацию можно получить с помощью:

DISPLAY=:0 XFSETTINGSD_DEBUG=512 xfsettingsd --replace --no-daemon
Grumbel
источник
1
Спасибо за предложение. Я отключил обработку RRScreenChangeNotify, и это исправило много проблем в моей настройке, в том числе проблемы, когда мониторы просыпались сразу после приостановки.
Джим Пэрис
0

Для других Корицы и Гнома решение может быть найдено здесь :

Корица:

gsettings set org.cinnamon.settings-daemon.plugins.xrandr active false

Гном:

gsettings set org.gnome.settings-daemon.plugins.xrandr active false
Grumbel
источник