Warum meldet inotifywait keine an der Batteriekapazitätsdatei vorgenommenen Änderungen?

Warum meldet inotifywait keine an der Batteriekapazitätsdatei vorgenommenen Änderungen?

Ich möchte wissen, wann sich der Ladezustand meiner Batterie ändert, und ich möchte nicht einfach einen Daemon ausführen, der dies alle fünf Sekunden überprüft.

Ich habe versucht, auszuführen inotifywait -m /sys/class/power_supply/BAT1/capacity, aber es werden keine Änderungen registriert, obwohl catdie gelegentliche Eingabe von - zu anderen Ergebnissen führt! Tatsächlich meldet es nur etwas, wenn ich catdarauf oder auf Ausführen von verwende acpi. Ich habe auch versucht, auf anderen Dateien im BAT1-Verzeichnis auszuführen inotifywait, und habe festgestellt, dass keine Änderungen an diesen Dateien sichtbar sind, obwohl neue Ergebnisse mit angezeigt werden cat.

Warum werden also keine inotifywaitÄnderungen gemeldet? Und wie kann ich sofortige Updates zu Änderungen des Batteriestands erhalten, wenn ich inotify nicht verwenden kann?

Antwort1

Wie @rudib in den Kommentaren sagte, ist alles /sysvirtuell: Der Inhalt jeder Datei wird beim tatsächlichen Lesen frisch aus der entsprechenden Kernel-Datenstruktur erstellt. Es gibt also keine Änderungen im Sinne von etwas, das in die Datei geschrieben wird, um sie zu ändern.

Das gleiche gilt für /proc.

Batteriestatusbenachrichtigungen sind verfügbar alsgenerische Netlink-Nachrichten, mit family name = acpi_eventund multicast group name acpi_mc_group. Leider kenne ich kein Tool, das Shell-Skripten einen einfachen Zugriff auf Netlink-Nachrichten ermöglicht, aber anscheinendpyroute2Das Tool kann auch Netlink-Nachrichten dekodieren, die ACPI-Ereignisse enthalten, sodass es als Python-Codebeispiel nützlich sein könnte.

verwandte Informationen