关闭 X11/Xorg 显示(非待机)

关闭 X11/Xorg 显示(非待机)

在 Waayland 下,我曾经busctl --user set-property org.gnome.Mutter.DisplayConfig /org/gnome/Mutter/DisplayConfig org.gnome.Mutter.DisplayConfig PowerSaveMode off关闭/打开显示器,但由于 Wayland 无法使用而不得不返回到 X11 后,此命令的工作方式与 dpms 强制关闭相同。

使用 X11,我可以运行sleep 1; xset dpms force off,但这只会使显示器进入待机状态,并且一旦检测到任何输入(例如鼠标移动)就会唤醒。这是不需要的行为,我更喜欢使用特定快捷方式唤醒显示屏的功能。这样我就可以确保显示器不会自行或意外打开。

那么,在 X11 下如何强制关闭显示器以防止用户输入再次唤醒它呢?

答案1

我认为您可能误解了 DPMS“关闭”的含义。看看表中的维基百科,DPMS 实际上所做的是通过关闭水平同步和垂直同步信号(或 HDMI 等效信号)并禁用显卡中的 DAC,同时显卡的其余部分保持运行来发出省电状态信号。所以你是不是完全关闭所有功能,您将进入可能的“最深”省电模式。

OTOH,使用xrandr --off确实完全关闭输出,并禁用图形卡中用于产生输出的所有内容,就好像显示器根本没有连接到任何东西一样。当然,如果它是您唯一的显示器,则这不起作用,因为这样就没有更多的图形显示器可以在其上绘制任何内容。这实际上是为了启用和禁用附加的第二个或第三个监视器。

因此,您不希望它“完全关闭”,您需要最深的 DPMS 省电状态,这恰好被称为“关闭”。

您的busctl命令告诉 Wayland 使用PowerSaveMode,即 DPMS。当 Wayland 检测到鼠标或键盘输入时,它似乎不会重新启用 DPMS,因此它会保持关闭状态。

以同样的方式xset dpms告诉X服务器使用DPMS。这是完全一样的事情。不同之处在于,X 服务器在检测到输入时重新启用 DPMS。

至于“为什么”,这是开发人员决定它应该如何工作的方式。在 X 中,xset dpms即使没有额外的屏幕保护程序也可以工作,这就是为什么在 X 服务器中合并了重新打开屏幕的方法。对于 Wayland,设计者似乎已经决定你总是需要一个额外的屏幕保护程序(其工作是PowerSaveMode向 Wayland 传达想要的内容),因此它让屏幕保护程序来监视输入并再次打开屏幕。您能够冒充屏幕保护程序busctl或多或少是一个意外。

这不是错误,而是设计不同。

evtest --grab /dev/input/eventX正如我所说,尝试使用(仅evtest用于查看哪个设备是哪个设备。小心,数字不需要在引导之间保持相同,查看 udev 符号链接)或等效内容(ioctl如果您正在编写自己的内容)来获取鼠标和键盘输入屏幕保护程序。如果您想监视特定组合的输入,无论如何您都需要这样做。

相关内容