拔出并重新插入后,笔记本电脑未检测到 HDMI 显示器

mde*_*wit 5 display nvidia multiple-monitors monitor

我的笔记本电脑 HDMI 端口连接了一个外接显示器。当我启动我的笔记本电脑时,笔记本电脑屏幕和显示器都成功打开并且运行良好。但是,每当我拔下外接显示器,然后重新插入时,Ubuntu 都无法检测到显示器已再次插入,并显示为已断开连接。让外接显示器再次打开的唯一方法是重新启动我的笔记本电脑。

笔记本电脑规格:Dell Inspiron 15 Gaming Nvidia GeForce GTX 960M

lshw 显示部分的输出:

       *-display
            description: 3D controller
            product: GM107M [GeForce GTX 960M]
            vendor: NVIDIA Corporation
            physical id: 0
            bus info: pci@0000:01:00.0
            version: a2
            width: 64 bits
            clock: 33MHz
            capabilities: pm msi pciexpress bus_master cap_list rom
            configuration: driver=nvidia latency=0
            resources: irq:130 memory:e2000000-e2ffffff memory:d0000000-dfffffff memory:e0000000-e1ffffff ioport:e000(size=128) memory:e3000000-e307ffff
Run Code Online (Sandbox Code Playgroud)

这是连接两个屏幕时我的 xrandr 输出:

Screen 0: minimum 8 x 8, current 3840 x 1113, maximum 16384 x 16384
eDP-1-1 connected primary 1920x1080+0+33 344mm x 193mm
   1920x1080     60.00*+  59.93    48.00  
   1680x1050     59.95    59.88  
   1600x1024     60.17  
   1400x1050     59.98  
   1280x1024     60.02  
   1440x900      59.89  
   1280x960      60.00  
   1360x768      59.80    59.96  
   1152x864      60.00  
   1024x768      60.04    60.00  
   960x720       60.00  
   928x696       60.05  
   896x672       60.01  
   960x600       60.00  
   960x540       59.99  
   800x600       60.00    60.32    56.25  
   840x525       60.01    59.88  
   800x512       60.17  
   700x525       59.98  
   640x512       60.02  
   720x450       59.89  
   640x480       60.00    59.94  
   680x384       59.80    59.96  
   576x432       60.06  
   512x384       60.00  
   400x300       60.32    56.34  
   320x240       60.05  
DP-1-1 connected 1920x1080+1920+0 510mm x 290mm
   1920x1080     60.00*+
   1680x1050     59.88  
   1280x1024     75.02    60.02  
   1280x960      60.00  
   1152x864      75.00  
   1024x768      75.03    60.00  
   832x624       74.55  
   800x600       75.00    60.32    56.25  
   640x480       75.00    59.94  
   720x400       70.08  
HDMI-1-1 disconnected
Run Code Online (Sandbox Code Playgroud)

拔下并重新插入后,DP-1-1 显示为已断开连接。

此外, xrandr --auto 不会重新打开屏幕。还尝试重新启动 lig​​htdm 和 unity,但无济于事。

我尝试过以下显示驱动程序,但没有一个能解决问题:

  • noveau 开源驱动
  • nvidia-375.26(由 nvidia 推荐)

请注意,在 Windows 10 中,在拔出、插入循环后重新检测显示器,因此这应该不是主板的问题。

我需要经常拔掉屏幕,因为我必须去参加会议等并在那里使用我的笔记本电脑。基本上,上述问题导致我每天最多重启笔记本电脑 5 次。请帮忙!

请注意,这与拔下并重新插入 HDMI 后未检测到第二台显示器不同

Win*_*nix 2

我能找到的最接近您的问题的是这个线程(ubuntuforums.org - Nvidia GTX 950 and TV not see signal after inputchange or power off/on),它引用了 nVidia 970/980 的解决方案。您的 960 似乎介于两者之间。

提出的解决方案是使用以下代码将监视器重置为不良模式,然后重置为良好模式:

#!/bin/sh
#Fix TV state when HDMI link is lost.
#By Mario Limonciello <email address hidden>
sleep 10
OUTPUT="HDMI-0"
BAD_MODE="1280x720"
GOOD_MODE="1920x1080"

for MODE in $BAD_MODE $GOOD_MODE; do
DISPLAY=:0 xrandr --output $OUTPUT --mode $MODE
sleep 2
done
Run Code Online (Sandbox Code Playgroud)

我认为这个脚本可以改进,但想以其原始版本发布。


链接中的一位作者想要设置udev为在热插拔事件上自动调用脚本。hotplugtv我过去曾使用此代码 ( ) 对 HDMI 执行此操作,以修复 Ubuntu 16.04pulseaudio 8 错误:

#!/bin/bash

if [[ $(cat /sys/class/drm/card*-HDMI-A-1/status | grep -Ec "^connected") -eq 1 ]]; then
        /bin/sleep 2;
        export PULSE_RUNTIME_PATH="/run/user/1000/pulse/";
        sudo -u rick -E pacmd set-card-profile 0 output:hdmi-stereo;
else
        export PULSE_RUNTIME_PATH="/run/user/1000/pulse/";
        sudo -u rick -E pacmd set-card-profile 0 output:analog-stereo;
fi

exit 0
Run Code Online (Sandbox Code Playgroud)

您将需要使用您的目录修改 if 测试/sys/class/drm/...。然后使用重置 hdmi 屏幕的脚本文件修改 if 测试的真实部分。在 if 测试的错误方面,如果拔掉设备:后没有任何事情可做,只需将代码替换为(noop) 即可。hdmi

为了udev在热插拔事件期间调用此脚本,创建/etc/udev/rules.d/99-hotplugtv.rules包含以下内容的文件:

ACTION=="change", SUBSYSTEM=="drm", ENV{HOTPLUG}=="1", RUN+="/path/to/hotplugtv"
Run Code Online (Sandbox Code Playgroud)

更改/path/to/为放置脚本的路径hotplugtv