拔下并重新插入后笔记本电脑无法检测到 HDMI 显示器

拔下并重新插入后笔记本电脑无法检测到 HDMI 显示器

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

笔记本电脑规格:戴尔 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

这是两个屏幕连接时 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

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

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

我尝试过以下显示驱动程序,但都无法解决问题:

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

请注意,在 Windows 10 中,拔下电源后再插入时会重新检测到显示器,因此这不应该是主板的问题。

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

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

答案1

我能找到的最接近你的问题的是这个线程(ubuntuforums.org - Nvidia GTX 950 和电视在输入更改或关闭/打开电源后看不到信号) 引用了 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

我认为这个脚本可以改进但想以其原始形式发布它。


链接中的一位作者想要设置udev为在热插拔事件发生时自动调用脚本。我hotplugtv过去曾用此代码 () 对 HDMI 执行此操作,以修复 Ubuntu 16.04 pulseaudio 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

您需要使用/sys/class/drm/...目录修改 if 测试。然后使用重置 hdmi 屏幕的脚本文件修改 if 测试的正确部分。如果设备拔出:后没有任何操作,则在 if 测试的错误部分将代码替换为 (noop) 。hdmi

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

ACTION=="change", SUBSYSTEM=="drm", ENV{HOTPLUG}=="1", RUN+="/path/to/hotplugtv"

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

相关内容