系统未检测到热插拔的显示端口(通过雷电连接器)


9

如果在启动之前连接了外接显示器(通过雷电连接到笔记本电脑),则可以正常工作。但是,一旦以任何方式将其拔下或断开连接,xrandr将不再检测到重新连接的显示器。

我正在运行Arch Linuxbumblebee用于图形卡处理。外部卡通过雷电连接器连接。有人可以告诉我机器出了什么问题,如何使热插拔正常工作?谢谢。


[调试细节]

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* 

...

udevadm monitor --environment --udev打开的DP2中拔出监视器插头时,收集到的信息是:

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仍显示DP1DP2断开连接。


我正在经历完全相同的行为。同样在拱门上。我在没有大黄蜂的情况下尝试使用Nvidia专有驱动程序,但没有运气。您尝试过nouveau吗?
约翰里德(Johnride)

@Johnride我的图形卡是Maxwell Architecture。Nouveau尚未使它工作。目前,我正在使用HDMI端口和直接NVIDIA驱动程序。看来他们运作良好。
Chong

这将是固定在下一内核之一bugzilla.kernel.org/show_bug.cgi?id=115121

有没有人找到解决方案?我的内核比上面提到的要新,但我仍然遇到与Chong相同的问题。我检测到网络端口,网络摄像头和USB可以正常工作,但无法正常显示。
dvdgc13

#!/ bin / bash(不是sh),否则函数语句错误
nd34567s32e

Answers:


1

我找到了您的代码,并坚持尝试使其正常运行。在任何情况下,我都不能使其适用于“如果那么”的范例。当作为udev触发器运行时,“ xrandr | grep”总是不正确,但如果我手动运行它,则可以工作。我被迫将其分为两个脚本。

尽管我的设备不同(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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.