GNU screen の backtickにN900のバッテリー残量表示するようにしてみた

なんか最近気がつくとN900のバッテリーがジリ貧になってることが多々ある。(そろそろバッテリーがへたってきてるのかなぁ?)
普段PCからsshでログインしてあおり倒してるので、ポケットの中にあるN900のバッテリー切れに気づきにくい。最近、GNU Screenに backtickという機能があるのを知ったので、それを使ってハードステータスにバッテリーモニタを仕込んでみた。

GNU Screen って何かっていうと、なんて説明すればいいんだろう? Wikipediaによると、「フリーな端末多重接続ソフトウェアである。」うん意味不明、説明割愛w。
まず、backtick用のスクリプト以下を/home/user/bin/batmonitorN900に保存した。

#!/bin/sh
# $N=表示インジケータ数
N=8
chrS="                    "
#     12345678901234567890 N=最大20文字まで対応
# $PERCENT=充電残容量
PERCENT=`lshal -u /org/freedesktop/Hal/devices/bme | awk '$1=="battery.charge_level.percentage" {print$3}'`
# インジケータの長さ設定
BAR=`expr "${PERCENT}" \* "$N" / 101 + 1`
# $PERCENTが文字列 か100より大きいと100にして処理継続
if [ $? -ge 2 ] || [ $PERCENT -gt 100 ];then
  PERCENT=100
  BAR=$N
fi
charBAR=`expr substr "${chrS}" 1 "${BAR}"`
SPC=`expr "$N" - "${BAR}"`
charSPC=`expr substr "${chrS}" 1 "${SPC}"`

if [ x`lshal -u /org/freedesktop/Hal/devices/bme | awk '$1 =="battery.rechargeable.is_charging" {print $3}'` = "xtrue" ]
 then
    STATE='充電中'
fi
# COLOR=インジケーター色
if [ $PERCENT -lt 20 ]; then COLOR="=r kr"
elif [ $PERCENT -lt 30 ]; then COLOR="=r kY"
elif [ $PERCENT -lt 40 ]; then COLOR="=r ky"
elif [ $PERCENT -lt 50 ]; then COLOR="=r kb"
else
 COLOR="=r kg"
fi
# 出力
echo -e "$STATE $PERCENT%[\005{$COLOR}${charBAR}\005{-}${charSPC}]"

作ったスクリプトに実行権限をつける。chmod a+x /home/user/bin/batmonitorN900
で、.screenrc とかに

backtick 1 0 30 /home/user/bin/batmonitorN900
hardstatus alwayslastline "%H [%02c] %-w%{=b bw}%n %t%{-}%+w %=%1`"

を追記。1行目で、30秒毎に、batmonitorN900 を実行してくれて実行結果がbacktickのid=1に入るようになる。
2行目で、ハードステータスの表示内容設定。%1` が、backtickのid=1の参照。
hardstatusの表記やエスケープの仕方が奇奇怪怪で分かり難く四苦八苦しました。
これで、心もち安心できるようになった。ちなみにその左に表示させてるのは、PocketWifiの3Gアンテナ*1。apt-getで落ちてくるGNU screenだと、ハードステータスに日本語表示できなかったので、こちらからパッチ頂いて、当てています。

*1:Webインターフェース/en/conn.aspを直でたたいて取得