我有一台旧笔记本电脑,我安装了 Ubuntu 20.04 LTS 服务器版(没有 GUI,只有 CLI)。它通过 SSH 进行管理,因此不需要显示。我想在合上盖子时关闭显示屏,打开盖子时再次打开显示屏。
我已成功配置 acpid 来管理显示。
在/etc/acpi/事件我创建了一个文件:
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
来运行这个脚本。
答案1
所以我终于知道问题出在哪里了。
正如steeldriver提到的,setterm
需要在终端内运行(在笔记本电脑前面),而在我的脚本中它没有连接到真正的终端,setterm
无法改变任何东西。
根据这发布后,我们需要将输出或输入重定向到控制台/从控制台重定向。
所以我修改了我的脚本:
#!/bin/sh
grep -q closed /proc/acpi/button/lid/LID/state
if [ $? = 0 ]
then
# close action
setterm -term linux --blank force </dev/tty1
else
# open action
setterm -term linux --blank poke </dev/tty1
fi
我测试了这个脚本并且它运行良好;)