ZBOX nano VD01でBluetoothを使う (2)
2012/05/01(火) 15:19 NetBSD はてブ情報 はてブに登録 はてブ数

前回、長々と書いた割にはThe NetBSD Guide Chapter 21 Bluetooth on NetBSDの最初の所までしか進んでいませんでした。

やっと内蔵のBluetoothモジュールが認識されたので、今回はマウスとキーボードを使えるところまで進めたいと思います。

今回の内容はZBOX固有というよりNetBSDでのbluetooth利用の一般的な手順になりますかね。

準備

まずは/etc/rc.confに
bluetooth=YES
と書いてbluetooth関連の有効化を行い、再起動もしくは
/etc/rc.d/bluetooth start
と入力してサービスを有効にします。

bluetoothの設定で触るファイルはたったの二つです。一つは/etc/bluetooth/hosts、二つ目は/etc/bluetooth/btdevctl.confです。

/etc/bluetooth/hostsは/etc/hostsのbluetooth版と思えば良く、bluetoothデバイスの一つ一つに与えられている固有のID (MACアドレスみたいなもの) に名前を付けるものです。

/etc/bluetooth/btdevctl.confはシステムの起動時に登録しておきたい (動くようにしておきたい) 各種bluetoothデバイスを書いておくものです。たとえばキーボードなんかは起動時に自動的に登録されていないと困りますからね。

まず/etc/bluetooth/hostsを作りましょう。

bluetoothデバイスは必ずデバイス登録モードのようなものをもっていて、ボタンの長押しであったりbluetoothロゴが書かれたボタンを押したりするとそのモードに入ります。たいていはLEDが点滅したりして「登録モードですよ」って言う感じになります。先の文書ではdiscoverable modeと書かれています。発見可能モードと呼ぶべきかな。

デバイスをそのモードにしておいて、btconfigコマンドを次のように入力すると、お目当てのデバイスがレスポンスを返してくれます。
# btconfig ubt0 inquiry
Device Discovery from device: ubt0 ... 1 response
  1: bdaddr XX:XX:XX:XX:XX:XX
   : name "Bluetooth Keyboard"
   : class [0x002540] Peripheral Keyboard <Limited Discoverable>
   : page scan rep mode 0x01
   : clock offset 15398
   : rssi 0
上記の例だと一つしか見つかっていませんが、複数のデバイスが見つかることもあります。どうせなら一気にやってしまった方が楽なので片っ端からbluetoothデバイスをピカピカと点滅させてやるといいかもしれません。

ここで大切なのはbdaddrという部分に書かれたコロンで区切られたアドレスです。/etc/bluetooth/hostsにはこのアドレスとそれを表す名前を付けてあげます。名前は自由に決めることができます。

今回はノーブランドのbluetoothキーボードとAppleのMightyMouseを使いました。/etc/bluetooth/hostsには以下のように書きました (bdaddrは潰してあります)。
XX:XX:XX:XX:XX:XX keyboard
YY:YY:YY:YY:YY:YY mightymouse
これを書くことで長くて覚えにくいbdaddrを使うことなくキーボードはkeyboard、マウスはmightymouseと呼ぶことができるようになります。

キーボード

それでは実際にキーボードを使えるようにしてみましょう。

キーボードを使えるようにするためには、いくつかの手順を実行する必要があります。
  1. キーボード側をdiscoverable modeにする (LED点滅ですね)
  2. PC側でPINを発行する (5分間有効)
  3. PC側でデバイスをアタッチするコマンドを発行する
  4. キーボード側で先ほど発行されたPINを入力する(最後にEnterキー)
まずキーボード側をdiscoverable modeにします。

次にはbtpinを使ってPINを発行します。
# btpin -d ubt0 -a keyboard -r -l 8
PIN: 82526229
btpinのマニュアルによると、このPINは5分間有効なのだそうです。なので、この後の手順はテキパキと行う必要があります。

次に、btdevctlを-Aオプションをつけて (つまりAttachをさせるようにして) 実行します。
# btdevctl -d ubt0 -a keyboard -s HID -A
このコマンドは実行後すぐにプロンプトに戻ってくるためAttachしていないような気になりますが、実はキーボード側からPINが入力されるのを待って、それが正しければAttachを完了させるような立て付けになっているみたいです。ここで表示されるメッセージはあまり気にしなくてよいです。

ということで、キーボード側で先ほどbtpinで表示された8桁のPINを入力し、Enterキーを押します。

するとPC側にデバイスが認識された旨が表示されます。キーボードから文字が入力できるようになっているはずです。

PINコード発行から5分経過するなどのタイムアウトに引っかかったりPINを打ち間違えたときにはAttachが中途半端な状態になっているため、次のコマンドでDetachしてAttach前に戻してあげる必要があります。
# btdevctl -d ubt0 -a keyboard -s HID -D
PINの発行やAttachのタイミングなどで、わりと失敗するので何度かこのコマンドにお世話になりました。

個人的にうまく動かなくて困ったのは、先の文書でPINをいつ打ち込めば良いのかわからなかったことです。btpinを入力した後すぐにキーボードからPINを打ち込んで、うまくいかないなー、と思っていたのですがbtdevctlコマンドがしばらくしてからデバイスをdetachしていたので、実はbtdevctl -AのあとにPINを入れるんじゃないかと気づいたのです。

マウス

さて、次はマウスをつないでみましょう。

すでに/etc/bluetooth/hostsに登録されていますから、あとはキーボードとほぼ同じくbtpinによるPIN発行とbtdevctlによるAttachだけです。

キーボードとの違いはPINが固定ということでしょうか。キーボードのようにPINを入力する方法がないのだから当たり前ですね。

キーボードの場合はPC側でPINを発行して、それをキーボードで打ち込むことによって接続が確立できましたが、マウスの場合は逆のイメージで、マウスが期待しているPINコード (0000らしいですね) を逆にbtpinに指定して実行してからマウス側をアタッチするみたいな感じです。

まず、マウスをdiscoverable modeにします。MightyMouseの場合はマウス受講部のシャッター開閉ですね。

次にbtpinコマンドをPINコード0000に指定して実行し、btdevctl -Aを実行します。
# btpin -d ubt0 -a mightymouse -p 0000
# btdevctl -d ubt0 -a mightymouse  -s HID -A
マウスはPC側と勝手におしゃべりして接続を確立してくれるみたいで簡単ですね。

自動起動

これでマウスとキーボードがどちらも使えるようになりました。再起動時にもデバイスを使えるようにするために/etc/bluetooth/btdevctl.confに次のように記述します。
HID    keyboard        ubt0
HID    mightymouse     ubt0
これで再起動時に先ほどのbtdevctl -Aをシステム側で自動実行してくれます。

さて、再起動時にはPINコードが必要でしょうか? 必要だととっても面倒です。

実はこの情報は/var/db/bthcid.keysに保存されているようですね。これを使って再起動時にはPINコードの入力を必要とせずにデバイスが利用可能になっています。

名前:  非公開コメント   

  • TB-URL  http://www.tokuda.net/diary/0786/tb/