Meu monitor externo (conectado ao meu laptop através de um raio) funciona bem se conectado antes da inicialização. No entanto, uma vez desconectado ou desconectado, o xrandr não detectará mais o monitor reconectado.
Estou executando Arch Linux
, usando bumblebee
para manipulação de placas gráficas. A placa externa é conectada através do conector do raio. Alguém poderia me dizer o que há de errado com a máquina e como posso fazer o hotplug? Obrigado.
[Detalhe da depuração]
Após vários threads no bumblebee
e udevadm
, fiz vários testes e fiz um script de hotplug. No entanto, o problema ainda não está resolvido. O resultado é publicado como abaixo.
Para o zangão, não modifiquei muito, pois o segundo monitor é bem detectado quando não está conectado à tomada.
Para problemas relacionados ao hot plug. Eu fiz o seguinte:
Quando o monitor está funcionando normalmente, xrandr --query
retorna
Screen 0: minimum 8 x 8, current 2944 x 1080, maximum 32767 x 32767
eDP1 connected primary 1920x1080+0+0 (normal left inverted right x axis y axis) 382mm x 215mm
1920x1080 60.02*+
...
DP1 connected 1024x768+1920+0 (normal left inverted right x axis y axis) 0mm x 0mm
1024x768 60.00*
...
Ao desconectar o monitor do DP2 com udevadm monitor --environment --udev
aberto, as informações coletadas são:
UDEV [979.022342] change /devices/pci0000:00/0000:00:02.0/drm/card0 (drm)
ACTION=change
DEVNAME=/dev/dri/card0
DEVPATH=/devices/pci0000:00/0000:00:02.0/drm/card0
DEVTYPE=drm_minor
HOTPLUG=1
ID_FOR_SEAT=drm-pci-0000_00_02_0
ID_PATH=pci-0000:00:02.0
ID_PATH_TAG=pci-0000_00_02_0
MAJOR=226
MINOR=0
SEQNUM=2650
SUBSYSTEM=drm
TAGS=:master-of-seat:uaccess:seat:
USEC_INITIALIZED=3775241
E ao conectar o monitor:
UDEV [1111.426386] change /devices/pci0000:00/0000:00:02.0/drm/card0 (drm)
ACTION=change
DEVNAME=/dev/dri/card0
DEVPATH=/devices/pci0000:00/0000:00:02.0/drm/card0
DEVTYPE=drm_minor
HOTPLUG=1
ID_FOR_SEAT=drm-pci-0000_00_02_0
ID_PATH=pci-0000:00:02.0
ID_PATH_TAG=pci-0000_00_02_0
MAJOR=226
MINOR=0
SEQNUM=2651
SUBSYSTEM=drm
TAGS=:seat:uaccess:master-of-seat:
USEC_INITIALIZED=3775241
UDEV [1111.522857] change /devices/pci0000:00/0000:00:02.0/drm/card0 (drm)
ACTION=change
DEVNAME=/dev/dri/card0
DEVPATH=/devices/pci0000:00/0000:00:02.0/drm/card0
DEVTYPE=drm_minor
HOTPLUG=1
ID_FOR_SEAT=drm-pci-0000_00_02_0
ID_PATH=pci-0000:00:02.0
ID_PATH_TAG=pci-0000_00_02_0
MAJOR=226
MINOR=0
SEQNUM=2652
SUBSYSTEM=drm
TAGS=:seat:uaccess:master-of-seat:
USEC_INITIALIZED=3775241
Parece que udev
é capaz de detectar o hardware quando o monitor está conectado, por isso configurei uma regra do udev para ajudar a xrandr
usar o novo monitor. Meu script para /etc/udev/rules.d/95-monitor-hotplug.rules
é o seguinte:
ACTION=="change", SUBSYSTEM=="drm", RUN+="/usr/local/bin/hotplug_monitor.sh"
E /usr/local/bin/hotplug_monitor.sh
é
#!/bin/sh
export XAUTHORITY=/home/chong/.Xauthority
function connectDP1(){
DISPLAY=:0 xrandr --output DP1 --auto --right-of eDP1
}
function disconnectDP1(){
DISPLAY=:0 xrandr --output DP1 --off
}
function connectDP2(){
DISPLAY=:0 xrandr --output DP2 --auto --right-of eDP1
}
function disconnectDP2(){
DISPLAY=:0 xrandr --output DP2 --off
}
xrandr | grep "DP1 connected" &> /dev/null && connectDP1 || disconnectDP1
xrandr | grep "DP2 connected" &> /dev/null && connectDP2 || disconnectDP2
O script é executado e encerrado normalmente, mas depois xrandr --query
ainda é exibido DP1
e DP2
desconectado.
Respostas:
Encontrei seu código e persisti na tentativa de fazê-lo funcionar. Sob condições, eu poderia fazê-lo funcionar com um paradigma "se então". o "xrandr | grep" SEMPRE falhou em ser executado quando acionado como gatilho do udev, mas funcionou se eu o executasse manualmente. Fui forçado a dividi-lo em dois scripts.
Embora meu dispositivo seja diferente (StarTech CDPVGDVHDMDP), postarei minha versão aqui.
Primeiro, achei útil recarregar as regras do udev ao solucionar problemas:
Meu dispositivo era um pouco diferente e descobri que o subsistema "hidraw" era algo que eu poderia ativar. Além disso, fui forçado a executar / bin / bash / path / to / script "; caso contrário, não foi executado. Esta é minha regra do udev (/etc/udev/rules.d/95-monitor-hotplug.rules):
Este é o meu script hotplug
Este é o meu script hot-unplug
fonte