拔出并重新插入后,笔记本电脑无法检测到HDMI监视器

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

笔记本电脑规格:戴尔Inspiron 15游戏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不会重新打开屏幕。 也尝试重新启动lightdm和团结但无济于事。

我尝试使用以下显示驱动程序,但没有解决问题:

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

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

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

请注意,这与未插入的第二个显示器不同HDMI在拔下插头并重新插入后

我能找到的最接近你的问题的是这个线程( ubuntuforums.org – Nvidia GTX 950和电视在输入改变或断电/打开后没有看到信号 ),它引用了nVidia 970/980的解决方案。 看来你的960介于两者之间。

建议的解决方案是使用此代码将监视器重置为错误模式,然后重置为良好模式:

 #!/bin/sh #Fix TV state when HDMI link is lost. #By Mario Limonciello  

我认为这个脚本可以改进,但想把它发布在原来的版本中。


该链接中的一位作者想要设置udev以在热插拔事件上自动调用脚本。 我用过这段代码( hotplugtv )为HDMI修复了Ubuntu 16.04 pulseaudio 8 bug:

 #!/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测试的错误方面,如果在拔下hdmi设备时无所事事,只需用以下代码替换代码: (noop)。

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

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

更改/path/to/到您放置hotplugtv脚本的路径。