web-dev-qa-db-ja.com

ACアダプター挿入時のシステムイベントまたはバッテリーの取り外し?

Ubuntu 15.04(または一般的にLinuxのみ)には、ラップトップのAC電源が切断され、ユニットがバッテリー電源に切り替わったときに発生する測定可能なイベントがありますか?

そのイベントを待って、たとえば画面の明るさなどを調整する小さなプログラムを書きたいと思います。これにはいくつかの解決策があることは知っていますが、同時に自分自身を教えようとしています。私はLinuxの初心者で、Windowsシステムの.NETでコーディングの大部分を行っています。

バッテリステータス情報を/sys/class/power_supply/で確認しましたが、何らかのタイマーでファイルの変更をスキャンするだけでなく、アダプタが取り外されているかどうかを判断するためのより良い方法があるはずだと思います。

私はGoogleとこれらのフォーラムを検索してみましたが、検索を適切に表現する方法はまだわかりません。

7
armadadrive

udevを探しています。これは、デバイスの接続(またはデバイスの取り外し)など、さまざまなシステム状態の変化を検出します。 udevをスクリプト化して、デバイスが接続または削除されたときに何らかのアクションを実行できます。

Udevは率直に言って、かなり複雑であり、本当に基本的なテストを実行して、探しているものを確実に検出できるようにする必要があります。

基本的な手順は次のとおりです:

システムを監視します。

Sudo udevadm monitor

これは、udevが「見る」ものを示します。

これが実行されている状態で、電源を接続し、udevadmの指示を確認します。もう一度取り外します。udevadmの指示を参照してください。それはおそらくまだ意味をなさないでしょうが、それは問題ありません。あなたは今udevを監視する方法を知っています、そしてそれは便利です。

そのプロセスを停止し、これを実行します。

Sudo udevadm info --path=/sys/class/power_supply/ac

または

Sudo udevadm info --path=/sys/class/power_supply/battery

aCおよびバッテリーシステムに関する情報を提供します。このような:

 P:/devices/platform/sunxi-i2c.0/i2c-0/0-0034/axp20-supplyer.28/power_supply/battery
E:DEVPATH =/devices/platform/sunxi -i2c.0/i2c-0/0-0034/axp20-supplyer.28/power_supply/battery 
 E:POWER_SUPPLY_CAPACITY = 100 
 E:POWER_SUPPLY_CURRENT_NOW = 0 
 E:POWER_SUPPLY_ENERGSIGN_FULL = 3200 
 E:POWER_SUPPLY_HEALTH =良好
 E:POWER_SUPPLY_MODEL_NAME = battery 
 E:POWER_SUPPLY_NAME = battery 
 E:POWER_SUPPLY_ONLINE = 0 
 E:POWER_SUPPLY = 0 
 E:POWER_SUPPLY_STATUS = Full 
 E:POWER_SUPPLY_TECHNOLOGY = Li-ion 
 E:POWER_SUPPLY_TEMP = 300 
 E:POWER_SUPPLY_VOLTAGE_MAX_DESIGN = 4200000 
 E :POWER_SUPPLY_VOLTAGE_MIN_DESIGN = 3300 
 E:POWER_SUPPLY_VOLTAGE_NOW = 0 
 E:SUBSYSTEM = power_supply 

E:行は、udevルールの記述に使用できる環境属性です。

基本的なudevルールを記述します(通常は、偶数が発生したときにドライブのどこかにログエントリを作成するルールを記述します。これにより、何かをトリガーしていることがわかります。その後、戻ってスクリプトを便利にします。)

例:SUBSYSTEM=="power_supply", ENV{POWER_SUPPLY_STATUS}=="Charging", RUN+="/path/to/some/script.sh"

または、POWER_SUPPLY_PRESENT=1を使用する可能性があります...コンピュータに表示される値に基づいて実験する必要があります。

このudevスクリプトを/etc/udev/rules.dに配置し(80.power.rulesのような名前が一般的です)、コンピューターを再起動します。技術的にはudevを再起動するだけで十分ですが、信頼性は低いと思います。

ACが接続されているときにスクリプトがトリガーされるかどうかを確認します。

Udevルールとそれがトリガーするスクリプトを調整します。

Udevにはさらに多くの機能があるので、詳しく見てみましょう

19