bluetooth でじたばた

先日購入した

と, USB 経由の bluetooth アダプタ

PLANEX Bluetooth Ver2.0+EDR対応 USBアダプタ(Class 1) BT-MiniEDRW

PLANEX Bluetooth Ver2.0+EDR対応 USBアダプタ(Class 1) BT-MiniEDRW

を使って, laptop で音を鳴らして bluetooth で飛ばして, リモートのイヤホンで聞くまで. 試しに Windows でやってみたらさっくりできたので debian でもやりたくてじたばた.

PIN(passkey) の登録までにちょっと手間取った.

必要なモノ

とりあえず以下を install した.

  • bluez-utils
  • bluez-audio

/etc/init.d/bluetooth が導入されて, daemon として hcid が起動する.

あと設定用に

を入れておく. xfce4 を使っているので, 自動起動に入れておく.

設定とか

挿してみて動作しない場合には

を入れてみると良いかもしれない. 挿してみると

usb 2-1: new full speed USB device using uhci_hcd and address 3
usb 2-1: configuration #1 chosen from 1 choice
usb 2-1: New USB device found, idVendor=0a12, idProduct=0001
usb 2-1: New USB device strings: Mfr=0, Product=0, SerialNumber=0

と見えた. ついでにタスクバーに bluez-gnome のアイコンが出てきた.

ここでイヤホン受信側をボンディング状態にして一度スキャンする

$ hcitool scan

ここで見えた XX:XX:XX:XX:XX:XX は後で使うのでメモしておく.

サービスのアクティベーション

続いて PIN コード(passkey) によって認証してボンディングする.http://wiki.bluez.org/wiki/HOWTO/AudioDevices にあるようにdbus を直接叩く(ここにある python スクリプトでも良いけど).

$dbus-send --system --print-reply --dest=org.bluez \
/org/bluez org.bluez.Manager.ActivateService string:audio
...
   string "org.bluez"

返ってくる string を次に使う. ここでは "org.bluez" が返ってきた.

バイスの登録.
$dbus-send --system --type=method_call --print-reply \
 --dest="org.bluez"  /org/bluez/audio \
 org.bluez.audio.Manager.CreateDevice string:XX:XX:XX:XX:XX:XX
 ...
    string "/org/bluez/audio/device0"

"--dest" はアクティベーションで返ってきた文字列を指定, string は接続したい機器のアドレス. 返ってきた string が作成されたデバイス.

接続

受信側をボンディング待受状態にしておく. でもって,

$ dbus-send --system --type=method_call --print-reply \
  --dest="org.bluez" "/org/bluez/audio/device0" org.bluez.audio.Sink.Connect

"--dest" にアクティベーションで返ってきた文字列, 続いて作成したデバイスを設定して接続. そうすると bluez-gnome アプレットがPIN コードの入力を要求してくる. 入力すると無事接続できた.

実際に音を鳴らしてみる.

先ず dmix 経由で鳴らしてみる. ~/.asoundrc に

 # for bluetooth
 pcm.bluetooth{
   type plug
   slave {
       pcm "bluetooth_hw"
   }
 }
 pcm.bluetooth_hw {
   type bluetooth
   device XX:XX:XX:XX:XX:XX
   profile "auto"
 }

適当な mp3 でもって

$ mplayer -ao alsa:device=bluetooth test.mp3

で鳴った.

面倒なのは, 音を出すアプリケーション毎に出力を設定しないといけないこと. 設定が嫌なので, PulseAudio で出力することに.

 # for default -> PulseAudio
 pcm.!default{
   type pulse
 }
 ctl.!default{
   type pulse
 }
 # for bluetooth
 pcm.bluetooth{
   type plug
   slave {
       pcm "bluetooth_hw"
   }
 }
 pcm.bluetooth_hw {
   type bluetooth
   device 00:1B:DC:20:14:58
   profile "auto"
 }

これはこれで. .xsession あたりに

 pulseaudio -D  2>/dev/null

として pulseaudio が起動するようにしておく.