O sistema não detecta a porta de exibição hot-plug (através do conector thunderbolt)

9

Meu monitor externo (conectado ao meu laptop através de raio) funciona bem se conectado antes da inicialização. No entanto, uma vez desconectado ou desconectado por qualquer meio, o xrandr não detectará mais o monitor reconectado.

Estou executando Arch Linux , usando bumblebee para manipulação de cartões gráficos. O cartão externo é conectado através do conector de raio. Alguém poderia me dizer o que está errado com a máquina e como posso fazer o trabalho de hotplugging? Obrigado.

[Detalhe de depuração]

Após vários encadeamentos em bumblebee e udevadm , fiz vários testes e criei um script hotplug. No entanto, o problema ainda não está resolvido. O resultado é postado como abaixo.

Para bumblebee, eu não ajustei muito, já que o segundo monitor é detectado bem quando não é hotplugged.

Para um problema relacionado a 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 quando ligar o monitor em:

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, então configurei uma regra do udev para ajudar xrandr a 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 encerra normalmente, mas depois xrandr --query ainda mostra DP1 e DP2 desconectados.

    
por Chong 08.09.2015 / 17:07

1 resposta

1

Eu encontrei seu código e persisti em tentar fazê-lo funcionar. Em condições NÃO poderia fazê-lo funcionar com um paradigma "se então". o "xrandr | grep" ALWAYS falhou ao ser verdadeiro quando executado como disparador 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:

sudo udevadm control --reload-rules

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, ele não foi executado. Esta é a regra do udev (/etc/udev/rules.d/95-monitor-hotplug.rules):

ACTION=="remove", SUBSYSTEM=="hidraw", RUN+="/bin/bash /home/user/scripts/hotunplug-displayport.sh"
ACTION=="add", SUBSYSTEM=="hidraw", RUN+="/bin/bash /home/user/scripts/hotplug-displayport.sh"

Este é o meu script hotplug

#!/bin/bash
export XAUTHORITY=/home/user/.Xauthority
DISPLAY=:0 /usr/bin/xrandr --addmode DP-1 1680x1050
DISPLAY=:0 /usr/bin/xrandr --output DP-1 --right-of  eDP-1 --mode 1680x1050
echo "$(date) : Hotplug Connect DP-1" >> /var/log/hotplug.txt
DISPLAY=:0 /usr/bin/xrandr --addmode DP-2 1680x1050
DISPLAY=:0 /usr/bin/xrandr --output DP-2 --right-of  eDP-1 --mode 1680x1050
echo "$(date) : Hotplug Connect DP-2" >> /var/log/hotplug.txt

Este é meu script de desconexão a quente

#!/bin/bash
export XAUTHORITY=/home/user/.Xauthority
DISPLAY=:0 /usr/bin/xrandr --output DP-1 --off
echo "$(date) : Hotplug Disconnect DP-1" >> /var/log/hotplug.txt
DISPLAY=:0 /usr/bin/xrandr --output DP-2 --off
echo "$(date) : Hotplug Disconnect DP-2" >> /var/log/hotplug.txt
    
por 08.10.2017 / 20:51