[NetWalker]バッテリー残量をほんのりマシに表示する battwalker.rb
NetWalkerの標準バッテリー残量インジケーターに不満を持っている人は多いのではないでしょうか。
使って10分もするとすぐに表示が黄色くなってしまい、折角バッテリーの持ちがいいのに無用な不安にとらわれてしまいます。
「/proc/battery」をのぞくと各レベルの閾値が設定されていることが読み取れますが、それと表示との間にもずれがあるように思います。
$ cat /proc/battery 7973mV (952) 947:90 892:50 873:20 771:8 770:2 0:2 caution(873:20 - 0) shutdown(770:2) poll:1800sec
ということで、代替となるようなバッテリー残量インジケーターをRuby/Gtkで書いてみました。
更新情報
2009.9.27 Ver.0.4: インジケーター上に残量のパーセンテージを文字で表示するようにしました。
2009.9.26 Ver.0.3: 名前を「battmonwalker.rb」から「battwalker.rb」に変更しました。
@kuromaboさんが自分と同時に同じものを作ろうとされていたということで、その@kuromaboさんが命名していた名前を拝借しました。
@kuromaboさんには後見人として(?)、いろいろ手伝ってもらっています。
Ver.0.3では、残量算出方法を見直して、Ver.0.2よりマシになっていると思います。
インストール
無保証です。
インストールは自分の野良リポジトリからできます。
リポジトリの登録手順、リポジトリからのインストール手順については以下のページを参照してください。
[NetWalker]Twitpicに画像とコメントをアップロードするTwitpicUploader.rb
パッケージ名は「battwalker.rb」です。
インストールすると「/usr/local/bin/battwalker.rb」として入るので、これを「システム>設定>自動起動するアプリ」に登録します。

▲ダイアログの「名前」には適当な名前を、「コマンド」には「/usr/local/bin/battwalker.rb」と。「説明」も適当に。(画像は名前がbattmonwaker.rbだったときのものです)

▲登録完了。(画像は名前がbattmonwaker.rbだったときのものです)
一度ログアウトして再度ログインすると、通知領域にバッテリー残量インジケーターが表示されると思います。
ruby, libgtk2-rubyに依存しているので、インストールするとそれらも入ります。
(これをdebの中で処理する方法を知っている方教えてください。カレントユーザーディレクトリを知る方法が分かりません)
システム標準のもの、そして battwalker.rb のものとバッテリー残量インジケーターが二つ表示されることになります。
僕は、システム標準のインジケータを消して使ってみてます。
「システム>設定>電源の管理>全般タブ」にある「バッテリー残量がほとんどない時だけアイコンを表示する」を選択すると普段は消えてくれます。
解説
battwalker.rbは「/proc/battery」を読み取って、通知領域のインジケーターとtooltipに反映させるというシンプルなアプリです。
表示の更新は1分に1回実行しています。
インジケーター上にマウスカーソルを持っていくと、tooltipで現在の残量等を表示します。
Gtk::Pixbufにdraw text的な感じのことをして、それをGtk::StatusIconにセットすればいいみたい、というとこまで分かりました。
Ruby/GtkはNetWalkerを入手した日にいじり始めたもんで、よく分かっていません。
やり方が分かったら、そのような感じにする予定です。
「/home/YOUR_NAME/batterylog.txt」として残量のログを記録していきます。
今のところ、ログを切ることはできません。
残量算出の精度とログ、アイコン切り替えテーブルについて
/proc/batteryに現れる電池の残量は、コストダウンのためか電圧を見て検出しているようで、精度がよろしくありません。
何しろ、一度減った残量が増えたりしますから。
システムの負荷が低いと電圧が上がり、負荷が高くなると電圧が下がり、ということが起きているように思います。
またしばらく減らなかったりするようです。
「本来なら電流計によって容量計算をするのだが、電流計を積んでないのではないか」そんな考察が2ちゃんねるでされていました。
tooltipのパーセント表示は、シャットダウンする残量770を下限、僕の環境でフル充電し、ACアダプタを外した直後の残量980を上限として、それを100等分したときに、現在の残量がどこに位置するかで求めています。
電圧が一時的に高くなるACアダプタ接続中は、この関係で残量表示が100%を超えます。
ACアダプタの接続/切断を判定して、パーセント表示を出さないようにしています。
980という数値はスクリプトの中に固定値として書き込んでいますが、本来は環境によって調整すべきでしょうね。
« [NetWalker]Twitpicに画像とコメントをアップロードするTwitpicUploader.rb | Main | [iPhone][Jailbreak]iPhone用のmicroSD Text Readerを作ってみた »
The comments to this entry are closed.







Comments
自動起動するアプリは
/home/USERNAME/.config/autostart/
に.desktopファイルができるだけのようですね。
.debの中でシステム全体に設定するには
/etc/xdg/autostart/
に.desktopファイルを突っ込めばよいかと。
あと、パッケージ名に.rbはいらないと思いますけど…
またはbattwalker-rbとか。anthy-el等と同じような感じで。
Posted by: | 2009.09.27 at 12:11 PM
コメントありがとうございます。
次のバージョンアップから自動起動を仕込むようにしたいと思います。
ところで、カレントユーザーの$HOMEを割り出す方法をご存知ありませんか?
パッケージ名はどうしましょうかねー。考えてみます。
Posted by: moyashi | 2009.09.27 at 11:37 PM
カレントユーザーではありませんが、例えば
userhome=`su $(ps -C x-session-manager -o user=) -c 'printenv HOME'`
とかでいいのでは。
GDMからログインせずにコンソール上で作業するとうまくいかないでしょうけど。
あと気づいたんですが、USBデータ通信端末等を差すと数字がガクッと落ち、抜くと戻ります。
やはり電圧でバッテリー残量を見積もるのは難しいですねえ。
Posted by: | 2009.09.28 at 06:22 PM
あーやっぱりx-session-managerのユーザー名を見るのではダメかも。
場合によってはx-session-managerではなくgnome-sessionだったりstartkdeだったりするんで。
Posted by: | 2009.09.28 at 08:00 PM
コメントありがとうございます。
やっぱり結構難しい問題ですかね。
NetWalker以外では役に立たないのでx-session-managerでもよいのかなと思いますが。
あるいはzenityかなんかでユーザーに促すということも考えたりしました。
USBについてはどうしようもないですね。
電圧計=残量計ということになっているらしいですから、どうすることもできないと思います。
lsusbかなんかを見て、機種ごとの降下電圧をテーブルから読み出し補正する、なんてこともできるのかもしれませんが、通信時と非通信時でも違いそうですし、そんな対応をするモチベーションはゼロですw
Posted by: moyashi | 2009.09.29 at 12:16 PM
コメント欄からのご連絡で失礼いたします。
シャープ株式会社の製品に関する情報発信&交流を目的としたブログサイト「シャープな暮らし研究所」と申します。
NetWalkerのご利用状況をブログでご紹介いただき、ありがとうございます。
つきましては、ぜひ、こちらの記事を当ブログにてご紹介させていただきたいと存じます。ご了承いただけるようでしたら、大変お手数ではございますが、メールにてご連絡ただければ幸いです。ご了承いただき次第、近日公開予定です。どうぞ、よろしくお願いいたします。
Posted by: シャープな暮らし研究所 | 2009.12.21 at 09:07 AM
Hi,
what is the license for battwalker.rb? Some users of sharpnetwalker yahoo group had problems with getting this file and I'd like to create copy.
I also plan some Debian repository in openSUSE Build service and I'd like to add it there if you don't mind.
Posted by: Sleep_Walker | 2010.05.14 at 05:28 PM
Hi,
It's a Ruby License.
Do anything that you want to do!
Posted by: moyashi | 2010.05.15 at 02:09 AM