Запустить скрипт при нажатии кнопки питания

Запустить скрипт при нажатии кнопки питания

Когда я нажимаю кнопку питания, я хочу запустить скрипт. Для этого сценария, скажем, 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файле соответствующим образом, чтобы она указывала на ваш пользовательский скрипт.

Поиск неисправностей:

  1. После перезапуска acpidпроверьте, что acpidон действительно запущен, с помощью pidof acpidкоманды.

  2. Ваш скрипт работает как ожидалось? Используйте полные пути для команд в вашем скрипте. Делатьнетпринять любое значение для PATH.

  3. В приведенном выше примере я использовал команду /usr/bin/loggerкак простой способ что-то где-то записать ( /var/log/syslog). В качестве альтернативы вы можете записать что-то в файл /tmpв целях тестирования.

  4. Сообщалось (от @nathan), что некоторые оконные менеджеры также могут захватывать кнопку питания. Это может помочь убедиться, что /etc/systemd/logind.confесть строка HandlePowerKey=ignore, так что она systemd-logind.serviceбудет игнорировать кнопку питания.

решение2

По сути, ищу эквивалент того, что они сделали здесь, для Linux:https://stackoverflow.com/questions/12434863/выполнение-пакетного-скрипта-на-завершении-работы-окна

Если это то, что вы хотите сделать, то вы можете запускать скрипты, когда система выключается (или переходит в режим гибернации или сна), используяsystemdинфраструктура.

Связанный контент