バッテリーの充電量がいつ変化するかを知りたいのですが、5 秒ごとにそれをチェックするデーモンを単に実行したくはありません。
を実行してみましたが、時々 - すると異なる結果が得られるinotifywait -m /sys/class/power_supply/BAT1/capacity
にもかかわらず、変更が登録されません。実際、を使用した場合、または を実行した場合のみ、何かが報告されます。また、BAT1 ディレクトリ内の他のファイルに対して を実行してみましたが、 で新しい結果が得られたにもかかわらず、 - に変更が加えられたことは確認されませんでした。cat
cat
acpi
inotifywait
cat
では、なぜinotifywait
変更が報告されないのでしょうか? また、inotify を使用できない場合、バッテリー レベルの変化に関する即時更新を取得するにはどうすればよいでしょうか?
答え1
@rudib がコメントで述べたように、内部のすべてが/sys
仮想的です。各ファイルの内容は、実際に読み取られるたびに、対応するカーネル データ構造から新しく作成されます。したがって、ファイルに書き込んで変更するという意味では、変更はありません。
についても同様です/proc
。
バッテリーステータス通知は次のように表示されます一般的なNetlinkメッセージ、ファミリ名 = acpi_event
、マルチキャストグループ名ですacpi_mc_group
。残念ながら、シェルスクリプトでNetlinkメッセージに簡単にアクセスできるツールは知りませんが、どうやらpyroute2
このツールは、ACPI イベントを含む netlink メッセージをデコードすることもできるため、Python コードの例として役立つ可能性があります。