我有以下一行来关闭我的笔记本电脑显示屏:
sleep 1 && xset dpms force standby
sleep 1
:让线程休眠 1 秒。
xset dpms force standby
: 从男人,强制 dpms 标志处于待机状态。
当我省略该sleep 1
命令时,该xset
命令会使 PC 处于待机模式 1 秒钟,然后自动恢复正常运行。但是当与sleep 1
命令结合使用时,它会无限期地将 PC 置于待机模式,直到检测到用户输入。
你能解释一下这两个命令之间的关系以及为什么它以这种方式工作吗?
答案1
当您运行命令时,会发生两个事件,“KeyPress”和“KeyRelease”。
因此当您按下Enter按钮运行此命令时。
xset dpms force standby
首先发生“KeyPress”,它将导致命令立即运行并使监视器进入睡眠状态,当您释放键时Enter,将发生“KeyRelease”,并且这是一次用户活动,因此监视器恢复工作。
如果您非常快速地完成工作(Enter在运行命令之前点击并实现它)您的显示器将保持“睡眠”状态。
为了测试这个东西,安装x11-xserver-utils
包。
sudo apt install x11-xserver-utils
然后运行xev
。
现在点击Enter看看发生了什么;你应该看到或多或少类似的内容:
KeyPress event, serial 48, synthetic NO, window 0x2600001,
...
KeyRelease event, serial 48, synthetic NO, window 0x2600001,
...
因此我们用来sleep
确保这两个事件在命令运行之前发生。
答案2
我认为这可能与系统认为的“用户活动”有关。
如果系统检测到键盘活动,它就会从睡眠状态恢复。事实上,你按下进入发送强制待机命令算作某些“当前”活动,因此它会立即取消睡眠状态。
sleep 1 确保键盘在发送睡眠命令之前的 1 秒内没有记录活动,因此待机状态继续。