バッテリー状態表示

MacBookのバッテリーの残量をGrowlに通知する - みずぴー日記からですが、Linux でも同様にバッテリー表示ができればいいなと思っている方もいると思います。 Gnome の機能でも通知させることができますが、任意のものを任意のタイミングで表示するには AWK Users JP :: Gnome で CPU の負荷をお知らせで記述した Python スクリプトを少し変更した物を用います。

#!/usr/bin/python

from pynotify import *
import sys

init("cli notify")
n = Notification(sys.argv[1], sys.argv[2], sys.argv[3])
n.show()

上記の Python スクリプトを ~/bin に格納してあると仮定して進めます。 前回のAWK Users JP :: Gnome で CPU の負荷をお知らせでは Notification() の引数が 2 つでしたが、今回は 3 つの引数を取ります。 3 つ目は画像を指定することができます。

Linux でのバッテリーの残量の取得ですが、Fedora10 を搭載した Lenovo T61 であれば /proc/acpi/battery/BAT0/state から状態を取得できます。 また、/proc/acpi/battery/BAT0/info から搭載バッテリーの情報を取得できますので、この 2 つのファイルから残量をパーセント表示して、それを上記 Python スクリプトに渡します。

#! /usr/bin/gawk -f
# battery.awk

BEGIN {
    acpi_batt_stat   = "/proc/acpi/battery/BAT0/state";
    acpi_batt_info   = "/proc/acpi/battery/BAT0/info";
    notification_cmd = ENVIRON["HOME"] "/bin/notify_3.py";
    batt_icon        = "/usr/share/icons/gnome/32x32/devices/battery.png";

    # 搭載バッテリーの容量を知る
    while (getline < acpi_batt_info > 0) {
        if ($0 ~ /^design capacity:/) {
            design_cap = $4;            # 設計上の容量
        }
        if ($0 ~ /^last full capacity:/) {
            last_cap = $4;              # 最後に充電仕切った時の容量
        }
    }
    close(acpi_batt_info);

    while (getline < acpi_batt_stat > 0) {
        if ($0 ~ /remaining capacity:/) {
            remain_cap = $3;            # バッテリー残量
        }
    }
    close(acpi_batt_stat);

    remain_percent = int(remain_cap / last_cap * 100);
    print "Battery Remain: " remain_percent " %";

    # notify.py で知らせる
    system(notification_cmd " 'Battery Status' 'Battery Remain: "\
           remain_percent " %' " batt_icon);
}

実行してみましょう。

$ nawk -f battery.awk
Battery Remain: 77 %

以上のように表示されると同時に Gnome だと以下のようなポップアップが表示されます。

DoukakuAWK_140.png

ここでは表示するだけの基本的な部分だけを作っていますが、もちろん MacBookのバッテリーの残量をGrowlに通知する - みずぴー日記のように何分かおきにチェックしたり、ある残量を切った時に表示させることもできます。

画像は以下のようにして探せばいろいろ見つかるでしょう。

$ locate battery | grep png$

Gkrellm の表示とは一致するのですが、Gnome の Notification エリアに表示される容量とは一致しません。 多分、別の方法で取得しているものだと思われます。

tag_nawk.pngtag_nawk.pngtag_nawk.pngtag_nawk.png