Acpid не может выполнять сценарии

У меня есть старый ноутбук, и я установил Ubuntu 20.04 LTS Server edition (без графического интерфейса, только интерфейс командной строки). Он управляется через 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 для запуска этого скрипта.

2
задан 4 July 2021 в 21:16

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

Я протестировал этот скрипт, и он отлично работает;)

0
ответ дан 28 July 2021 в 11:22

Другие вопросы по тегам:

Похожие вопросы: