我有一台旧笔记本电脑,我安装了Ubuntu20.04LTS服务器版本(没有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来运行这个脚本。
发布于 2021-07-06 21:35:55
所以我终于弄明白问题出在哪里了。
正如steeldriver所提到的,setterm需要在终端中运行(在笔记本电脑前),而在我的脚本中,它没有连接到真正的终端,setterm无法改变任何事情。
根据这 post,我们需要将输出或输入重定向到/从控制台。
所以我修改了我的脚本:
#!/bin/sh
grep -q closed /proc/acpi/button/lid/LID/state
if [ $? = 0 ]
then
# close action
setterm -term linux --blank force 我测试了这个脚本,它的工作就像一个魅力;)
https://askubuntu.com/questions/1349997
复制相似问题