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命令结合使用时,它会将电脑无限期地置于待机模式,直到检测到用户输入。
您能解释一下这两个命令之间的关系以及为什么会这样吗?
当您运行命令时,会发生两个事件:“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确保这两个事件在命令运行之前发生。