今回はBlueZ 5.xを実際に使ってみよー、というわけです。
(ちなみに、現在のところ最新版であるBlueZ 5.4がリリースされていました。
5.4のビルド方法は前回と一緒です。使い方も一緒です。)
さて、Bluetooth 4.0の対応の機器が必要なわけですが、
買ってきたのはiBUFFALOのBSMBB09DSBKというマウスとUSBドングルのセットです。
(他にBluetooth 4.0対応のマウスとしては、マッドキャッツのM.O.U.S.9がありますが、こちらは試してみたところ今回の手順では接続できませんでした。。。高かったのにー!)
このUSBドングルとのセットという点が結構重要だったりします。
一応、Windows 7では付属のドライバをインストールして接続できることは確認の上、いっちょLinuxでも動かしてみましょう...
試行錯誤
まずはBlueZ 5.xを使うに当たっての情報についてですが、、、これがまた情報が少ない。
公式サイトのBlueZ 5.0のリリースノート、BlueZ 5のAPIとポーティングガイドぐらいしか見当たりませんでした。
ともあれ、ポーティングガイドに掲載されているテスト用スクリプトというやつを使うのが一番簡単なようです。
まずは、マウス付属のUSBドングルをPCに接続してBluetoothアダプターを起動してやります。
$ su
# hciconfig
hci1: Type: BR/EDR Bus: USB
BD Address: 00:1B:DC:xx:xx:xx ACL MTU: 310:10 SCO MTU: 64:8
DOWN
RX bytes:501 acl:0 sco:0 events:23 errors:0
TX bytes:369 acl:0 sco:0 commands:22 errors:0
hci0: Type: BR/EDR Bus: USB
BD Address: 00:26:83:xx:xx:xx ACL MTU: 1022:8 SCO MTU: 121:3
UP RUNNING PSCAN
RX bytes:1006 acl:0 sco:0 events:48 errors:0
TX bytes:2387 acl:0 sco:0 commands:48 errors:0
※ここから先はすべてルート権限で実行していきます。# hciconfig
hci1: Type: BR/EDR Bus: USB
BD Address: 00:1B:DC:xx:xx:xx ACL MTU: 310:10 SCO MTU: 64:8
DOWN
RX bytes:501 acl:0 sco:0 events:23 errors:0
TX bytes:369 acl:0 sco:0 commands:22 errors:0
hci0: Type: BR/EDR Bus: USB
BD Address: 00:26:83:xx:xx:xx ACL MTU: 1022:8 SCO MTU: 121:3
UP RUNNING PSCAN
RX bytes:1006 acl:0 sco:0 events:48 errors:0
TX bytes:2387 acl:0 sco:0 commands:48 errors:0
私のPCにはマザーボード内蔵のBluetoothが載っていたりしますので、Bluetoothアダプタが2つ見えています。番号が大きいhci1が後から接続したUSBドングルということになっています。
通常(BlueZ 5のインストール後では)、USBドングルを接続しただけではDOWN状態になっているはずですので、次のコマンドでUPさせます。
# hciconfig hci1 up
# hciconfig
hci1: Type: BR/EDR Bus: USB
BD Address: 00:1B:DC:xx:xx:xx ACL MTU: 310:10 SCO MTU: 64:8
UP RUNNING PSCAN
RX bytes:1026 acl:0 sco:0 events:50 errors:0
TX bytes:1008 acl:0 sco:0 commands:49 errors:0
...略
# hciconfig
hci1: Type: BR/EDR Bus: USB
BD Address: 00:1B:DC:xx:xx:xx ACL MTU: 310:10 SCO MTU: 64:8
UP RUNNING PSCAN
RX bytes:1026 acl:0 sco:0 events:50 errors:0
TX bytes:1008 acl:0 sco:0 commands:49 errors:0
...略
UP RUNNING状態になりましたね。
続いてはポーティングガイドにあるDevice Discoveryを行ってみます。
BlueZ 5.3のソースツリーに移動し、
# cd work/bluez-5.3
(BlueZ 5.3のソースツリーへの移動。)
# cd test
# ./test-discovery -i hci1
(Bluetoothアダプタが複数ある場合は、-iオプションでアダプタを指定します)
(BlueZ 5.3のソースツリーへの移動。)
# cd test
# ./test-discovery -i hci1
(Bluetoothアダプタが複数ある場合は、-iオプションでアダプタを指定します)
これによりBluetoothのスキャンが始まります。(止めない限り続きますので、止める場合はCtr+Cです。)
スキャンを続けている状態で、マウスの電源を入れて、裏にあるペアリングボタンを5秒程押してペアリング状態にします。(緑のLEDが点滅)
すると、、、
[ 00:1B:DC:yy:yy:yy ]
Name = BSMBB09DS
Alias = BSMBB09DS
Logged = True
Adapter = /org/bluez/hci1
Appearance = 962
LegacyPairing = 0
Paired = 0
Connected = 0
UUIDs = dbus.Array([dbus.String(u'00001812-0000-1000-8000-00805f9b34fb')], signature=dbus.Signature('s'), variant_level=1)
Address = 00:1B:DC:yy:yy:yy
RSSI = -64
Icon = input-mouse
Trusted = 0
Blocked = 0
という感じでマウスが検出されてきました。見つかったらCtrl+Cで止めましょう。Name = BSMBB09DS
Alias = BSMBB09DS
Logged = True
Adapter = /org/bluez/hci1
Appearance = 962
LegacyPairing = 0
Paired = 0
Connected = 0
UUIDs = dbus.Array([dbus.String(u'00001812-0000-1000-8000-00805f9b34fb')], signature=dbus.Signature('s'), variant_level=1)
Address = 00:1B:DC:yy:yy:yy
RSSI = -64
Icon = input-mouse
Trusted = 0
Blocked = 0
(※MACアドレスは例として載せていますので、以降の手順では、スキャンによって見つかったMACアドレスで置き換えてください。)
続いては見つかったマウスに対するペアリングと接続です。
次のコマンドで、
# ./simple-agent -i hci1 00:1B:DC:yy:yy:yy
Agent registered
Device paired
ペアリングが成功したようです。マウスのLED点滅が消えます。Agent registered
Device paired
試しに
# hcitool con
Connections:
< Unknown 00:1B:DC:yy:yy:yy handle 43 state 1 lm MASTER AUTH ENCRYPT
接続まで完了している様子。。。しかし、マウスは動かず。。。Connections:
< Unknown 00:1B:DC:yy:yy:yy handle 43 state 1 lm MASTER AUTH ENCRYPT
なぜだー!だいぶ長いこと悩んでいましたが、、、マウスを動かすにはUHIDが必要です。
接続手順
uhidドライバを探しましょう。Fedora 18ではカーネルモジュールとしてインストール済みでした。
# locate uhid.ko
/usr/lib/modules/3.6.10-4.fc18.x86_64/kernel/drivers/hid/uhid.ko
/usr/lib/modules/3.8.8-202.fc18.x86_64/kernel/drivers/hid/uhid.ko
/usr/lib/modules/3.6.10-4.fc18.x86_64/kernel/drivers/hid/uhid.ko
/usr/lib/modules/3.8.8-202.fc18.x86_64/kernel/drivers/hid/uhid.ko
こいつをinsmodしてやります。
# insmod /usr/lib/modules/3.8.8-202.fc18.x86_64/kernel/drivers/hid/uhid.ko
Kenrelのバージョンにあったものを使いましょう。(大体、新しい方でOK)
Kenrelのバージョンにあったものを使いましょう。(大体、新しい方でOK)
マウスの方はもう一度ペアリングからやり直しです。
ペアリングを解除してやります。
# ./test-device -i hci1 remove 00:1B:DC:yy:yy:yy
スキャンから手順をやり直します。
# ./test-discovery -i hci1
(略)
Ctrl+C
# ./simple-agent -i hci1 00:1B:DC:yy:yy:yy
(略)
Ctrl+C
# ./simple-agent -i hci1 00:1B:DC:yy:yy:yy
はい!マウス動きましたー!
めでたし、めでたし。。。
そんなことぐらい、ちゃんとドキュメントに書いておいてくれよー!
以上。