시스템에서 핫 플러그 ​​된 디스플레이 포트를 감지하지 못함 (벼락 커넥터를 통해)


9

부팅하기 전에 연결된 외부 디스플레이 (썬더 볼트를 통해 랩톱에 연결됨)가 제대로 작동합니다. 그러나 일단 전원 플러그를 뽑거나 분리하면 xrandr는 다시 연결된 모니터를 더 이상 감지하지 않습니다.

나는 실행하고 Arch Linux사용하는 bumblebee그래픽 카드 취급. 외부 카드는 벼락 커넥터를 통해 연결됩니다. 누군가 기계에 어떤 문제가 있는지 알려 주시면 어떻게 핫 플러깅 작업을 수행 할 수 있습니까? 감사.


[디버깅 세부 사항]

여러 스레드를 따라 bumblebee하고 udevadm, 나는 몇 가지 테스트를하고 핫 플러그 스크립트를했다. 그러나 문제는 여전히 해결되지 않았습니다. 결과는 다음과 같이 게시됩니다.

땅벌의 경우, 두 번째 모니터가 핫 플러그되지 않았을 때 잘 감지되므로 많이 조정하지 않았습니다.

핫 플러그 ​​관련 문제 나는 다음을 수행했다.

모니터가 정상적으로 작동하면, xrandr --query반환

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* 

...

DP2에서 모니터를 udevadm monitor --environment --udev연 상태 에서 플러그를 뽑을 때 수집 된 정보는 다음과 같습니다.

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

그리고 모니터를 꽂을 때 :

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

그 보인다 udev모니터가 연결되어 때 나는 잘 살고 업 있도록 도움말에있는 udev 규칙, 하드웨어를 검색 할 수 있습니다 xrandr사용하는 새 모니터를. 내 스크립트 /etc/udev/rules.d/95-monitor-hotplug.rules는 다음과 같습니다.

ACTION=="change", SUBSYSTEM=="drm", RUN+="/usr/local/bin/hotplug_monitor.sh"

그리고 /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

스크립트는 정상적으로 실행되고 종료되지만 이후에도 xrandr --query여전히 표시 DP1되고 DP2연결이 끊어집니다.


나는 똑같은 행동을 경험하고 있습니다. 또한 아치에. 나는 행운없이 엔비디아 독점 드라이버와 함께 범블비없이 시도했습니다. 당신은 누보와 함께 시도 했습니까?
Johnride

@Johnride 내 그래픽 카드는 Maxwell Architecture입니다. 누보는 아직 작동하지 않았습니다. 현재 HDMI 포트와 직접 NVIDIA 드라이버를 사용하고 있습니다. 그들이 잘 작동하는 것 같습니다.
Chong

이것은 다음 커널 중 하나에서 수정 될 것입니다. bugzilla.kernel.org/show_bug.cgi?id=115121

누구든지 해결책을 찾았습니까? 위에서 언급 한 것보다 새로운 커널을 가지고 있으며 여전히 Chong과 동일한 문제가 있습니다. 네트워크 포트, 웹캠 및 USB가 감지되어 작동하지만 표시되지 않습니다.
dvdgc13

#! / bin / bash (sh가 아님) 그렇지 않으면 함수 명령문에 오류가 있습니다.
nd34567s32e

답변:


1

나는 당신의 코드를 발견하고 그것을 작동 시키려고 노력했습니다. NO 조건 하에서는 "if if"패러다임으로 작동시킬 수 있습니다. "xrandr | grep"은 udev 트리거로 실행할 때 항상 참이 아니었지만 수동으로 실행하면 작동했습니다. 나는 그것을 두 개의 스크립트로 나눌 수밖에 없었다.

장치가 다르지만 (StarTech CDPVGDVHDMDP) 여기에 내 버전을 게시합니다.

먼저 문제 해결시 udev 규칙을 다시로드하는 것이 도움이된다는 것을 알았습니다.

sudo udevadm control --reload-rules

내 장치는 약간 달랐으며 하위 시스템 "hidraw"가 트리거 할 수있는 것으로 나타났습니다. 또한 / bin / bash / path / to / script "를 실행해야했습니다. 그렇지 않으면 실행되지 않았습니다. 이것은 내 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"

이것은 내 핫 플러그 ​​스크립트입니다

#!/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

이것은 내 핫 플러그 ​​스크립트입니다

#!/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

이것을 게시 한 후 hotUNplug 스크립트를 비활성화했습니다. 필요하지 않으며 실제로 다른 USB 장치를 연결할 때 문제가 발생했기 때문입니다.
nd34567s32e
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.