Bluetooth テザリング可能なスマホに NOVO7 Fire で Bluetooth-PAN 接続するメモ

今日もメモ。

BT テザリング可能なスマホに NOVO7 Fire から BT-PAN 接続して通信出来るようにしてみる。

アプリとか使わずに、Android 標準機能とコマンドで何とかする。 Android の設定の BT 設定から接続すると落ちたりするし、なんか IP 振られないし。アプリを使えば簡単なんだろうけど、なんだか癪なので!


以下、親機とか子機とかいう呼び名は正しくないんでしょうが、便宜的に。メモだし。

親機
3G / Wi-Fi で外部接続できる側。うちだと HTCJ やら Xperia mini pro やら。
子機
Wi-Fi Only なタブレット側。

1. テザリングで BT-PAN を使うよう設定

親機側で行う。 HTCJ にはある。 mini pro にはない。
BT テザリングを ON にしていると選べないので ON の場合はいったん OFF に。


BT テザリング設定をタップ。


今回はダイヤルアップネットワーク (DUN) ではなくパーソナルエリアネットワーク (PAN) に。

2. BT テザリングを ON

親機側で BT テザリングを使用するように設定。

3. BT ペアリング

親機と子機で普通にペアリングすれば良い。

4. 子機インターネット接続の共有にチェックが入っていることを確認

親機側で行う。ペアリングした子機の設定の項目を開いて確認。

5. 親機の BT の MAC アドレスを控えておく

親機側で行う。設定→端末情報→端末の状態 等から。

以下、 AA:BB:CC:DD:EE:FF であったとする。

6. コマンドを叩く

子機側でシェルを叩いて接続設定等々を行う。

以下を参考にした。


とりあえず root 権限取得。

$ su

以下すべて root で行う。
# というか root 以外で出来るか試してない。→ 試した。 permission denied!


pand で親機に接続。

# pand --connect AA:BB:CC:DD:EE:FF

もしくは親機の BT の設定から、すべての端末から検索出来るようにした上で

# pand --search

でも OK 。

親機側の IP アドレスを調べる

親機の IP アドレスを知る必要があるので親機側でコマンドを叩く。
pand --connect していないと bnep0 は出てこない。

$ netcfg
lo       UP                                     127.0.0.1/8  0x00000049 00:00:00:00:00:00
・
・
・
wlan0    UP                                192.168.XX.XX/24  0x00001043 XX:XX:XX:XX:XX:XX
bnep0    UP                                192.168.50.1/24  0x00001043 AA:BB:CC:DD:EE:FF

必要なのは bnep0 の情報。 MAC アドレスは先程のとおりだとして、 IP アドレスを覚えておく。

ここでは 192.168.50.1 が振られていたとする。

子機側に戻る

再び子機側に戻ってコマンドを叩く。

# ifconfig bnep0 192.168.50.2 up                   ← 親機のアドレス内で適当に採番
# route add default gw 192.168.50.1 dev bnep0      ← 親機のアドレス
# setprop net.bnep0.dns1 8.8.8.8DNS を設定。今回は Google の
# setprop net.dns1 8.8.8.8                         ← 上記に同じ


接続確認は ping を通したり nslookup したり、ブラウザを使ったりすればいいと思う。

$ nelookup www.google.co.jp
Server:    8.8.8.8
Address 1: 8.8.8.8 google-public-dns-a.google.com

Name:      www.google.ne.jp
Address 1: 2404:6800:4004:802::1018
Address 2: 74.125.235.87 nrt19s01-in-f23.1e100.net
Address 3: 74.125.235.88 nrt19s01-in-f24.1e100.net
Address 4: 74.125.235.95 nrt19s01-in-f31.1e100.net

7. 接続解除

やっぱりコマンドを叩く。

# pand -K

おもむろに BT を OFF っても切れるはず。

TIPS

子機側でこんなシェルスクリプトを書いて Gscript とかで読ませれば簡単。


bt-pan-on.sh

#!/system/bin/sh

/system/bin/pand --connect AA:BB:CC:DD:EE:FF
/system/bin/sleep 5
/system/bin/ifconfig bnep0 192.168.50.2 up
/system/bin/route default gw 192.168.50.1 dev bnep0
/system/bin/setprop net.bnep0.dns1 8.8.8.8
/system/bin/setprop net.dns1 8.8.8.8


bt-pan-off.sh

#!/system/bin/sh

/system/bin/pand -K

注意

BT-PAN 接続中は Android 端末的には外部ネットワーク接続をしている扱いにならないらしい。そのため、 Google Play で接続待ちになったり、同期ができないとかいう状態になる。

それでもまぁ、電池持ちが Wi-Fi テザよりいいっていうメリットは大きい。

2012/11/14 追記
ifconfig したときに error: SIOCSIFFLAGS (Cannot assign requested address) なんてエラーが出ることがあります。 Fire の BT の MAC アドレスがランダムで振られているのが原因らしいのですが、その場合 /system/etc/bluetooth/bt_addr.conf の中身を書き換えて再起動するとうまくいくことがあります。どういう値に書き換えればうまくいくかまでは調べきれていませんが、試してみて下さい。