几年来(~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 副本,添加尽可能多的printf
s,并尝试记住始终使用我的 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
$