Acpid 无法执行脚本

Acpid 无法执行脚本

我有一台旧笔记本电脑,我安装了 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

我测试了这个脚本并且它运行良好;)

相关内容