为什么我们在 xset dpms 之前使用 sleep 命令?

4 command-line display suspend standby xserver

我有以下行来关闭我的笔记本电脑显示屏:

sleep 1 && xset dpms force standby
Run Code Online (Sandbox Code Playgroud)

sleep 1:使线程休眠 1 秒。

xset dpms force standby:从man开始,强制 dpms 标志进入待机状态。

当我省略该sleep 1命令时,该xset命令会将电脑置于待机模式 1 秒钟,然后自动恢复正常运行。但当与sleep 1命令结合使用时,它会将电脑无限期地置于待机模式,直到检测到用户输入。

您能解释一下这两个命令之间的关系以及为什么会这样吗?

Rav*_*ina 6

当您运行命令时,会发生两个事件:“KeyPress”和“KeyRelease”。

因此,当您按下Enter按钮运行此命令时。

xset dpms force standby
Run Code Online (Sandbox Code Playgroud)

首先发生“按键”,当您松开按键时,它将导致命令立即运行并使监视器进入睡眠状态Enter,然后“KeyRelease”发生,这是一个用户活动,因此显示器恢复工作。

如果您非常快地完成工作(Enter在运行命令之前点击并执行它),您的显示器将保持在“睡眠”状态。


要测试这个东西,请安装x11-xserver-utils包。

sudo apt install x11-xserver-utils
Run Code Online (Sandbox Code Playgroud)

然后运行xev

现在点击看看Enter会发生什么;你应该看到或多或少类似的东西:

KeyPress event, serial 48, synthetic NO, window 0x2600001,
...

KeyRelease event, serial 48, synthetic NO, window 0x2600001,
...
Run Code Online (Sandbox Code Playgroud)

因此,我们用来sleep确保这两个事件在命令运行之前发生。