web-dev-qa-db-ja.com

低バッテリー通知

Lenovo z5170にUbuntu 16.04 LTSがあります。ビープ音でバッテリー残量が少なくなっていることを通知するプログラム(どのプログラミング言語であっても)が必要です。バッテリーが切れる瞬間(10%のエネルギー)までプログラムはスリープ状態になっているはずですが、考えられるのはプロセッサ全体を使い果たして他のすべてを実行させないwhileループだけです。

1-そのようなプログラムをどのように実装すればよいですか?

2-特定のイベントでユーザーに通知する方法はどれですか?

1
Shadow_m2

推奨される重複メソッドに加えて、次のことができます。

upower -enumerateを介してバッテリーインターフェイスパスを見つけます。

bash-4.3$ upower --enumerate
/org/freedesktop/UPower/devices/line_power_ACAD
/org/freedesktop/UPower/devices/battery_BAT1
/org/freedesktop/UPower/devices/DisplayDevice

次にupower --show-infoを使用して、その出力をトリップします。私の例では次のようになります:

bash-4.3$ upower --show-info /org/freedesktop/UPower/devices/DisplayDevice | awk '/percentage/{gsub(/\%/,""); print $2}'
100

あとは、簡単なスクリプトを使用して、その出力値が特定のしきい値以下かどうかを比較するだけです

#!/bin/bash

get_percentage()
{
     # Note, | \ must have only new line after it, no space
     upower --show-info /org/freedesktop/UPower/devices/battery_BAT1 |\
     awk '/percentage/{gsub(/\%/,""); print $2}'
}

main()
{
    while true
    do
        pcent=$(get_percentage)
        [ $pcent -le 10  ] && notify-send "Battery Low" "Please plug in charger"
        sleep 60 # check every minute
    done
}
main

ビープ音による通知については、aplayコマンドとnotify-sendの代わりに任意のオーディオファイルを使用できます。 GUIがない場合は、wall <<< "Battery low"のようにwallコマンドを使用することもできます。このコマンドはメッセージを表示するために印刷します。 [〜#〜] note [〜#〜]gnome-terminalの最近の更新のため、これはgnome-terminalでは機能しませんが、TTYおよびその他のターミナルエミュレーターでは引き続き機能しますする

0