n9-bt-pan

久々の投稿です。相変わらずNokia N9を愛しています。

最近(でもない?)AndroidなどがBluetooth(BT-PAN)によるテザリングをサポートし始めました。メリットはBluetoothの低消費電力により待機中の電力消費を抑えられることです。

N9も3Gで通信してると電池がみるみる減りますし、テザリング端末の電池を温存するためにもN9でBTテザリング機とBT-PAN接続したいものです。

今まで結構やろうとしている人はいたけどできなかったんですが、今日たまたま調べたらやっている人がいて、マネしてやってみたらできたのでメモ。

注: この作業の中でN9のセキュリティシステムを無効化しています。場合によっては悪意あるアプリケーションに端末のすべての権限を自由に許可してしまう非常に危険な行為です。この記事の内容を実行して発生したいかなる責任も当ブログおよび筆者は負いませんので、自己責任で実施ください。

基本的には以下の記事を読めばできますが、若干修正した箇所があります。またusbnet接続の設定は今回関係ないので省略しています。

DarkStarShout - Nokia N9 Bluetooth PAN, USB & Dummy Networks

https://darkstarshout.blogspot.jp/2012/08/nokia-n9-bluetooth-pan-usb-dummy.html

必要なモノは以下。

  • Harmattan Platform SDK
  • N9 developer mode
  • Bluetoothテザリング対応端末
  • 最悪N9をリセットする覚悟(バックアップしておいてください)

作業の流れは以下の通り。

  1. ダミーネットワーク用パッケージのビルド
  2. INCEPTION for Nokia N9の導入
  3. ダミーネットワーク用パッケージの導入と定義の作成
  4. BT-PANの有効化
  5. テザリング端末との接続

ではいってみます。

1. ダミーネットワーク用パッケージのビルド

いきなりハードルが高いですが、ダミーネットワークを定義するためのicd2用追加モジュールをビルドします。ビルドするためにはN9の開発環境のひとつであるharmattan platform SDKが必要です。

Harmattan Platform SDK

https://harmattan-dev.nokia.com/platform-sdk/

日本語の記事がないので、Gentoo環境ではありますが[私の過去の記事]({{< ref "/post/harmattan-platform-sdk-install-gentoo-amd64.md" >}})も一度読んでみるといいと思います。

icdってなんぞ?ですが、興味のある方はこのへんとか。

maemo.org -Free Maemo https://wiki.maemo.org/Free_Maemo#ICD2

Platform SDKのsb環境で、libicd-network-dummyのリポジトリをクローンして、パッケージを作成します。gitをはじめとして不足してるパッケージは適宜apt-get installして入れてください。

[sbox-HARMATTAN_ARMEL: ~] > git clone git://gitorious.org/icd2-network-modules/libicd-network-dummy.git
[sbox-HARMATTAN_ARMEL: ~] >  cd libicd-network-dummy
[sbox-HARMATTAN_ARMEL: ~] >  dpkg-buildpackage -rfakeroot

libicd-network-dummy_0.14_armel.deb というパッケージができますので、N9に転送しておいてください。ビルドできない方はこの先進まない方がいいとは思いますが、どうしてもという方はTwitterででもコメントください。対応するかは別ですが。

2. INCEPTION for Nokia N9の導入

INCEPTION というツールをインストールします。このツールによって、icdのダミーネットーワークモジュールを動作可能にします。

ここで2度目の注意を。

注: この作業で、N9のセキュリティシステムであるAegisを無効化してしまいます。場合によっては悪意あるアプリケーションに端末のすべての権限を自由に許可してしまう非常に危険な行為です。この記事の内容を実行して発生したいかなる責任も当ブログおよび筆者は負いませんので、自己責任で実施ください。

INCEPTIONは以下からダウンロード可能です。

maemo talk - INCEPTION 0.2.5

https://talk.maemo.org/showthread.php?t=85238

上記リンクからinception_0.2.5_armel.debをダウンロードし、N9に転送してインストールしてください。 dpkg -i inception_0.2.5_armel.deb インストールしたら、Aegisをオフにします。rootユーザーで実施します。

$devel-su
#/usr/sbin/pasiv

以下のようなメッセージが出てきますのでよく読んでください。

> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > >
                               I N C E P T I O N
< < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < <
                           Read me before continuing
===============================================================================
INCEPTION is a dangerous task that should be performed with caution.
 * Do not upgrade your phone's operating system to a new version without
   confirming that it is compatible with INCEPTION. If you wish to upgrade,
   you may need to uninstall or update INCEPTION first.
 * This program allows you to grant applications full access to your phone.
   Do not install applications from sources/developers that you do not trust.
   Avoiding malicious software (malware) is your responsibility.
 * The access granted by this program could be used to perform operations that
   may adversely affect your phone's functionality and/or warranty coverage.
   Do not submit your phone for warranty repair or contact Nokia support due to
   issues caused by improper use of this program.
More information can be found at https://endno.de/~itsnotabigtruck/inception.
Do you wish to proceed? (yes/no):  

yesを押すと実行され、Aegisのオフが完了です。ちなみに、INCEPTIONをアンインストールすれば元に戻るようです。まだ試してないけど。

あと、pasiv-not-runコマンドを実行する必要がある場合には、basenameコマンドのパスが違っている場合がありますので、シンボリックリンクを張るなど適宜対応してください。

3. ダミーネットワーク用パッケージの導入と定義の作成

先ほどビルドしたlibicd-network-dummy_0.14_armel.debをインストールします。通常dpkgコマンドでインストールしますが、きちんと動作するようにするためにINCEPTIONに含まれるinceptコマンドで導入します。N9でターミナルもしくはsshから実行します。

$/usr/sbin/incept libicd-network-dummy_0.14_armel.deb 

導入が終わったら、ダミーネットワーク定義を作成します。同じくN9で。

$ gconftool-2 -s -t string /system/osso/connectivity/IAP/DUMMY/type DUMMY
$ gconftool-2 -s -t string /system/osso/connectivity/IAP/DUMMY/name 'Dummy network'

作成したらicd2を再起動します。

$ /sbin/initctl restart xsession/icd2

ちなみにdpkgコマンドで導入すると、このタイミングで以下のようなエラーがdmesg上で確認でき、Aegisでチェックされていることがわかります。

[   48.061431] Aegis: credp_kcheck failed 9990005 libicd_network_dummy.so
[   48.061431] Aegis: libicd_network_dummy.so verification failed (source origin check) 

4. BT-PANの有効化

N9のBluetooth networkを有効化します。sshでN9にログインし、rootでファイルを編集します。

$ devel-su
# vi /etc/bluetooth/main.conf

以下の記述を変更してください。

(デフォルト) DisablePlugins = network,hal
(変更後)       DisablePlugins = hal

変更したら、bluetoothのサービスを再起動します。

# /sbin/initctl restart xsession/bluetoothd

これでBluetooth networkが有効になりました。次に、以下の接続用のスクリプトをダウンロードし、N9の任意のディレクトリに保存しておきます。自分は/home/userの下に置いてあります。

https://raw.github.com/DarkStarSword/junk/master/blue-tether.py

次にBluetoothテザリングを実行している端末側のBluetoothアドレスを設定として記載します。~/.blue-tetherという名前で保存してください。

$ echo "bdaddr = AA:BB:CC:DD:EE:FF" > ~/.blue-tether <Paste>

5. テザリング端末との接続

いよいよ接続です。ちょっと面倒ではありますが。

N9と端末をペアリングします。N9側に表示されるBluetoothプロファイルにPANがなくても気にしないでください。

ペアリングが完了したら、"Internet Connection"で接続先を先ほど作成した"Dummy Network"を指定します。3G通信のアイコンが現れ、接続されたと表示されます。表向きはこのDummy Networkに接続しているように見えていて、その後ろで実はBluetoothで接続している、という感じです。

N9上で端末を起動し、先ほどのpythonスクリプトを実行します。userでOKです。 実行して以下のようにログが出てくれば成功です。

$ develsh -c ./blue-tether.py
Connecting...
bnep0 created
Press enter to close connection
Property Changed: Connected: 1
UP
Starting DHCP client...
Property Changed: Interface: bnep0
Property Changed: UUID: 00001116-0000-1000-xx00-00805f9bxxxx
udhcpc (v0.9.9-pre) started
Sending discover...
Sending select for 192.168.0.3...
Lease of 192.168.0.3 obtained, lease time 7200
/etc/udhcpc/default.script: exec: line 7: /etc/udhcpc/default.zeroconf.dhcpup: not found
Resetting default routes
adding dns aaa.bbb.ccc.ddd
adding dns aaa.bbb.ccc.eee

ここでEnterを押すとスクリプトが終了し、接続も切れます。

接続できることを確認したら、アイコンから起動できるようにしましょう。rootユーザーで/usr/share/applications/blue-tether.desktopを作成します。

[Desktop Entry]
Type=Application
Name=Blue Net
Categories=System;
Exec=invoker --type=e /usr/bin/meego-terminal -n -e develsh -c /home/user/blue-tether.py
Icon=icon-m-bluetooth-lan

bt-pan-icon

いちばん左下のアイコンがそれです。これを押すとターミナルが起動し接続を始めます。接続が切れたことを検知することは現状できないので、おかしいなと思ったらツールバーにあるBluetoothの表示を確認して再度接続してみるとかするしかないです。

以上で作業は完了です。基本的にリブートは不要ですがうまくいかないときは一度リブートとかしてみるといいかもしれませんね。

しばらく使ってみようと思います。これでN9の電池持ちがよくなればいいなー。