web-dev-qa-db-ja.com

ラップトップのバッテリーが充電/放電を開始したときにbashスクリプトを実行する方法は?

バッテリーレベルを表示するconkyセットアップがあります。問題は、ラップトップを充電器から抜き差しするたびにconky-startupスクリプトを実行して適切に表示する必要があることです。私はこれが苦痛だと思います(クリックするとスクリプトを実行するランチャーがセットアップされていますが)、ラップトップを充電器から抜き差しするたびにスクリプトを実行するために必要なことを知りたいです。

2
It's Willem

これは、スタートアップアプリケーションとして追加でき、継続的に実行される非常に単純なスクリプトです。コメントで指定されているように、電源方式の変更を検出したときに実行するコマンドを挿入します。

#!/bin/bash
# Author: Serg Kolo
# Date: June 17,2015
# Description:  this script detects changes in
# the powering method, and does something user
# specifies in appropriate field

on_ac_power
PREVIOUS=$(echo $?)

while [ 1 ]; do
    # check if we're on ac power or not
    on_ac_power
    CURRENT=$(echo $?)
    # check if previous values are current
    # are different. If they are
    # raise the flag.
    if [ $CURRENT -ne $PREVIOUS ]; then
        echo things changed
        # Insert commands you wanna run here 
        # in the space below this comment
        echo running custom stuff

        # when done: make current value previous
        # for future comparison
        PREVIOUS=$(echo $CURRENT )
    else
        # if previous values and current are same
        # it means we didn't switch from battery to
        # ac or vice versa; do nothing
        continue
    fi

    sleep 1
done
1

電源ケーブルを抜き差しすると、/ etc/pm/power.d内のすべてのスクリプトが、プラグイン時に「true」引数で、プラグ抜き時に「false」引数で実行されます。

そのファイルの最後にスクリプトを追加すると、実行されるはずです。

実行するスクリプトがたくさんある場合は、次のような行を追加してください。

if [ -f /path/to/the/script ]; then
    . /path/to/the/script
fi

おそらく、.../power.d /ディレクトリ内のスクリプトが次の方法で実行可能であることを確認する必要があります。

cd /etc/pm/power.d/
chmod +x ./name_of_file 

詳細については、この回答を確認してください: 電源がプラグインまたは-outされているときにスクリプトを実行するにはどうすればよいですか?

0
Eric Power

一般的なアプローチは次のとおりです。

#!/bin/bash

status="$(grep -Po '^charging\s+state:\s+\K.*$' /proc/acpi/battery/BAT0/state)"

if [[ $status = 'charging' ]]; then
    ##Charging, Do something

Elif [[ $status = 'discharging' ]]; then
    ##Discharging, Do something

Elif [[ $status = 'charged' ]]; then
    ##Charged, Do something

else
    ##Battery not found, Do something
fi
  • /proc/acpi/battery/BAT0/stateにはバッテリーの状態が含まれます。バッテリー名が異なる場合は、BAT0を交換してください

  • ファイルのcharging state:で始まる行には、バッテリーが充電中、放電中、充電中のいずれかのステータスが含まれます

  • その行のステータス文字列を変数statusに保存します

  • statusの値に応じて、必要な処理を実行できます。

0
heemayl