LINUX.ORG.RU

Настройка работы демона acpi для обработки событий.

 ,


0

1

Создал файл /etc/acpi/events/buttonpower с правилом обработки события нажатия кнопки гибернации.

Правило начинает работать только после:

/etc/init.d/acpid stop
/etc/init.d/acpid start

При этом:

systemctl restart acpid.service 

Останавливает демон, но не запускает его:

# /etc/init.d/acpid start
# systemctl restart acpid.service 
# /etc/init.d/acpid stop
Service acpid is not running.

После запуска демона начинает срабатывать правило: происходит запуск скрипта. Но только до тех пор, пока открыт терминал. После закрытия терминала правило перестает срабатывать: при том, что, как я понимаю, демон продолжает работать и после закрытия терминала. После повторного открытия терминала правило начинает работать только после перезапуска демона: # /etc/init.d/acpid restart.

дистрибутив: АльтЛинукс



Последнее исправление: Cl_Magenta (всего исправлений: 5)

Ответ на: комментарий от firkax

Да, проверял:

# pgrep -u root -l | grep acpi
2421 acpid

После повторного запуска терминала этот же процесс продолжает существовать.

Команды /etc/init.d/acpid , service acpid , systemctl acpid.service при использовании ключа stop останавливают запущенные процесс, но запускают они, как я понимаю, различные процессы: при запуске service acpid , systemctl acpid.service – правило не выполняется; правило начинает выполняться только при запуске /etc/init.d/acpid.

Правило запускает скрипт -rwxr-xr-x 1 user user /home/user/script.sh

Как я понимаю, проблема в том, что запуск скрипта происходит при открытом сеансе root: вероятно, но не точно.

Cl_Magenta
() автор топика
Последнее исправление: Cl_Magenta (всего исправлений: 2)
Ответ на: комментарий от Cl_Magenta

У тебя столько всего непонятного, но ты почему-то не хочешь ни в чём разбираться, а вместо этого «не запускается скрипт».

но запускают они, как я понимаю, различные процессы:

Так разберись для начала с этим. Что именно они запускают и в чём отличие. И используй хотя бы ps axuww для этого который выдаёт более-менее нормальное количество инфы о процессе, а не pgrep.

Также посмотри что меняется после выключения терминала.

/home

Я правильно понял что ты от рутового демона просто так втупую запускаешь что-то юзерское из /home ? Так делать нельзя. Я не знаю какой формат конфига у acpid, но либо впиши туда su user -c "твоя команда" либо запускай из него рутовый скрипт (не в home), из которого уже можно сделать su в юзера.

Впрочем, вполне возможно что штатно запущеному acpid директория /home вообще недоступна т.к. ему нечего в ней делать.

firkax ★★★★★
()
Ответ на: комментарий от firkax

Так разберись для начала с этим.

Посмотрел:

 # /etc/init.d/acpid start
Starting acpid service:         [ DONE ]
#  ps axuww | grep acpi
2448 /usr/sbin/acpid -n
# systemctl start acpid.service 
#  ps axuww | grep acpi
2448 /usr/sbin/acpid -f -n
#  service acpid start
#  ps axuww | grep acpi
2448 /usr/sbin/acpid -f -n

Пробовал найти в гугле значения ключей -f -n, но – без результата.

Директорию /home я решил использовать, потому что видел в примерах, что такое расположение скрипта допускается. Попробовал перенести скрипт в /etc/acpi/actions – скрипт запускается также только пока открыт терминал. То есть перенос скрипта ничего не изменил. Скрипт также работает только при выполнении # /etc/init.d/acpid start, – другие способы запуска acpi не работают.

При этом, если запустить acpi из под пользователя:

$ sudo /etc/init.d/acpid start

– то правило начинает работать и после закрытия терминала – без разницы где находится скрипт: в /home или /etc.

В чем логика?

Cl_Magenta
() автор топика
Последнее исправление: Cl_Magenta (всего исправлений: 3)
Ответ на: комментарий от Cl_Magenta

Посмотрел

Везде одинаковые pid получились?

Пробовал найти в гугле значения ключей -f -n, но – без результата.

А надо было man acpid набрать.

-f означает запуск без демонизации - его демонизует systemd и второй раз это делать не надо.

Терминал закрываешь с помощью команды exit или ctrl+d или же крестиком на окне?

А вообще насколько я помню - на системах с systemd эти кнопки systemd-logind перехватывает (/etc/systemd/logind.conf) - пока я в нём не поставил HandlePowerKey=ignore - у меня acpid кнопку питания не видел.

firkax ★★★★★
()
Последнее исправление: firkax (всего исправлений: 1)
Ответ на: комментарий от firkax

Везде одинаковые pid получились?

Да.

А надо было man acpid набрать.

Надо было. Но ключа -n там все равно нет. И это тот случай, когда ман не помог:

-f, --foreground
This option keeps acpid in the foreground by not forking at startup.

-f означает запуск без демонизации - его демонизует systemd и второй раз это делать не надо.

Получается, что, для меня, все-таки, надо, если acpi работает нормально – выполняет правила – только без этого ключа.

Терминал закрываешь с помощью команды exit или ctrl+d или же крестиком на окне?

Крестиком. Но при других вариантах результат тот же.

А вообще насколько я помню - на системах с systemd эти кнопки systemd-logind перехватывает (/etc/systemd/logind.conf) - пока я в нём не поставил HandlePowerKey=ignore - у меня acpid кнопку питания не видел.

Попробую поискать в этом направлении.

Cl_Magenta
() автор топика
Последнее исправление: Cl_Magenta (всего исправлений: 3)
Ответ на: комментарий от Cl_Magenta

Да.

Так не бывает.

Надо было. Но ключа -n там все равно нет. И это тот случай, когда ман не помог:

Есть там -n, для поиска по ману есть хоткей '/'.

Получается, что, для меня, все-таки, надо, если acpi работает нормально – выполняет правила – только без этого ключа.

Вряд ли от -f зависит.

firkax ★★★★★
()