Quero saber quando a carga da minha bateria muda e não quero simplesmente executar um daemon que a verifique a cada cinco segundos.
Eu tentei executar inotifywait -m /sys/class/power_supply/BAT1/capacity
, mas ele não registra nenhuma modificação, embora cat
- executá-lo de vez em quando dê resultados diferentes! Na verdade, ele só reporta algo quando eu uso cat
nele, ou executo o acpi
. Também tentei executar inotifywait
outros arquivos no diretório BAT1 e descobri que nenhum foi visto com modificações - apesar de fornecer novos resultados com cat
.
Então, por que não inotifywait
relata modificações? E como posso obter atualizações instantâneas sobre alterações no nível da bateria se não consigo usar o inotify?
Responder1
Como @rudib disse nos comentários, tudo /sys
é virtual: o conteúdo de cada arquivo é criado a partir da estrutura de dados do kernel correspondente sempre que está sendo lido. Portanto, não há modificações no sentido de algo ser escrito no arquivo para alterá-lo.
O mesmo vale para /proc
.
As notificações de status da bateria estão disponíveis comomensagens genéricas do Netlink, com family name = acpi_event
e multicast group name acpi_mc_group
. Infelizmente não conheço uma ferramenta que dê acesso fácil às mensagens do Netlink para scripts de shell, mas aparentemente opyroute2
A ferramenta também pode decodificar mensagens netlink que contêm eventos ACPI, portanto, pode ser útil como exemplo de código Python.