pslaboが試したことの記録

はてなダイヤリーからはてなブログに引っ越してきました

この日記は現在実行中の減量記録を含む個人的なメモとして始めましたが、最近はコンピュータやガジェット、ハック、セキュリティネタのほうがメインになっております。

はてなダイヤリー時代はカテゴリ分けが適当だったのですが、これはそのうち直します。


MacBookのバッテリー残量が3%台になったらシャットダウンするスクリプト

MacBook Pro 2012 Mid のバッテリーが消耗していて、タッチパッドに干渉するくらいに膨張してきたので、バッテリー交換することにしました。バッテリーは純正品がAppleでも修理手配可能ですが、せいぜい2年くらいしか使わないだろうと考えましたので、今回は互換品を選んでみました。

互換品の購入先はいろいろ考えた挙句、秋葉館にすることにしました。Amazonでもいろいろな互換品が販売されていますが、適切な製品を見極めるのは厳しいです。だったら秋葉館のようなショップから買う方が良いという判断です。

さて、実際に購入したバッテリーの説明書をみると、次の注意書きがありました。

  • 最初に使用する際は、バッテリー残量を3%になるまで放電し、その後安全に充電してください。

MacBookのバッテリーは純正品ではこのようなイニシャライズは不要のはずですが、互換品の場合はこういう操作が推奨されるのでしょうか。ちょっと判断がつかないのですが、とりあえず製造元の説明書に沿ってイニシャライズしてみることにします。

さて、実際にバッテリーを交換して起動してみたら残量は53%くらいでした。これを3%まで放電するなら省エネルギーの設定を変えてスリープしないようにしてから適当な負荷をかけて放置すれば良いのですが、そうとは言ってもMacBook Pro 2012 Midのバッテリー駆動時間は満充電時でカタログスペック上は最大7時間なので、約50%のバッテリーは最大で4時間かけないと放電できません。実際の駆動時間は負荷の掛け具合により、もっと小さくなるはずですが、バッテリー残量をこまめに確認するのは面倒です。

そこでバッテリー残量が4%を切ったら自動でシャットダウンするスクリプトを書いてみることにしました。

実装内容と実行方法

こういうスクリプトを shutdown_discharge.sh として作成します。

#!/bin/bash

# show the remaining battery percentage

while : ;
do
  cap=`ioreg -l | grep Capacity`
  full=`echo $cap | sed -e "s/^.*MaxCapacity\" = \([0-9]*\).*/\1/"`
  curr=`echo $cap | sed -e "s/^.*CurrentCapacity\" = \([0-9]*\).*/\1/"`
  pct=`echo "scale=3; $curr / $full * 100" | bc`
  pctint=`echo "100 * $curr / $full" | bc`
  printf "%.1f%%\n" $pct

  if [ $pctint -le 3 ]; then
    shutdown -h now
  fi

  sleep 1
done

このスクリプトの中で利用している shutdown コマンドの実行には管理者権限が必要ですから、次のように sudo 経由で実行する必要があります。これでバッテリーが3%台以下になったらシャットダウンされます。

sudo ./shutdown_discharge.sh 

今回の実装は下記ページのソースコードを一部修正しただけです。バッテリーの状態は ioreg コマンドで取得できますが、これを使うスクリプトの実装はいろんな方が行っていますからゼロから書くのではなく、ありものを参考にしました。

kenpg.bitbucket.io