
Когда я нажимаю кнопку питания, я хочу запустить скрипт. Для этого сценария, скажем, file.sh. Поэтому, когда я нажимаю кнопку питания, я хочу запустить file.sh и только file.sh.
Большинство найденных мной решений включали редактирование /etc/acpi/powerbtn.sh
, но этот файл не существует в моей системе. (Я использую Ubuntu 19.04) Я пытался создать его и заполнить его стандартным содержимым, но это не сработало. Я также пытался прослушивать нажатия клавиш с помощью acpi_listen
, но ничего не происходило, когда я нажимал клавиши, так что я не знаю, сделал ли я это неправильно или что-то еще. Я пробовал использовать xev
, который улавливал события клавиш, но ничего не регистрировалось, когда я нажимал кнопку питания.
Кто-нибудь знает, как этого добиться или что я делаю не так?
PS Должен отметить, что я бы предпочел решение, которое можно реализовать в командной строке, в идеале без стороннего ПО. Спасибо.
Похожий вопрос, но без решения:
https://askubuntu.com/questions/473693/запустить-скрипт-при-нажатии-кнопки-питания
По сути, ищу эквивалент того, что они сделали здесь, для Linux:
https://stackoverflow.com/questions/12434863/выполнение-пакетного-скрипта-на-завершении-работы-окна
EDIT: вот что я получаю из syslog:
Feb 9 13:01:01 joe-Aspire-E5-576G gnome-session-binary[1624]: Entering running state
А это мой файл в событиях:
event=button/power action=/home/ragnvaldr/Desktop/test/sc.sh
`
решение1
Ответ на ваш вопрос находится вПРИМЕРраздел man acpid
. Я адаптируюсь к вашим потребностям.
- Создайте
root
файл/etc/acpi/events/power
с таким именем и содержимым:
event=button/power
action=/usr/bin/logger "ACPI_POWER_BTTN_TEST: %e"
Затем бегите
service acpid restart
.Завершите
syslog
файл вот так/usr/bin/tail -f /var/log/syslog
Нажмите кнопку питания, чтобы увидеть тестовое сообщение в формате
syslog
.Измените
action=
строку вpower
файле соответствующим образом, чтобы она указывала на ваш пользовательский скрипт.
Поиск неисправностей:
После перезапуска
acpid
проверьте, чтоacpid
он действительно запущен, с помощьюpidof acpid
команды.Ваш скрипт работает как ожидалось? Используйте полные пути для команд в вашем скрипте. Делатьнетпринять любое значение для
PATH
.В приведенном выше примере я использовал команду
/usr/bin/logger
как простой способ что-то где-то записать (/var/log/syslog
). В качестве альтернативы вы можете записать что-то в файл/tmp
в целях тестирования.Сообщалось (от @nathan), что некоторые оконные менеджеры также могут захватывать кнопку питания. Это может помочь убедиться, что
/etc/systemd/logind.conf
есть строкаHandlePowerKey=ignore
, так что онаsystemd-logind.service
будет игнорировать кнопку питания.
решение2
По сути, ищу эквивалент того, что они сделали здесь, для Linux:https://stackoverflow.com/questions/12434863/выполнение-пакетного-скрипта-на-завершении-работы-окна
Если это то, что вы хотите сделать, то вы можете запускать скрипты, когда система выключается (или переходит в режим гибернации или сна), используяsystemd
инфраструктура.