5

У меня есть три настройки монитора (xorg.conf, сгенерированный с помощью amdcccle: http://pastebin.com/gWSVEyLa), работающий на Arch Linux с Xmonad в качестве моего оконного менеджера. Физически есть HDTV слева, хороший монитор Dell в центре и повернутый монитор справа. Поскольку мой HDTV имеет только один вход HDMI, я использую переключатель 4 входа, 2 выхода с некоторыми другими устройствами. Мой HDTV не всегда подключен, что приводит к отключению этого раздела моего виртуального рабочего стола. Это вызывает много неприятностей:

  1. Раздражающее мерцание экрана из-за события горячего подключения драйвера (которое в основном выполняется xrandr --auto).
  2. Изменяется физический порядок экрана (hdtv становится третьим монитором вместо первого), из-за чего мои сочетания клавиш для фокусировки на экране оказываются неверными. Я сделал это не проблема с моей конфигурации xmonad, но привязки все еще изменяются, когда обнаружены только два монитора.
  3. Если я запускаю свой компьютер без подключенного HDTV, этот раздел моего виртуального рабочего стола будет недоступен до тех пор, пока он не подключится к событию hotplug или я не запустлю xrandr, чтобы включить его.
  4. Окна из рабочей области на отключенном мониторе перемещаются в другие рабочие области на видимых мониторах. По сути, это означает, что любые окна, которые отображались на моем HDTV, будут отображаться случайным образом, что бессмысленно из-за того, как Xmonad обрабатывает рабочие пространства.
  5. Я не могу перевести один или два монитора в режим ожидания dpms или выключить дисплей вручную с помощью xrandr --off потому что остальные будут в шоке . Например, если я просто смотрю что-то на своем телевизоре, я не обязательно хочу, чтобы другие два монитора были включены, но я хочу, чтобы их положение окна оставалось нетронутым.

Когда я переключаю входы на переключателе HDMI или включаю / выключаю его, или физически отсоединяю кабели, мой видеодрайвер интерпретирует это как отключение моего монитора, и он удаляется с моего виртуального рабочего стола. Я хочу, чтобы X всегда действовал так, как если бы все эти три монитора были подключены, а не отвечал на события горячего подключения монитора. Здорово, что Linux способен работать с полностью автоматической конфигурацией xorg, но я хочу эту точную настройку все время, пока не поменяю свое оборудование. События горячего подключения выглядят так в моих журналах xorg:

When disconnected:
  [  1684.459] (II) fglrx(0): Hot-plug event occurs on device: 1:0:0
  [  1684.459] (II) fglrx(0): EDID vendor "DEL", prod id 40993
  +--  3 lines: [  1684.459] (II) fglrx(0): Using hsync ranges from config file-----------------------------------------------------------------------------------------------------
  +-- 11 lines: [  1684.459] (II) fglrx(0): Modeline "1600x1200"x0.0  162.00  1600 1664 1856 2160  1200 1201 1204 1250 +hsync +vsync (75.0 kHz eP)----------------------------------
  [  1684.468] (II) fglrx(0): xdl_xs113_atiddxDisplayScreenEnableDisplays
  [  1684.468] (II) fglrx(0): User Preference Output DFP1 using refresh rate 60.0 Hz.
  [  1684.537] (II) fglrx(0): User Preference Output DFP10 using refresh rate 60.0 Hz.

When reconnected:
  [  1694.077] (II) fglrx(0): Hot-plug event occurs on device: 1:0:0
  [  1694.210] (II) fglrx(0): EDID vendor "DEL", prod id 40993
  +--  3 lines: [  1694.210] (II) fglrx(0): Using hsync ranges from config file-----------------------------------------------------------------------------------------------------
  +--  9 lines: [  1694.210] (II) fglrx(0): Modeline "1600x1200"x0.0  162.00  1600 1664 1856 2160  1200 1201 1204 1250 +hsync +vsync (75.0 kHz eP)----------------------------------
  [  1694.219] (II) fglrx(0): xdl_xs113_atiddxDisplayScreenEnableDisplays
  [  1694.219] (II) fglrx(0): User Preference Output DFP1 using refresh rate 60.0 Hz.
  [  1694.288] (II) fglrx(0): User Preference Output DFP9 using refresh rate 60.0 Hz.
  [  1694.359] (II) fglrx(0): User Preference Output DFP10 using refresh rate 60.0 Hz.

Меня действительно не волнует горячее подключение, потому что я использую Xmonad и предпочел бы всегда выводить данные на эти три устройства, независимо от того, считаются они подключенными или нет. Возможно, есть какой-то способ настроить видеодрайвер, чтобы он делал то, что я хочу, но я не уверен, что опция существует и пока не нашла полезной информации, поэтому я спрашиваю здесь. Если бы это работало правильно, выходные данные этих двух команд были бы идентичны и не вызывали бы ничего визуально кроме выключения / включения HDTV:

$ xrandr | grep 'DFP.* connected'
DFP1 connected 2560x1600+1920+0 (normal left inverted right x axis y axis) 641mm x 401mm
DFP9 connected 1920x1080+0+0 (normal left inverted right x axis y axis) 708mm x 398mm
DFP10 connected 1200x1600+4480+0 left (normal left inverted right x axis y axis) 367mm x 275mm
$ xrandr --verbose --output 'DFP9' --off
screen 0: 3760x1600 994x423 mm  96.08dpi
crtc 0:    2560x1600   60.0 +0+0 "DFP1"
crtc 2:    1600x1200   60.0 +2560+0 "DFP10"
$ xrandr | grep 'DFP.* connected'
DFP1 connected 2560x1600+0+0 (normal left inverted right x axis y axis) 641mm x 401mm
DFP9 connected (normal left inverted right x axis y axis)
DFP10 connected 1200x1600+2560+0 left (normal left inverted right x axis y axis) 367mm x 275mm
$ xrandr --verbose --output 'DFP9' --preferred --pos 0x0 --output 'DFP1' --preferred --pos 1920x0 --output DFP10 --preferred --pos 4480x0
screen 0: 5680x1600 1501x423 mm  96.08dpi
crtc 0:    2560x1600   60.0 +1920+0 "DFP1"
crtc 1:    1920x1080   60.0 +0+0 "DFP9"
crtc 2:    1600x1200   60.0 +4480+0 "DFP10"
$ xrandr | grep 'DFP.* connected'
DFP1 connected 2560x1600+1920+0 (normal left inverted right x axis y axis) 641mm x 401mm
DFP9 connected 1920x1080+0+0 (normal left inverted right x axis y axis) 708mm x 398mm
DFP10 connected 1200x1600+4480+0 left (normal left inverted right x axis y axis) 367mm x 275mm

1 ответ1

1

Я пытаюсь решить эту проблему уже несколько недель. Лучшее, что я получил, - это настройка скрипта xrandr, который устанавливает дисплеи и их положение в соответствии с тем, что я и я связывал этот скрипт с сочетанием клавиш. Таким образом, всякий раз, когда я выключаю один монитор или просыпаюсь от сна, я нажимаю на ярлык, и все дисплеи устанавливаются на то, что я хочу.

Мой сценарий:

Сначала я получил названия своих дисплеев, выполнив команду xrandr. Для меня это были DP3.1, DP3.2 и DP-4.

Затем я установил свою команду с их разрешением и относительным положением:

xrandr --output DP-3.1 --auto --output DP-3.2 --auto --right-of DP-3.1 --output DP-4 --auto --right-of DP-3.2

Было бы гораздо приятнее, если бы xrandr просто "запомнил" эти настройки и никогда не менялся. Когда мои мониторы выходят из спящего режима, они обнаруживают, что они отключены, и портят все, что требует этого сценария, который запускается за пару секунд.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .