Execute o script quando o botão liga / desliga for pressionado

Execute o script quando o botão liga / desliga for pressionado

Quando pressiono o botão liga / desliga, quero executar um script. Para fins deste cenário, diga file.sh. Então, quando pressiono o botão liga / desliga, quero executar o arquivo.sh e apenas o arquivo.sh.

A maioria das soluções que encontrei envolviam edição /etc/acpi/powerbtn.sh, mas esse arquivo não existe no meu sistema. (Estou executando o Ubuntu 19.04) Tentei criá-lo e preenchê-lo com o conteúdo padrão, mas não funcionou. Também tentei ouvir o pressionamento de teclas com acpi_listen, mas nada aconteceu quando pressionei as teclas, então não sei se fiz errado ou o quê. Tentei usar xev, que captou eventos importantes, mas nada foi registrado quando apertei o botão liga / desliga.

Alguém sabe como fazer isso ou o que estou fazendo de errado?

PS: Devo mencionar que prefiro uma solução que possa ser feita na linha de comando, de preferência sem qualquer software de terceiros. Obrigado.


Pergunta semelhante, mas sem soluções:

https://askubuntu.com/questions/473693/run-a-script-when-power-button-is-pushed

Basicamente procurando o equivalente Linux do que eles fizeram aqui:

https://stackoverflow.com/questions/12434863/executing-a-batch-script-on-windows-shutdown


EDIT: isto é o que recebo do syslog:

Feb 9 13:01:01 joe-Aspire-E5-576G gnome-session-binary[1624]: Entering running state

E este é o meu arquivo em eventos:

event=button/power action=/home/ragnvaldr/Desktop/test/sc.sh `

Responder1

Sua pergunta está respondida noEXEMPLOSeção de man acpid. Vou me adaptar às suas necessidades.

  • Como rootcriar um arquivo nomeado /etc/acpi/events/powercom conteúdo como este:
event=button/power
action=/usr/bin/logger "ACPI_POWER_BTTN_TEST: %e"
  • Então corra service acpid restart.

  • Tail o syslogarquivo assim/usr/bin/tail -f /var/log/syslog

  • Pressione o botão liga/desliga para ver sua mensagem de teste no formato syslog.

  • Altere a action=linha no powerarquivo adequadamente para apontar para seu script personalizado.

Solução de problemas:

  1. Após reiniciar acpid, verifique se acpidestá realmente em execução usando o pidof acpidcomando.

  2. Seu script funciona conforme o esperado? Use nomes de caminhos completos para comandos em seu script. Fazernãoassuma qualquer valor para PATH.

  3. No exemplo acima usei o /usr/bin/loggercomando como uma maneira fácil de registrar algo em algum lugar ( /var/log/syslog). Alternativamente, você pode escrever algo em um arquivo /tmppara fins de teste.

  4. Foi relatado (por @nathan) que alguns gerenciadores de janelas também podem capturar o botão liga/desliga. Pode ajudar garantir que /etc/systemd/logind.confhaja linha HandlePowerKey=ignore, de modo que systemd-logind.serviceignorará o botão liga / desliga.

Responder2

Basicamente procurando o equivalente Linux do que eles fizeram aqui:https://stackoverflow.com/questions/12434863/executing-a-batch-script-on-windows-shutdown

Se é isso que você deseja fazer, você pode executar scripts quando o sistema for desligado (ou hibernado ou colocado em suspensão) usando o comandosystemda infraestrutura.

informação relacionada