进入待机状态后第二台显示器无法唤醒(没有烦人的解决方法)

进入待机状态后第二台显示器无法唤醒(没有烦人的解决方法)

背景

我已经以这种或那种方式遇到这个问题很长一段时间(几年)了,并且在多种配置中。我已经多次更新了驱动程序和内核,此时我真的不知道罪魁祸首在哪里。

这似乎是某种竞争条件,如果一个显示器先于另一个显示器“准备好”,则另一个显示器只会得到“无输入”,尽管 xrandr(和 i3)认为它已连接并且应该工作。

旧设置

  • 4K 显示器一台
  • 一台 1080p 显示器

行为:两台显示器都进入睡眠状态(从不活动状态),并且在移动鼠标时,只有其中一台(1080p 显示器)正确唤醒。另一台设备几秒钟后醒来,但随后显示“无输入”。

解决方法:

  • 运行xrandr.sh(旧版本,新版本见下文)
    • 我不能肯定地说我是否必须做其他事情才能让它发挥作用(整个过程或多或少变成了肌肉记忆......)

新设置

  • 一台 4K 显示器(与之前的设置相同)
  • 一台 4K 显示器(新)

行为:类似的行为,但现在该行为适用于新的监视器。旧的表现很好(就像旧的 1080p 显示器一样)。

解决方法 1(记住先唤醒显示器):

  • 在通过移动鼠标/键盘唤醒屏幕之前)使用显示器上的菜单按钮唤醒“慢速”屏幕
  • 当显示器完成从待机状态恢复并显示菜单项时,移动鼠标/键盘以唤醒显示器。
  • 两台显示器都工作正常!

解决方法 2(忘记先唤醒显示器):

  • 移动鼠标/键盘) 两个显示器都被唤醒。一个工作正常,另一个需要更多时间从挂起唤醒,然后只显示“无输入”。
  • 运行xrandr --output HDMI-0 --off,这将使显示器返回待机状态。
  • 应用解决方法 1。
  • 两台显示器都工作正常!

细节

Nvidia 驱动程序版本(来自 Arch 存储库):455.45.01-6

$ lspci | grep NV
01:00.0 VGA compatible controller: NVIDIA Corporation GP104 [GeForce GTX 1070] (rev a1)
01:00.1 Audio device: NVIDIA Corporation GP104 High Definition Audio Controller (rev a1)
$ xrandr
Screen 0: minimum 8 x 8, current 7680 x 2160, maximum 32767 x 32767
DVI-D-0 disconnected (normal left inverted right x axis y axis)
HDMI-0 connected primary 3840x2160+0+0 (normal left inverted right x axis y axis) 621mm x 341mm
   3840x2160     60.00*+  59.94    50.00    30.00    29.97    25.00    23.98    23.98
   2560x1600     59.97
   2560x1440     59.95
   1920x1080     60.00    59.94    50.00    60.00    50.04
   1680x1050     59.95
   1440x900      59.89
   1440x576      50.00
   1440x480      59.94
   1280x1024     75.02    60.02
   1280x960      60.00
   1280x800      59.81
   1280x720      60.00    59.94    50.00
   1024x768      75.03    70.07    60.00
   800x600       75.00    72.19    60.32    56.25
   720x576       50.00
   720x480       59.94
   640x480       75.00    72.81    59.94
   640x350       70.07
DP-0 disconnected (normal left inverted right x axis y axis)
DP-1 connected 3840x2160+3840+0 (normal left inverted right x axis y axis) 1280mm x 720mm
   4096x2160     29.97 +  25.00    24.00    23.98
   3840x2160     29.97*   25.00    23.98    23.98
   1920x1080     60.00    59.94    50.00    29.97    25.00    23.98    60.00    50.04
   1280x1024     60.02
   1280x720      59.94    50.00
   1024x768      60.00
   800x600       60.32
   720x576       50.00
   720x480       59.94
   640x480       59.95    59.93    59.94
DP-2 disconnected (normal left inverted right x axis y axis)
DP-3 disconnected (normal left inverted right x axis y axis)
DP-4 disconnected (normal left inverted right x axis y axis)
DP-5 disconnected (normal left inverted right x axis y axis)

dmesg没有表现出任何异常。

xrandr.sh:

# This used to be uncommented, but doesn't cut it anymore with the new setup
#xrandr --output HDMI-0 --off

sleep 0.5

xrandr --output HDMI-0 --primary --mode 3840x2160 --panning 0x0
xrandr --output DP-1 --mode 3840x2160 --right-of HDMI-0

尝试过的解决方案

多年来,我多次用谷歌搜索类似的问题,但从未真正找到任何有希望的东西。我曾经认为旧的 4K 显示器有一些奇怪的地方(比如坏的 EDID),但现在我在新显示器上遇到了同样的问题,我已经放弃了这种怀疑。

我发现了很多关于屏幕无法恢复的线程暂停(通常用 修复modeset),但在我的情况下,没有真正的暂停发生,它只是屏幕关闭/消隐(并且只发生在其中一台显示器上!)。此外,我还没有发现任何与我的问题/解决方法类似的“竞争条件”性质的问题。

答案1

保留您的“解决方法”脚本,使用 xrandr 命令按照您想要的方式获取两个监视器。我建议编写一个小的 udev 规则来运行由“省电唤醒”内核事件触发的脚本。您可以通过运行以下命令来监控您获得的触发器类型:

udevadm monitor -u

您还可以通过运行以下命令获取有关监视器的 udev 规则密钥格式中所有可能属性的信息: udevadm info -a -n /dev/dri/card0

其中card0 是您的板载视频卡。阅读一些 udev 规则: https://linux.die.net/man/7/udev

您通常将文件放置在 /etc/udev/rules.d/ 中

仅包含以下内容的东西:

KERNEL=="card0", SUBSYSTEM=="drm", RUN+="/opt/xrandr.sh"

可能会起作用,只要纠正脚本的路径即可。希望这可以帮助。

相关内容