Quiero saber cuándo cambia la carga de mi batería y no quiero simplemente ejecutar un demonio que lo verifique cada cinco segundos.
Intenté ejecutar inotifywait -m /sys/class/power_supply/BAT1/capacity
, pero no registra ninguna modificación, aunque cat
hacerlo de vez en cuando da resultados diferentes. De hecho, solo informa algo cuando cat
lo usé o ejecuté acpi
. También intenté ejecutar inotifywait
otros archivos en el directorio BAT1 y descubrí que no se han visto modificaciones en ninguno, a pesar de dar nuevos resultados con cat
.
Entonces ¿por qué no inotifywait
reporta modificaciones? ¿Y cómo puedo obtener actualizaciones instantáneas sobre los cambios en el nivel de la batería si no puedo usar inotify?
Respuesta1
Como dijo @rudib en los comentarios, todo /sys
es virtual: el contenido de cada archivo se crea nuevo a partir de la estructura de datos del kernel correspondiente cada vez que se lee. Por lo tanto, no hay modificaciones en el sentido de que algo se escriba en el archivo para cambiarlo.
Lo mismo va para /proc
.
Las notificaciones del estado de la batería están disponibles comomensajes genéricos de Netlink, con apellido = acpi_event
y nombre del grupo de multidifusión acpi_mc_group
. Desafortunadamente, no conozco una herramienta que brinde fácil acceso a los mensajes de Netlink para scripts de shell, pero aparentementepyroute2
La herramienta también puede decodificar mensajes de enlace de red que contienen eventos ACPI, por lo que podría resultar útil como ejemplo de código Python.