在一台配备 Intel 集成显卡和带有两个连接器(HDMI 和 VGA)的主板的 Arch Linux 机器上,我注意到系统唤醒后,xrandr 显示两个输出都已断开,即使显示器似乎以正确的分辨率按预期工作。我猜想,只有在使用从 xrandr 获取屏幕信息的软件(如lightdm
或mpv
)时,我才发现了这个问题。
启动后,xrandr -q
给出预期的输出(在本例中,通过 VGA 连接的单个显示器):
Screen 0: minimum 320 x 200, current 1366 x 768, maximum 16384 x 16384
HDMI-1 disconnected (normal left inverted right x axis y axis)
DP-1 connected primary 1366x768+0+0 (normal left inverted right x axis y axis) 410mm x 230mm
1366x768 59.79*+
1280x1024 75.02 60.02
...
...
...
暂停和唤醒后,两个输出均断开:
Screen 0: minimum 320 x 200, current 1366 x 768, maximum 16384 x 16384
HDMI-1 disconnected (normal left inverted right x axis y axis)
DP-1 disconnected primary 1366x768+0+0 (normal left inverted right x axis y axis) 0mm x 0mm
1366x768 (0x44) 85.500MHz +HSync +VSync
h: width 1366 start 1436 end 1579 total 1792 skew 0 clock 47.71KHz
v: height 768 start 771 end 774 total 798 clock 59.79Hz
如果此时我尝试更改模式,屏幕会变黑。如果我盲目地将输出写入xrandr -q
文件,它会给出:
Screen 0: minimum 320 x 200, current 320 x 200, maximum 16384 x 16384
HDMI-1 disconnected (normal left inverted right x axis y axis)
DP-1 disconnected primary (normal left inverted right x axis y axis)
问题的根源可能是什么?有人能解释一下上面第二个 xrandr 输出发生了什么吗?我已经尝试了不同的屏幕和电缆,但问题仍然存在。我在哪里继续进行故障排除?
经过几周的故障排除,我找到了该问题的解决方案。
每当系统进入深度睡眠状态(S3 状态)时,输出就会断开连接,并且在唤醒时无法重新连接。我找不到这台机器上发生这种情况的原因,但防止这种情况发生的一种方法是强制内核保持输出启用,即通过为帧缓冲子系统指定视频模式。
来自Linux内核文档:
因此,对于 HDMI 输出,我只需将以下内容添加到内核参数中:
video=HDMI-A-1:D