web-dev-qa-db-ja.com

バッテリーの状態とポップアップ通知を監視する方法は?

基本的に、私は このコメント を有効な答えにしたいと思います。

ターミナルを使用してバッテリーの状態を確認する方法? :からバッテリーの割合を抽出する方法を知っています

upower -i $(upower -e | grep BAT) | grep --color=never -E percentage|xargs|cut -d' ' -f2|sed s/%//

そして、基本的な通知をポップアップする方法:

notify-send "battery low"

しかし、この擬似コードに従って出力を永続的に監視し、通知を送信する(bash?)スクリプトを設定するにはどうすればよいですか。

if battery_status < 10% then notify-send "battery low"そしてシステムをサスペンド状態にしたSudo pm-suspend

4
landroni

ステップ1:すべてのユーザーがpm-suspendにアクセスできるようにし、パスワードを要求しない

Sudo visudoを実行し、ファイルの最後に次の行を追加します:yourusername ALL=NOPASSWD: /usr/sbin/pm-suspend

ソース: パスワードなしで特定のSudoコマンドを実行する方法

ステップ2:batwatch.desktopファイルを作成します:

これは、監視スクリプトを自動的に起動するファイルです。ファイルは$HOME/.config/autostart/フォルダーに保存する必要があります。

[Desktop Entry]
Type=Application
Exec=/home/serg/bin/batwatch.sh
Hidden=false
NoDisplay=false
Name=Battery Monitor Script

スクリプトが/home/serg/binフォルダーにあることに注意してください。任意のフォルダを使用できますが、標準のために/ usr/binまたは/ home/username/binの方が優先されます。

ソース: 起動時にスクリプトを実行する方法

ステップ3:実際のスクリプトを作成し、Exec = lineと同じ場所に保存します

これが実際のスクリプトです。ここではbashを使用していますが、korn Shellでも動作するはずです。コメントを追加したので、それらを読んで、スクリプトの動作を正確に理解してください

#!/bin/bash

# Check if the battery is connected
if [ -e /sys/class/power_supply/BAT1 ]; then

    # this line is for debugging mostly. Could be removed
    #notify-send --icon=info "STARTED MONITORING BATERY"
    zenity --warning --text "STARTED MONITORING BATERY"

    while true;do   
            # Get the capacity
            CAPACITY=$( cat /sys/class/power_supply/BAT1/uevent | grep -i capacity | cut -d'=' -f2 )

            case $CAPACITY in
            # do stuff when we hit 11 % mark
            [0-9]|11)
                # send warning and suspend only if battery is discharging
                # i.e., no charger connected
                STATUS=$(  cat /sys/class/power_supply/BAT1/uevent | grep -i status | cut -d'=' -f2 )
                 if [ $(echo $STATUS) == "Discharging" ]; then

                    #notify-send --urgency=critical --icon=dialog-warning "LOW BATTERY! SUSPENDING IN 30 sec"
                    zenity --warning --text "LOW BATTERY! SUSPENDING IN 30 sec"
                    sleep 30
                    gnome-screensaver-command -l && Sudo pm-suspend
                    break
                 fi
                ;;
            *)
            sleep 1
                continue
                ;;
            esac
    done
fi

ステップ4:リブートして、スクリプトが機能するかどうかをテストします

このために、[0-9]|11)を任意の値に調整できます。たとえば、65)は65%で一時停止します。電源に接続されていない(充電されていない)場合にのみ停止します。

あなたがこれを気に入ったら教えてください、そしてそれがうまくいくなら、私の投票の左側にある灰色のチェックマークをクリックしてください!

乾杯!

5

バッテリーが完全に充電されたときに通知するために、Vaioで同様のスクリプトを作成しました。私はUPOWERを使用してバッテリーの状態に関する更新を提供し、これらの関連セクションを抽出しました。コードは次のとおりです。

#!/bin/bash

while true;do 

STATE=$( upower -i /org/freedesktop/UPower/devices/battery_BAT0 | grep "state:" | cut -b 26- )

if [ $STATE = "fully-charged" ]
then 

zenity --info --text "Battery Full!"
break

fi

done
2
Rubal