我的笔记本电脑 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 不会重新打开屏幕。还尝试重新启动 lightdm 和 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
。