GeeksPhone PEAKやKEONは
技適マークを持ってるわけではないので、WiFiで使ったりBluetoothで使ったり、ドコモとかMVNOとかのSIMを差して使うことは日本の法律的にはダメだ。
海外製端末上でネットワークが動いているデモを日本国内で公に見せることができなくなるので、回避するには以下の方法が考えられる。
- 海外のSIMを差してローミングと言い張って、グレ-な感じで逃げる
- 技適マークのとれた無線LANカードをMicroUSB経由で接続
- 有線LANカードをMicroUSB経由で接続
- MicroUSBと母艦PCを使って接続
よく週間アスキーが海外のSIMを差してるから大丈夫という話を書いてたりするけど、関係省庁に確認した話を聞くとどうもグレー(法律的な判例がないので何とも言えない)な感じだった。なので、公にはそんなに使えないっぽい話なんだよね。でも海外SIMを使ってる場合に違反になるのはローミングでつなげてるキャリア(ドコモとか)になるっぽいから、まためんどくさい話でもあるんだけど。
ということで、これ用にUSB LANカードを買って調査しても、お金がかかるので(カーネルコンフィグ見ればどれが動くくらいはわかるけどさ)、MicroUSBケーブルを使って母艦PCのネットワーク経由でインターネットに接続する方法をとることにした。
Firefox OSと言っても内部のレイヤーはAndroidを流用しているのでそこらのノウハウをある程度使える。
用意するもの
- 母艦のLinux。Windowsでもいけると思うけど試してない。Linuxはなんでもいけるはず
- MicroUSBケーブル
- Android SDK。adbコマンドが必要なため。最近のUbuntuとかはadbコマンドを自分のレポジトリとかに持ってるからadbコマンドをすでにインストールしてる人はいらない
Firefox OS側のrndisを有効にする
rndisってのは、Androidガジェットドライバで実装されてるUSBネットワークインターフェイスのこと。Androidと同じようにsetpropコマンドでこれを有効にする
adb shell setprop sys.usb.config 'rndis,adb'
なお、リモートデバッグを有効にしないとadbコマンドは使えない。
ネットワークの設定
IPアドレスを10.1.2.3にするのであれば、以下のようにする
adb shell ifconfig rndis0 10.1.2.3 netmask 255.255.255.0
DNSの設定はsetpropで。面倒なのでGoogleのDNSサービスを設定する
adb shell setprop net.dns1 '8.8.8.8'
ルーティングテーブルの追加も。母艦のIPアドレスを10.1.2.1とすると、
adb shell route add default gw 10.1.2.1 dev rndis0
オフライン自動認識をオフにする
ここだけはFirefox OS固有の話。無線LANとか3GのコネクションがないとGecko内部でオフラインと認識してしまうので、この自動認識をオフにする。これをオフにすると、offlineイベントとか使えなくなるので要注意。
adbコマンドを使って、prefs.jsファイルを取得。<your profile>は各デバイス次第だけど、.defaultというSUFFIXがついているディレクトリのこと。
adb pull /data/b2g/mozilla/<your profile>/prefs.js
このファイルに以下の行を追加
prefs("network.gonk.manage-offline-status", false);
そして、それをアップロード
adb push prefs.js /data/b2g/mozilla/<your profile>/prefs.js
で再起動。
母艦側の設定
上記の設定を行うとAndroidガジェットドライバによって、母艦のLinux上ではusb0とかusb1とかデバイス名のネットワークデバイスが使えるようになる。なのでiptablesでNAT用のルールを書けば自ずと使えるんだけど、Ubuntuで/etc/network/interfaceに以下のような自動構成を書くのが自分の好み。
allow-hotplug usb0
iface usb0 inet static
address 10.1.2.1
netmask 255.255.255.0
network 10.1.2.0
broadcast 10.1.2.255
up iptables -A POSTROUTING -t nat -J MASQUERADE -s 10.1.2.0/24
up sysctl -w net.ipv4.ip_foward=1
up route add -host 10.1.2.3
down iptables -D POSTROUTING -t nat -J MASQUERADE -s 10.1.2.0/24
このような自動構成を書いておけば、ifup usb0で設定が有効になって、ifdown usb0で設定が破棄される。
ということで、MicroUSBケーブル経由でネットワークが使えるようになった。