为什么 X11 在几个待机/恢复周期后停止让我的屏幕进入睡眠状态?

为什么 X11 在几个待机/恢复周期后停止让我的屏幕进入睡眠状态?

几年来(~2012-2020),在多台计算机(不同年份的 AMD/Intel、S3/AMD/Intel 显卡)上,我观察到了 X11 中一个奇怪的、与 DDX 无关的错误。

有时,经过几次睡眠 ( echo mem > /sys/power/state) 和唤醒周期后,X11 会“忘记”显示器的 DPMS 设置,并无限期地保持屏幕打开。

在这种状态下,xset dpms force suspend(或 - standby) 可以正常工作;我想知道该错误是否存在于活动检测或超时管理中。

有时问题需要数周时间才会浮出水面;有时它发生得非常快。我前几天碰巧需要重新启动,问题就出现了。在此之前,我想我在这台机器(我已经使用了大约一年)上只遇到过一次这个问题。

嗯,也许这实际上是一个竞争条件。耶耶耶。

作为严格测试,我将所有可以设置的值从默认的 600(10 分钟)更改为 5 秒。现在,xset q正在向我展示:

Screen Saver:
...
  timeout:  5    cycle:  5
...
DPMS (Energy Star):
  Standby: 5    Suspend: 5    Off: 5
  DPMS is Enabled
  Monitor is On

我的屏幕既没有被 X 屏幕保护程序清空,也没有进入 DPMS 待机/挂起状态。

我可以从哪里开始调试这个?

我猜我需要构建我自己的 X 副本,添加尽可能多的printfs,并尝试记住始终使用我的 X 而不是系统 X...但在我离开之前那里,我想知道是否有人有任何有趣、有见地的花絮供我先尝试。

谢谢 :)

注意。我的系统出现了这个问题现在,我会看看是否可以推迟几天重新启动。毕竟,这有点像“有 Z 的月份”。

答案1

这是铬错误1339361。如果你玩任何在 Chrome(或任何基于 Electron 的软件,如 Slack)中,屏幕保护程序(包括 DPMS)将保持禁用状态,直到退出该进程。

禁用MIT-SCREEN-SAVER扩展应该会有所帮助。

$ sudo tee /etc/X11/xorg.conf.d/01-no-mit-screen-saver.conf <<EOM >/dev/null
Section "Extensions"
    Option    "MIT-SCREEN-SAVER" "Disable"
EndSection
EOM
$ reboot

检查以确保MIT-SCREEN-SAVER已禁用:

$ xdpyinfo -queryExtensions | grep MIT-SCREEN-SAVER

Linux 中有多种暂停屏幕保护程序的方法。禁用MIT-SCREEN-SAVER应该不会影响屏幕保护程序、DPMS 或 YouTube 中的唤醒锁等,它们都应该继续正常工作。

在调试这个问题时,我发现了另一个错误(在我看来),即使在玩游戏时,Chromium 似乎也会禁用屏幕保护程序声音的。这就是每次 Outlook 中出现新邮件“叮”声时我的屏幕都会被唤醒的原因。但那是其他故事...

如果您好奇的话,DPMS 的魔力就发生在xorg-server其内部DPMSSet,它调用 DPMS 和SetScreenSaverTimer,这会启动计时器(或不启动!)。


作为故障安全选项,我可以建议这种核解决方法,它将强制 DPMS 打开,而不管任何唤醒锁如何。显然它需要很大的超时时间,否则你将无法不间断地观看电影。

$ sudo apt install xprintidle
$ cat <<EOM >crontab
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin
DISPLAY=:0
 
*/15 * * * *   t=`xprintidle` && [ $t -ge 7200000 -a $t -lt 9000000 ] && xset dpms force off
EOM
$ crontab crontab
$

相关内容