2013年4月21日日曜日

Fedora 18でBluetooth 4.0対応マウスを接続してみよう

前回の続きになります。

今回は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
※ここから先はすべてルート権限で実行していきます。

私の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

...略

UP RUNNING状態になりましたね。

続いてはポーティングガイドにあるDevice Discoveryを行ってみます。
BlueZ 5.3のソースツリーに移動し、
# cd work/bluez-5.3
(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で止めましょう。
(※MACアドレスは例として載せていますので、以降の手順では、スキャンによって見つかったMACアドレスで置き換えてください。)

続いては見つかったマウスに対するペアリングと接続です。
次のコマンドで、
# ./simple-agent -i hci1 00:1B:DC:yy:yy:yy
Agent registered
Device paired
ペアリングが成功したようです。マウスのLED点滅が消えます。

試しに
# hcitool con
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

こいつをinsmodしてやります。
# insmod /usr/lib/modules/3.8.8-202.fc18.x86_64/kernel/drivers/hid/uhid.ko
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

はい!マウス動きましたー!

めでたし、めでたし。。。

そんなことぐらい、ちゃんとドキュメントに書いておいてくれよー!

以上。

2013年4月7日日曜日

Fedora 18でBlueZ 5.3をビルドしてみよう

LinuxではBlueZ 5.0で、Bluetooth 4.0のLEモードが実装されています。
ですが、現状のところBlueZ 5.xのパッケージが用意されているディストリビューションはありません。

そんなわけで、とりあえずビルドしてみましょう。

今回使うのは、Fedora 18。64ビット版の(Live-CDFedora-18-x86_64-Live-Desktop.iso)をVMware仮想マシン上にインストールしました。

インストールに関しては省略します。まあ、特殊なことは何もありません。普通にインストールしましょう。
ちなみに、VMware上でインストールがうまくいかない(画面が正常に表示されない)場合には、"3Dグラフィックのアクセラレーション"をOFFにしておくと良いようです。

インストール後は、一旦UPDATEを行ったのち、BlueZのビルドに必要なパッケージを追加でインストールします。
$ su
# yum install gcc libusb-devel dbus-devel glib2-devel libudev-devel libical-devel readline-devel

vmware-toolをインストールしたい場合は下記も追加します。
# yum install kernel-devel

あと追加でwgetも。
# yum install wget
# exit


bluezのソースコードを入手します。公式のHPより現状最新のbluez-5.3をダウンロードしてきます。
$ wget http://ftp.kernel.org/pub/linux/bluetooth/bluez-5.3.tar.xz

展開します。
$ xz -d bluez-5.3.tar.xz
$ tar xvf bluez-5.3.tar

ビルド
$ cd bluez-5.3
$ ./configure
$ make

続けてインストールしますが、これを行うとプリインストールされているBluetoothアプレットは使えなくなりますのでご注意。
$ su
# make install

動作確認するためには、一旦再起動します。

再起動後、試しにhcitoolコマンドを打ってみます
$ hclitool
...
lescan
lewladd
...

LE系のコマンドが追加されていますね。


さて、 続きはまた今度。