我有一台旧笔记本电脑,我安装了 Ubuntu 20.04 LTS 服务器版(没有 GUI,只有 CLI)。它通过 SSH 管理,因此不需要显示。我想在关闭盖子时关闭显示器,如果我打开它再打开。
我已成功配置 acpid 来管理显示。
在/etc/acpi/events我创建了一个文件:
event=button/lid.*
action=/etc/acpi/lid.sh
剧本:
#!/bin/sh
grep -q closed /proc/acpi/button/lid/LID/state
if [ $? = 0 ]
then
# close action
setterm --blank force
else
# open action
setterm --blank poke
fi
如果我手动运行此脚本,它可以完美运行,但是似乎 acpi 无法运行该脚本:
$ sudo journalctl -u acpid -f
...
Jul 04 20:03:01 server acpid[1179]: received input layer event "button/lid LID close"
Jul 04 20:03:01 server acpid[1179]: rule from /etc/acpi/events/lid matched
Jul 04 20:03:01 server acpid[1353]: executing action "/etc/acpi/lid.sh"
Jul 04 20:03:01 server acpid[1179]: action exited with status 1
Jul 04 20:03:01 server acpid[1179]: 1 total rule matched
Jul 04 20:03:01 server acpid[1179]: completed input layer event "button/lid LID close"
...
错误:操作以状态 1(不是 0)退出
如果我知道正确,退出代码 1 是权限问题(不允许操作)。我不知道为什么它是“不允许的”,因为我不需要sudo
用来运行这个脚本。
所以最后我弄清楚了问题所在。
正如 Steeldriver 提到的,
setterm
需要在终端内(在笔记本电脑前面)运行,并且在我的脚本中,它没有连接到真正的终端,setterm
也无法改变任何内容。根据这篇文章,我们需要将输出或输入重定向到控制台。
所以我修改了我的脚本:
我测试了这个脚本,它就像一个魅力;)