Como desativar a configuração automática do monitor?

14

Estou executando o Ubuntu 16.04 (ramo de desenvolvimento), o XFCE como ambiente de desktop.

Meu computador está conectado a dois monitores. Um via cabo VGA comum e o outro conectado a um comutador HDMI. Essa configuração funciona bem, mas toda vez que eu troco temporariamente o HDMI Switcher para outra conexão HDMI, o Xorg detecta que o monitor foi desconectado e reconfigura o Xorg para usar apenas um único monitor, alternar o HDMI Switcher para o meu computador não reativa o monitor duplo usar qualquer um, eu tenho que acionar manualmente isso comxrandr

Como impedir que esse tipo de detecção e reconfiguração automática do monitor ocorra? Gostaria de poder trocar o HDMI Switcher sem que o computador faça nada.

Comando usado para restaurar a configuração de vários monitores:

xrandr \
 --output HDMI-1 \
   --mode "1920x1080" \
   --panning "1920x1080+1280+0/0x0+0+0" \
 --output DVI-1-I \
   --mode "1280x1024" \
   --panning "1280x1024/0x0+0+0"

Saída xrandr em uso regular:

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 de saída quando o comutador HDMI é alternado para uma conexão diferente:

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  

Mais algumas coisas que tentei:

Com o monitor conectado, descubra a modelo:

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

Depois, com o monitor desconectado:

$ 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

Isso me permite ativar a exibição quando desconectada, o que falharia devido ao modo inexistente 1920x1080. O problema, no entanto, permanece: se eu alternar o comutador HDMI, o monitor será desativado, mesmo que eu o tenha definido para um modo personalizado.

Estes são os eventos do udev ao desconectar o monitor com o comutador HDMI:

$ 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

Estes são os eventos do udev ao reativar a exibição com o comutador HDMI:

$ 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
fonte
Presumo que o monitor esteja listado xrandrquando reconectado? Você poderia postar a saída de xrandrquando a instalação é como você deseja? podemos facilmente restaurá-lo automaticamente ao reconectar. Além disso, qual é o seu xrandrcomando para " acionar manualmente ".
Jacob Vlijm
Atualizado a postagem. No entanto, eu não quero apenas restaurar automaticamente a configuração, quero que ela não seja bagunçada em primeiro lugar.
Grumbel 8/03/16
Provavelmente, isso está fora de alcance, a menos que você encontre um driver gráfico que o conserte. O problema é causado pelo fato de a comunicação entre o driver e sua tela falhar na conexão, saltando para os padrões. Você precisa de algum tipo de ação, seja por uma tecla de atalho ou automaticamente. Faça a sua escolha, corrigi-lo sujo ou não em todos os :)
Jacob Vlijm
@ Grumbel, você poderia adicionar a saída de sudo lshw -c displaypara a pergunta. Se você possui nvidia, tente a resposta em askubuntu.com/q/858798/26246
user.dz

Respostas:

2

Esta não é uma resposta final, apenas um ponteiro na direção certa. No XFCE, o xfsettingsdprograma é responsável por manipular o RRScreenChangeNotifyevento e acionar a chave de modo; a função exata pode ser encontrada na xfce4-settings-4.12.0/xfsettingsd/displays.clinha 77, a função é chamada xfce_displays_helper_screen_on_event. Desativar a função fará com que o modo não seja mais alterado quando um novo monitor for conectado.

Informações de depuração podem ser obtidas com:

DISPLAY=:0 XFSETTINGSD_DEBUG=512 xfsettingsd --replace --no-daemon
Grumbel
fonte
1
Obrigado pela sugestão. Desabilitei o manuseio do RRScreenChangeNotify e ele corrigiu muitos problemas na minha instalação, incluindo problemas nos quais os monitores acordavam imediatamente após a suspensão.
Jim Paris
0

Para outros Canela e Gnomo, uma solução pode ser encontrada aqui :

Canela:

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

Gnomo:

gsettings set org.gnome.settings-daemon.plugins.xrandr active false
Grumbel
fonte