Ubuntu 8.10でBluetoothのファイル転送出来るようにする

bluetooth transfer


今日のネタは Ubuntu 8.10 での Bluetooth転送のためのハックです。

私はまともなBluetooth機器はauの携帯W54Tぐらいしか持っていないのですが、この携帯で写真をとることがよくあり、その写真をさくっとブログに貼ったり、友達にメッセンジャー等で送ったりするので、PC用Bluetoothアダプタを買って運用していました。携帯から写真を選んで、「Bluetoothで送信」で簡単にPCに転送できるので、かなり便利です。

Ubuntu 8.04の頃は、ほとんどなにも設定しなくても、当たり前のように送受信できていたのですが、8.10になってからなぜか出来なくなったので、その原因を調査し、対策してみました。

まずはググってみる

あー、やっぱりおなじようにハマってる人いますね。

http://imasya.cocolog-nifty.com/imasya/2008/11/bluezbip-d07f.html

なるほど、サポートされてない、と……。

って、あれ? 8.04ではできてたんですよ? というか、私の場合auの携帯の場合はBIPじゃなくてOPPあたりでファイル送信していたような気が……。OPPなら大丈夫なはずなんですよね。

画像ファイルだとBIPが使われてしまうかもしれないので、確実にOPPが使われそうなテキストデータを携帯からPCへ試しに送ってみよう。……うん、やっぱり受け付けてくれない。 となると、obex-data-serverが動いてないのでしょうか?

自分で様子を見てみる

obex-data-serverが動いているかどうか確認。

$ ps ax | grep obex
 6343 ?        S      0:00 /usr/bin/obex-data-server --no-daemon 
 8672 pts/0    S+     0:00 grep obex

動いていますね。それでは hciconfig でbluetoothのステータスを見てみましょう。

$ hciconfig -a
hci0:	Type: USB
	BD Address: 00:1B:DC:00:5D:81 ACL MTU: 310:10 SCO MTU: 64:8
	UP RUNNING PSCAN ISCAN 
	RX bytes:7080 acl:85 sco:0 events:307 errors:0
	TX bytes:3482 acl:73 sco:0 commands:105 errors:0
	Features: 0xff 0xff 0x8f 0xfe 0x9b 0xf9 0x00 0x80
	Packet type: DM1 DM3 DM5 DH1 DH3 DH5 HV1 HV2 HV3 
	Link policy: RSWITCH HOLD SNIFF PARK 
	Link mode: SLAVE ACCEPT 
	Name: 'aqua-0'
	Class: 0x0a010c
	Service Classes: Networking, Capturing
	Device Class: Computer, Laptop
	HCI Ver: 2.0 (0x3) HCI Rev: 0xc5c LMP Ver: 2.0 (0x3) LMP Subver: 0xc5c
	Manufacturer: Cambridge Silicon Radio (10)

なぜか、Service Class が Networking と Capturing しか動いていません。obex-data-serverがうまく接続されていないようです。

再度ぐぐって解決

おっかしーなー。(再度ググり) あ、めっけ!

https://bugs.launchpad.net/ubuntu/+source/bluez/+bug/283064

軽く斜め読みした感じでは、政治的だったりなんだったりな事情で、本質的にはGNOMEのアップデート待ちですが、 gnome-user-share か gnome-bluetooth で逃げることはできるようです。

私は面倒なので逃げの一手で。gnome-user-share は apache2 に依存している重い奴なので、 gnome-bluetoothの方をインストールしました。

インストールが済んだら、Gnomeメニューの「アプリケーション」→「アクセサリ」→「Bluetooth ファイル共有」(実体は /usr/bin/gnome-obex-server )でサーバーを起動。これでPCのBluetoothがOPPを待ち受けるようになります。

一応、念のために再度 hciconfig で確認。

$ hciconfig -a | grep Service
	Service Classes: Networking, Capturing, Object Transfer

Object Transfer が追加されているので、これでOK。

あとは、いままで通り携帯から転送リクエストを飛ばせば、 gnome-obex-server が反応してファイル転送が行われます。

ファイル転送を頻繁に行う人は、Gnomeメニューの「システム」→「設定」→「セッション」で、 gnome-obex-server をログイン時に自動起動するように設定してもいいかもしれませんが、私は滅多に使わないので、転送したいときだけ手動で起動することにしました。

半年後にリリースされるUbuntu 9.04では、この問題は解決していて、こんな回避はいらなくなってることを期待しましょう。

ふぅ。無駄に疲れた。