Bluetoothダイヤルアップ時のレジューム問題解決方法

基本的にザウルスでの通信はSL-C760にLink EvolutionのBluetooh CF Cardを差し込んで、auBluetooth対応携帯電話 A5504Tに対してBluetoothでダイヤルアップしてる。
で、パッケージ色々と入れるのも面倒なんでBlueZだけ入れて、赤外線ダイヤルアップをダミーで作って、これをBluetoothダイヤルアップとして使ってる。

Bluetooth接続のためのセットアップ
http://d.hatena.ne.jp/nyanonon/20050310#p4

だけど、この方法だけでは電源をOFF/ON(サスペンド/レジューム)した時に、一度Bluetooth CF Cardを抜いてから差しなおさないとダイヤルアップができないって問題がある。
本当に抜いてから差しなおさないとダメなのかな〜?と思いつつ、cardctlコマンドでejectとした後、insertしてみたら同様の効果が得られることが判ったので、レジューム時に自動的にこれを実行させるようにNetHelper Appletを使って設定してみた。

NetHelper Applet
http://tbox.jpn.org/wiki/linuzau/wiki.cgi?NetHelperApplet

cardctlコマンドは「type cardctl」もしくは「which cardctl」で調べてみると、/sbinにあることが判るので、以下のようなシェルスクリプトを作って/opt/QtPalmtop/binディレクトリにcfoffon.shって名前で置いた。

#!/bin/sh
/sbin/cardctl eject
/sbin/cardctl insert

あとはこれをNetHelper Appletからレジューム時に実行できるように/home/zaurus/Settingsディレクトリにあるnethelper.confを以下のように記述。

[Global]
Enabled = 1
[Run_Off]
resume00 = /opt/QtPalmtop/bin/cfoffon.sh
[Run_IRDA]
resume00 = /opt/QtPalmtop/bin/cfoffon.sh

[Run_Off]のはサスペンド時に通信してない時にレジュームした場合の処理で、[Run_IRDA]はサスペンド時に赤外線通信してた時にレジュームした場合の処理。もちろん、ダイヤルアップは一旦切れてしまうけど、その後ちゃんと再ダイヤルアップが出来る。
早速、これらの手順をパッケージ化してみた。インストール前に実行されるスクリプト preinstで現在のnethelper.confをnethelper.conf.bakで保存して、上記設定のnethelper.confを作成。アンインストール後に実行されるスクリプトではnethelper.confを削除してから、保存しといたnethelper.conf.bakをnethelper.confの名前にすることを復元している。とりあえず、下記に置いておく。
http://www.areanine.gr.jp/~nyano/archives/slzaurus/cfoffon_0.0.1_arm.ipk
Bluetooth CFカード以外が差し込まれている場合でも抜き差しの動作は行われるので、CFメモリーカードマイクロドライブとか)から音楽や動画を再生してる場合などは注意が必要。
本当は差し込んであるCFカードをcardctl identで確認した上で行うのがいいとは思うんだけど、手抜きパッケージなので。あと、Bluetooth CFカードの場合も抜き差し動作に相当するのでランプが点灯してから消えるのを待たないと、うまくダイヤルアップできないカモ。