トップ «前の日記(2020年08月01日) 最新 次の日記(2020年09月22日)» 編集

Masa's blog

検索キーワード:

2020年08月09日 Setting ACPI for suspending machine automatically when battery charge loss [長年日記]

_ ノートPCのバッテリー残量が少なくなったら自動的にサスペンドするためのACPI設定方法

/etc/acpi/acpi_handler.sh

バッテリーに関するイベントを検知したらスクリプト(/etc/acpi/lowbattery.sh)を起動する。

*** acpi_handler.sh.ORG 2020-08-08 23:40:56.530432033 +0900
--- acpi_handler.sh     2020-08-09 01:16:38.793951977 +0900
***************
*** 13,18 ****
--- 13,21 ----
           ;;
      esac
      ;;
+   battery)
+     /etc/acpi/lowbattery.sh &
+     ;;
    *)
      logger "ACPI group $1 / action $2 is not defined"
      ;;

/etc/acpi/lowbattery.sh

バッテリー駆動の間は60秒間隔でバッテリー残量をチェックし、残量が10%を切った場合サスペンドする。ACアダプタ駆動になったら終了する。

#! /bin/sh
trap 'rm -fr /tmp/lowbattery.lock' INT TERM

mkdir /tmp/lowbattery.lock || exit 1

wait=60
threshold_percent=10

while [ X = X ]
do
        if [ X`cat /proc/acpi/ac_adapter/ACAD/state | egrep off-line` = "X" ]
        then
                off_line=no
        else
                off_line=yes
        fi

        if [ ${off_line} = yes ]
        then
                last_full_capacity=`cat /proc/acpi/battery/BAT1/info |\
                        egrep 'last full capacity' |\
                        sed -e 's/: */:/;s/ mAh//' |\
                        cut -d: -f2`
                remaining_capacity=`cat /proc/acpi/battery/BAT1/state |\
                        egrep 'remaining capacity' |\
                        sed -e 's/: */:/;s/ mAh//' |\
                        cut -d: -f2`
                battery_percent=`expr ${remaining_capacity} \* 100 / ${last_full_capacity}`

                if [ ${battery_percent} -le ${threshold_percent} ]
                then
                        logger "ACPI /etc/acpi/lowbattery.sh suspend(${battery_percent}%/${threshold_percent}%)"
                        sync;sync;sync
                        echo -n mem > /sys/power/state
                fi
        else
                break
        fi

        sleep ${wait}
done

rm -fr /tmp/lowbattery.lock