Posted on Sun Mar 22 15:26:23 +0900 2009 by nabeken
Bluetooth を使ったネットワーク接続は2種類ある。1つは PAN (Personl Area Network) を使った方法、もう1つは EMONSTER をモデムとして、それを Bluetooth 経由 ppp する方法である。本稿では、後者の方法を Linux で行う方法を解説する。
すでに、 Bluetooth PAN は正常に動いていることを前提とする。Linux での Bluetooth の扱いはここでは取り扱わない。
デフォルトでは DUN プロファイルがないので、レジストリを追加する cab を入手する。ダウンロードは xda-developers のサイトから可能。参考: http://forum.xda-developers.com/showpost.php?p=1614575&postcount=92 (ただし、登録が必要)
インストール後、再起動する。
rfcomm とは、シリアルケーブルをワイヤレスにしたもの、と言える。参考: http://japanese.bluetooth.com/Bluetooth/Technology/Works/RFCOMM_1.htm
ppp はこの rfcomm に対して行うことになる。Linux では、/etc/bluetooth/rfcomm.conf で設定する。
Linux の Bluetooth DUN に失敗する原因はこのチャンネル問題だと考える。
問題はどのチャンネルが EMONSTER のモデムに相当しているのか、である。これを調べるには、 sdptool を使う。参考: http://now.ohah.net/setu/wiki.cgi?Debian%3Aetch%3AGPRS (非常に参考になった)
参考サイトと自分の手元を比べると、やはりチャンネルは一定ではなく、環境に依存していることがわかる。失敗している人はチャンネルの設定を確かめるとよいだろう。
言うまでもないが、 XX:XX:XX:XX:XX:XX は自分の EMONSTER のアドレスである。
# sdptool search DUN Inquiring ... Searching for DUN on XX:XX:XX:XX:XX:XX ... Service Name: Dial-up Networking Service RecHandle: 0x10007 Service Class ID List: "Dialup Networking" (0x1103) Protocol Descriptor List: "L2CAP" (0x0100) "RFCOMM" (0x0003) Channel: 5 Language Base Attr List: code_ISO639: 0x656e encoding: 0x6a base_offset: 0x100 Profile Descriptor List: "Dialup Networking" (0x1103) Version: 0x0100
RFCOMM の下に Channel: 5 というものがある。これを rfcomm.conf に指定する。
# cat /etc/bluetooth/rfcomm.conf rfcomm0 { # Automatically bind the device at startup bind yes; # Bluetooth address of the device device XX:XX:XX:XX:XX:XX; # RFCOMM channel for the connection channel 5; # Description of the connection comment "EMONSTER-BT"; }
以上で rfcomm の設定は完了した。
まず、これまでのペアリング情報を EMONSTER から削除しておく。PIN関連の設定は
# cat /etc/bluetooth/hcid.conf | grep pin pin_helper /etc/bluetooth/pin-helper; # cat /etc/bluetooth/pin-helper #!/bin/sh echo -n "PIN:" cat /etc/bluetooth/pin
/etc/bluetooth/pin には PIN コードを予め書き込んでおく。これからもわかるように、pin_helper の戻り値を PIN:${yourpincode} にすれば、あとはなんでもよいことがわかる。
bluez-gnome を使ってペアリングする。この場合、bluetooth-applet を起動しておけば、ペアリングが必要なときに自動でポップアップしてくれるので、あとは指示に従うだけである。
次に実際にペアリングを行う。
# rfcomm connect 0
これを行うと、EMONSTER 側でアラートが出る。接続を許可し、上で指定した PIN コードを入力すれば、ペアリングは完了となる。なお、このコマンド自体の成否は特に問わない。ペアリングを先にすませるのが目的である。
Ubuntu などを使っている場合は GUI で設定できると思われるが、ここでは自分で設定する。まず、 /etc/ppp/peer/emobile に emobile 固有の設定を書く。このあたりの設定はほとんど USB 接続のときと同じである。異なるのは1行目で rfcomm0 を指定し、レートを変えている点である。ユーザ名 em に対するパスワードは /etc/ppp/pap-secret にあらかじめ登録しておくこと。ここでは扱わない。
# cat /etc/ppp/peers/emobile rfcomm0 460800 lock nodetach hide-password local noauth usepeerdns defaultroute noipdefault novj noccp nobsdcomp user "em" ipcp-restart 8 ipcp-max-configure 50 ipcp-accept-local ipcp-accept-remote connect '/usr/sbin/chat -V -f /etc/ppp/chat-emobile'
次にモデムとの交信をする chat コマンドに与えるスクリプトの設定を行う。参考: http://www.opensolaris.org/jive/thread.jspa?messageID=240907
参考サイトから chat のスクリプトを拝借した。これはシェルスクリプトの引数として与えられているので、それをファイル形式に落しこむ。これを /etc/ppp/chat-emobile として保存する。
# cat /etc/ppp/chat-emobile ABORT BUSY ABORT DELAYED ABORT "NO ANSWER" ABORT "NO DIALTONE" ABORT VOICE ABORT ERROR ABORT RINGING TIMEOUT 60 "" ATZ OK ATE1 OK "AT&FE1V1X1&D2&C1S0=0" OK AT+CGDCONT=1,"IP","emb.ne.jp","",0,0 OK ATD*99# CONNECT ''
以上で設定が完了した。
# pon emobile
これで ppp0 が生えるはずである。
Bluetooth は常時有効にしておくのが便利だが、バッテリの都合もあり、小まめに ON/OFF したい。しかし、何もカスタマイズがない場合、わざわざ Connection Manager を開く必要がある。また、 Device Status on Today Plugin を入れたとしても、タップが3回発生してしまい非常に手間である。
そこで、CicleBT というソフトを入れることにした。これは起動すると状態をトグルしてくれるだけのシンプルなプログラムである。ボタンから起動することを想定している。私は左側の長押しボタンにこのソフトを割り当てることで、ワンタッチで ON/OFF を切り替えている。
ON/OFFがワンタッチできるようになると、今度はひとめでどの状態か把握したくなる。それを可能にするのはこのタスクバーアプリである。
http://forum.xda-developers.com/showthread.php?t=257415 からダウンロードできる。(bticonontray.cab)
インストール後、ソフトリセットをすると、タスクバーに現われる。
Kaiser Tweak というソフトウェアをインストールすると、EMONSTERの様々な設定が操作できる。このなかに、Wireless Today という項目がある。これを有効にすると、Todayにワイヤレスの状況を把握できるアプリが追加される。上記のアイコンの代わりとなる。どちらか好きなほうを使うとよい。