Gentoo Linux Bluetoothガイド
1.
はじめに
Bluetoothとは
BluetoothはパーソナルコンピュータやPDA、携帯電話などを相互接続するための通信規格です。
Bluetoothを使うことで、デバイス間の無線での音声及びデータの通信が低いコストで利用可能となります。
さらに、Bluetoothで小さな無線LANを構築することも、機器を同期することもできます。
このガイドの内容について
初めに、どのBluetoothデバイスが適切であるかを確認する方法を説明します。
これによって、ユーザは動作することが確認されているデバイスを購入することができます。
その後に、システムカーネルの構成の手順や、システムに取り付けられているかカーネルに認識されているBluetoothデバイスを確認する方法、
そして必要なBluetooth用基本ツールをインストールする方法を解説します。
次に、リモートデバイスを認識させる手順と、
RFCOMMまたはパーソナルエリアネットワーク(PAN)を構成することでデバイス間の接続を確立する手順を解説します。
ガイドの最後では、Bluetooth技術を使うことができるアプリケーションを詳しく紹介しています。
2.
サポートされているデバイス
Bluetoothをサポートする認可を受けたデバイスと受けていないデバイス
重要:
認可を受けていないBluetooth製品も動作することがありますが、Gentooでサポートされることはありません。
それらのデバイスはただ動作する「かもしれない」だけなのです。
(訳注:Bluetooth SIGによる認可のことを指しているようです。市場に出回っている製品は普通は認可されています。)
|
サポートされているデバイスの一覧はこちらにあります。
Marcel HoltmannによるBluetoothデバイスの機能とリビジョン情報(英語)
(訳注:このリストはLinuxに正式に動作するデバイスのリストとして使われているようです。)
3.
システムの構成
カーネルの構築
最新の安定版Linuxカーネルは2.6なので、2.6系列のカーネルを使って説明します。
多くのBluetoothデバイスはUSBポートに接続されるので、USBも有効にする必要があるでしょう。Gentoo Linux USBガイド(日本語訳)も参考にしてください。
コード表示 3.1: カーネル2.6を設定 |
Networking --->
<*> Bluetooth subsystem support --->
--- Bluetooth subsystem support
<M> L2CAP protocol support
<M> SCO links support
<M> RFCOMM protocol support
[*] RFCOMM TTY support
<M> BNEP protocol support
[*] Multicast filter support
[*] Protocol filter support
<M> HIDP protocol support
Bluetooth device drivers --->
<M> HCI USB driver
[*] SCO (voice) support
<M> HCI UART driver
[*] UART (H4) protocol support
[*] BCSP protocol support
[*] Transmit CRC with every BCSP packet
<M> HCI BCM203x USB driver
<M> HCI BPA10x USB driver
<M> HCI BlueFRITZ! USB driver
<M> HCI DTL1 (PC Card) driver
<M> HCI BT3C (PC Card) driver
<M> HCI BlueCard (PC Card) driver
<M> HCI UART (PC Card) device driver
<M> HCI VHCI (Virtual HCI device) driver
USB support --->
<*> Support for Host-side USB
--- USB Host Controller Drivers
<M> EHCI HCD (USB 2.0) support
[ ] Full speed ISO transactions (EXPERIMENTAL)
[ ] Root Hub Transaction Translators (EXPERIMENTAL)
<*> OHCI HCD support
<*> UHCI HCD (most Intel and VIA) support
< > SL811HS HCD support
|
ここで、新しいカーネルを使ってリブートします。
うまくいけば、Bluetooth対応のシステムが手に入るでしょう。
重要:
USBデバイスには2つのモードがあることが多く、デフォルトモードは大概HCIではなくHIDでしょう。
これに該当するならば、hid2hciを使ってHCIモードに設定してください。
この変更はリブートによってリセットされます。
|
コード表示 3.2: Bluetoothデバイスを確認 |
# cat /proc/bus/usb/devices | grep -e^[TPD] | grep -e Cls=e0 -B1 -A1
T: Bus=02 Lev=02 Prnt=03 Port=00 Cnt=01 Dev#= 4 Spd=12 MxCh= 0
D: Ver= 1.10 Cls=e0(unk. ) Sub=01 Prot=01 MxPS=64 #Cfgs= 1
P: Vendor=0a12 ProdID=0001 Rev= 5.25
# lsusb
Bus 003 Device 002: ID 046d:c00e Logitech, Inc. Optical Mouse
Bus 003 Device 001: ID 0000:0000
Bus 002 Device 002: ID 0db0:1967 Micro Star International Bluetooth Dongle
|
4.
BlueZ - Bluetoothスタック
BlueZのインストール
カーネルにデバイスが認識されたら、次に、アプリケーションにBluetoothデバイスとの通信を実現するにするレイヤが必要です。
BlueZは公式のLinux Bluetoothスタックを提供します。
bluez-libsとbluez-utilsの2つのebuildが必要な機能を提供します。
Broadcom社のファームウェアのファイルや同様のものを必要とするデバイスはbluez-firmwareが必要でしょう。
コード表示 4.1: bluez-libsとbluez-utilsをインストール |
# emerge net-wireless/bluez-libs net-wireless/bluez-utils
|
BlueZの設定とペアリング
ここで、Bluetoothデバイスがシステムに正しく認識されているか確認してみます。
先に必要なBluetoothサービスを開始します。
コード表示 4.2: hciconfigを起動 |
# /etc/init.d/bluetooth start
* Starting Bluetooth ...
* Starting hcid ... [ ok ]
* Starting sdpd ... [ ok ]
* Starting rfcomm ... [ ok ]
# hciconfig
hci0: Type: USB
BD Address: 00:01:02:03:04:05 ACL MTU: 192:8 SCO MTU: 64:8
DOWN
RX bytes:131 acl:0 sco:0 events:18 errors:0
TX bytes:565 acl:0 sco:0 commands:17 errors:0
|
これはBluetoothデバイスが認識されていることを示します。
デバイスがDOWNとなっていることに気づいたかもしれません。
これからそれをUPにするために設定しましょう。
設定ファイルは/etc/bluetooth/hcid.confにあります。
設定ファイルの中で変更する必要がある箇所は以下のとおりです。
その他の詳細についてはman hcid.confを参照してください。
コード表示 4.3: /etc/bluetooth/hcid.confを編集 |
# HCIdのオプション
options {
# 新しいデバイスを自動で初期化
autoinit yes;
# セキュリティマネージャのモード
# none - セキュリティマネージャを無効化
# auto - 外部からの接続にローカルのパスキー(PINコード)を使用
# user - 常にユーザにパスキー(PINコード)を問い合わせ
#
security auto;
# ペアリングのモード
pairing multi;
# PINヘルパー
pin_helper /etc/bluetooth/pin-helper;
}
# HCIデバイスのデフォルト設定
device {
# ローカルデバイス名
# %d - デバイスID
# %h - ホスト名
name "BlueZ at %h (%d)";
# ローカルデバイスクラス
class 0x3e0100;
# 他のデバイスからの検出の許可(Inquiry scan: iscan)と接続の受け付け(Page scan: pscan)
iscan enable; pscan enable;
# デフォルトのリンクモード
lm accept;
# デフォルトのリンクポリシー
lp rswitch,hold,sniff,park;
# 認証と暗号化(セキュリティモード3)
#auth enable;
#encrypt enable;
}
|
その後に、Bluetoothデバイスのパスキー(PINコード)を設定する必要があります。
これは他のデバイスとペアリングさせる際に役に立ちます。
コード表示 4.4: /etc/bluetooth/pinを編集 |
123456
|
重要:
ここで設定した番号は、ペアリングできるようにする、Bluetoothデバイスを備えるすべてのホストで一致していなくてはなりません。
また、この番号を知るいかなる人物も、この番号が設定されたデバイスに基本的に接続することができてしまうので、この番号は 秘密にされなくてはなりません。
|
注意:
<=bluez-libs-2.xと<=bluez-utils-2.xを使用しているのであれば、
複数のPINヘルパーの中から使用するものを選択することができます。
使用できるPINヘルパーは/usr/lib/kdebluetooth/kbluepin
(net-wireless/kdebluetooth)か/usr/bin/bluepinまたは/etc/bluetooth/pin-helperに限られます。
|
注意:
>=bluez-libs-3.xと>=bluez-utils-3.xからは、PINヘルパーはパスキーエージェントによって置き換えられました。
bluez-gnomeやkdebluetoothなどの、パスキー(PINコード)の管理の手助けをする視覚的なパスキーエージェントがいくつかあります。
また、コマンドラインからはbluez-utilsに含まれるpasskey-agentを使うこともできます。
|
サービスの設定
BlueZの構成を完了したら、必要なサービスを再起動しましょう。
コード表示 4.5: Bluetoothデーモンの開始 |
# /etc/init.d/bluetooth restart
# rc-update add bluetooth default
* bluetooth added to runlevel default
* rc-update complete.
|
Bluetoothデーモンが正しく起動されたか確認してください。
hcidとsdpdが実行中であるなら、Bluetoothは正しく構成されています。
ここまでできれば、デバイスが構成された設定どおりに動作中であるかどうか確認できます。
コード表示 4.6: Bluetoothデーモンが正しく起動されたか確認 |
# ps -ae | grep hcid
26050 ? 00:00:00 hcid
# ps -ae | grep sdpd
26054 ? 00:00:00 sdpd
# hciconfig -a
hci0: Type: USB
BD Address: 00:0A:0B:0C:0D:0E ACL MTU: 192:8 SCO MTU: 64:8
UP RUNNING PSCAN ISCAN
RX bytes:125 acl:0 sco:0 events:17 errors:0
TX bytes:565 acl:0 sco:0 commands:17 errors:0
Features: 0xff 0xff 0x0f 0x00 0x00 0x00 0x00 0x00
Packet type: DM1 DM3 DM5 DH1 DH3 DH5 HV1 HV2 HV3
Link policy: RSWITCH HOLD SNIFF PARK
Link mode: SLAVE ACCEPT
Name: 'BlueZ at bluehat (0)'
Class: 0x3e0100
Service Classes: Networking, Rendering, Capturing, Object Transfer,
Audio
Device Class: Computer, Uncategorized
HCI Ver: 1.1 (0x1) HCI Rev: 0x1e7 LMP Ver: 1.1 (0x1) LMP Subver: 0x1e7
Manufacturer: Cambridge Silicon Radio (10)
|
5.
リモートデバイスの検出と接続
他のホストのBluetoothデバイスの検出
この時点で、他の機器に取り付けられたBluetoothデバイスを検出する準備ができています。
この操作はホストOSとは無関係です。これにはhcitoolコマンドを使います。
コード表示 5.1: ローカルデバイスを確認 |
# hcitool dev
Devices:
hci0 00:01:02:03:04:05
|
コード表示 5.2: リモートデバイスを検索しデバイス名を表示 |
# hcitool scan
Scanning ...
00:0A:0B:0C:0D:0E Grayhat
|
コード表示 5.3: リモートデバイスを検索しクロックオフセットとクラスを表示 |
# hcitool inq
Inquiring ...
00:0A:0B:0C:0D:0E clock offset: 0x5579 class: 0x72010c
|
リモートBluetoothデバイスのMACアドレスを知ることができたので、そららが正しくペアリングできているか確認します。
コード表示 5.4: l2pingを実行 |
# l2ping 00:0A:0B:0C:0D:0E
Ping: 00:0A:0B:0C:0D:0E from 00:01:02:03:04:05 (data size 20) ...
20 bytes from 00:0A:0B:0C:0D:0E id 200 time 69.85ms
20 bytes from 00:0A:0B:0C:0D:0E id 201 time 9.97ms
20 bytes from 00:0A:0B:0C:0D:0E id 202 time 56.86ms
20 bytes from 00:0A:0B:0C:0D:0E id 203 time 39.92ms
4 sent, 4 received, 0% loss
|
RFCOMMの構成
rfcommコマンドを使うことでBluetoothデバイス間のRFCOMM接続が可能になります。
特にBluetoothをサポートするデバイスをいくつも持っているようなユーザにとっては、
/etc/bluetooth/rfcomm.confにあるrfcommのデフォルトの設定を変更することが賢明でしょう。
rfcomm0{で始まり}で終わる区切りの中のすべての内容は、
/dev/rfcomm0に関連付けられるデバイスのものです。
今回は、rfcomm0の場合の例のみをあげます。
環境にあわせてより多くのデバイスを追加することもできます。
コード表示 5.5: /etc/bluetooth/rfcomm.confを編集 |
rfcomm0 {
# 起動時にデバイスを割り当て
bind yes;
# デバイスのBluetoothアドレス
device 00:0A:0B:0C:0D:0E;
}
|
RFCOMMの設定構成が終われば、あらゆるデバイスに接続することができます。
必要な設定を/etc/bluetooth/rfcomm.confに記述したため、以下のコマンドを実行するだけでよいのです。
設定ファイルを編集していない場合のための代替手段も続けて示されています。
コード表示 5.6: RFCOMM接続を確立 |
# rfcomm connect 0
Connected /dev/rfcomm0 to 00:0A:0B:0C:0D:0E on channel 1
Press CTRL-C for hangup
# rfcomm connect 0 00:0A:0B:0C:0D:0E 1
Connected /dev/rfcomm0 to 00:0F:DE:69:50:24 on channel 1
Press CTRL-C for hangup
|
connectコマンドの後の最初のパラメータは、使用するRFCOMM TTYデバイスノードです(多くの場合は0)。
2つ目のパラメータは、リモートデバイスのMACアドレスです。3つめのパラメータは任意で、使用するチャネルを指定します。
デバイスに接続する場合は、接続先のデバイスが外部からの接続を受け付けていなくてはならないことに注意してください。
そのためには、接続を受け付けるように明示的に指示する必要があります。接続はCTRL+Cを押すだけで中止できます。
コード表示 5.7: RFCOMM接続を受け付け |
# rfcomm listen 0 1
Waiting for connection on channel 1
|
listenコマンドは、connectコマンドと同じような2つのパラメータを取ることができます。
1つ目は接続の受付に使用するRFCOMM TTYデバイスを指定し(多くの場合は0)、2つ目は接続を受け付けるチャネルを指定します。
rfcommコマンドを実行する際に、どの物理デバイスを使用するかを指定することもできます。
物理デバイスを指定して上記の2つのコマンドを利用する一例を以下にあげておきます。
コード表示 5.8: 物理デバイスを指定した上でRFCOMM接続を利用 |
# rfcomm -i hci0 listen 0 1
Waiting for connection on channel 1
# rfcomm -i hci0 connect 0 00:0A:0B:0C:0D:0E 1
|
パーソナルエリアネットワーク(PAN)の構成
注意:
PANの構成は任意です。このセクションでは、
ネットワークアクセスポイント(NAP)の設定とNAPへの接続の手順について説明しますが、
グループアドホックネットワーク(GN)も同じような手順で構築できます。
|
まず最初に、bnepモジュールをロードする必要があります。
これはコンピュータの起動のたびにロードしなくてはならないでしょう。
コード表示 5.9: bnepモジュールをロード |
# modprobe bnep
# echo "bnep" >> /etc/modules.autoload.d/kernel-2.6
|
NAPを提供するホストではpandデーモンを開始する必要があります。
また、NAPサービスを提供することと、このホストがマスタになることを明記します。
従って他のホストには、スレーブとしてマスタに接続することを明記します。
他に使用可能なサービスにはGN(グループアドホックネットワーク)があります。
コード表示 5.10: pandデーモンを開始 |
# pand --listen --role NAP --master --autozap
|
これで接続を受け入れるホストができたので、残りのホストはそれに接続するだけです。
コード表示 5.11: NAPへ接続 |
# pand --connect 00:0A:0B:0C:0D:0E --service NAP --autozap
|
すべてうまくいけば、ホストのIPアドレスを設定することができます。
コード表示 5.12: bnepのIPアドレスを設定 |
host0 # ifconfig bnep0 192.168.2.1
host1 # ifconfig bnep0 192.168.2.2
host0 # ifconfig bnep0
bnep0 Link encap:Ethernet HWaddr 00:0A:0B:0C:0D:0E
inet addr:192.168.2.1 Bcast:192.168.2.255 Mask:255.255.255.0
inet6 addr: fe80::210:60ff:fea3:cb41/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:5 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:208 (208.0 b) TX bytes:188 (188.0 b)
host1 # ifconfig bnep0
bnep0 Link encap:Ethernet HWaddr 00:01:02:03:04:05
inet addr:192.168.2.2 Bcast:192.168.2.255 Mask:255.255.255.0
inet6 addr: fe80::210:60ff:fea2:dd2a/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:5 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:208 (208.0 b) TX bytes:188 (188.0 b)
|
最後に、ネットワークが正しく動作してるか確認するために簡単なテストを行うことができます。
コード表示 5.13: bnepインタフェース間でIP pingを実行 |
host1 # ping 192.168.2.1
PING 192.168.2.1 (192.168.2.1) 56(84) bytes of data.
64 bytes from 192.168.2.1: icmp_seq=1 ttl=64 time=34.0 ms
64 bytes from 192.168.2.1: icmp_seq=2 ttl=64 time=37.3 ms
--- 192.168.2.1 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1000ms
rtt min/avg/max/mdev = 34.045/35.690/37.336/1.656 ms
|
6.
Bluetooth用のデスクトップアプリケーション
はじめに
デスクトップで動作するBluetoothアプリケーションはかなり多く、この章は3つに分かれています。
Gnome用、KDE用、そしてその他のアプリケーションです。
Gnome用
Gnomeユーザであれば、ほとんどの場合gnome-bluetoothを使うことでしょう。
これは、以下にあるように、最も基本的でよく使われる機能を提供します。
-
gnome-bluetooth-manager: リモートBluetoothデバイスを管理します。
-
gnome-obex-send: 他のデバイスにファイルを送信します。
-
gnome-obex-server: ファイルを受信します。
コード表示 6.1: gnome-bluetoothをインストール |
# emerge gnome-bluetooth
|
これをインストールすると、アプリケーション->システムツールに、
マネージャやファイル共有を簡単に開始するためのメニューエントリが追加されます。
簡単にファイルを転送する:
-
携帯電話からコンピュータへ - Bluetoothを使って携帯電話からファイルを送信すると、
常にあなたの/homeに保存されるでしょう。
gnome-phone-managerはあなたのコンピュータだけを使って、
メッセージを送信したり受信するためのすばらしいツールです。
このアプリケーションを使えば、携帯電話に触らずにメッセージを読んだり送ったりすることができます。
また、設定を有効にすれば新着メッセージを画面に表示して知らせることもできます。
インストールはとても簡単です。
コード表示 6.2: gnome-phone-managerをインストール |
# emerge gnome-phone-manager
|
KDE用
KDEはkdebluetoothを利用して、以下のようにGnomeに対応する部分に比べて多くのユーティリティを提供します。
-
kbluetoothd: Bluetoothメタサーバ
-
kbtsearch: Bluetoothデバイス・サービス検索ユーティリティ
-
khciconfig: KDE Bluetoothモニタ
-
kioclient: KIOコマンドラインクライアント
-
qobexclient: obexテスト・開発用の高度なクライアント
-
kbtobexclient: KDE Bluetoothフレームワークアプリケーション
- kioobex_start
- kbtserialchat
-
kbemusedsrv: KDE Bemusedサーバ
-
kbtobexsrv: KDE Bluetooth用OBEX Pushサーバ
-
kbluepin: KDE KPartアプリケーション
-
auth-helper: 与えられたACLリンクに対して認証要求を送信する、kbtobexsrvのためのヘルパーです。
コード表示 6.3: kdebluetoothをインストール |
# emerge kdebluetooth
|
その他のアプリケーション
-
app-mobilephone/obexftp: 携帯電話用OBEXファイル転送ソフト
-
app-mobilephone/bemused: Bemusedは音楽のコレクションをBluetoothを使って携帯電話から管理するためのシステムです。
-
Multisyncを使うと携帯電話とコンピュータとの間でBluetoothやその他の接続方法を使って、
電話帳やカレンダーの項目、そしてメモを同期することができます。
これらの情報のバックアップや復元をしたり、Evolution電子メールクライアントと同期したりする機能もあります。
multisyncにBluetoothをサポートさせるためにはirmc USEフラグを設定する必要があります。
-
net-wireless/opdとnet-wireless/ussp-pushは、
携帯電話にファイルを送信するための、コマンドラインのサーバとクライアントです。
7.
謝辞
Bluetoothでの開発に時間を割いて貢献し、このガイドの査読を行ったMarcel Holtmannに心から感謝します。
また、追加のハードウェアテストを行い、このガイドを改良したDouglas Russellにも大いに感謝します。
このドキュメントの内容は
Creative Commons -
Attribution / Share Alikeライセンスです。
|