Gentoo Logo

Gentoo Linux Bluetoothガイド

Content:

1.  はじめに

Bluetoothとは

BluetoothはパーソナルコンピュータやPDA、携帯電話などを相互接続するための通信規格です。 Bluetoothを使うことで、デバイス間の無線での音声及びデータの通信が低いコストで利用可能となります。 さらに、Bluetoothで小さな無線LANを構築することも、機器を同期することもできます。

このガイドの内容について

初めに、どのBluetoothデバイスが適切であるかを確認する方法を説明します。 これによって、ユーザは動作することが確認されているデバイスを購入することができます。 その後に、システムカーネルの構成の手順や、システムに取り付けられているかカーネルに認識されているBluetoothデバイスを確認する方法、 そして必要なBluetooth用基本ツールをインストールする方法を解説します。

次に、リモートデバイスを認識させる手順と、 RFCOMMまたはパーソナルエリアネットワーク(PAN)を構成することでデバイス間の接続を確立する手順を解説します。

ガイドの最後では、Bluetooth技術を使うことができるアプリケーションを詳しく紹介しています。

2.  サポートされているデバイス

Bluetoothをサポートする認可を受けたデバイスと受けていないデバイス

Important: 認可を受けていないBluetooth製品も動作することがありますが、Gentooでサポートされることはありません。 それらのデバイスはただ動作する「かもしれない」だけなのです。 (訳注:Bluetooth SIGによる認可のことを指しているようです。市場に出回っている製品は普通は認可されています。)

サポートされているデバイスの一覧はこちらにあります。 Marcel HoltmannによるBluetoothデバイスの機能とリビジョン情報(英語) (訳注:このリストはLinuxに正式に動作するデバイスのリストとして使われているようです。)

3.  システムの構成

カーネルの構築

最新の安定版Linuxカーネルは2.6なので、2.6系列のカーネルを使って説明します。 多くのBluetoothデバイスはUSBポートに接続されるので、USBも有効にする必要があるでしょう。Gentoo Linux USBガイド(日本語訳)も参考にしてください。

Code Listing 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
(以下の4つのドライバはPCMCIA Bluetoothデバイスのもので、
カーネルのPCMCIAサポートを有効にした場合にのみ表示されます。)
<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
(以下のドライバはHCIエミュレーションソフトウェアのためのものです。)
<M> HCI VHCI (Virtual HCI device) driver

(Device Driversまで3レベル戻り、USBが有効になっているか確認します。
これは、BluetoothドングルがUSBベースである場合が多いためです。)
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対応のシステムが手に入るでしょう。

Important: USBデバイスには2つのモードがあることが多く、デフォルトモードは大概HCIではなくHIDでしょう。 これに該当するならば、hid2hciを使ってHCIモードに設定してください。 この変更はリブートによってリセットされます。

Code Listing 3.2: Bluetoothデバイスを確認

(デバイスをチェックする方法の一つ)
# cat /proc/bus/usb/devices | grep -e^[TPD] | grep -e Cls=e0 -B1 -A1
("Cls=e0(unk. )"はBluetoothデバイスを識別するためにあります。)
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
(sys-apps/usbutilsに含まれるlsusbが何かを示すかもしれません。)
# 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-libsbluez-utilsの2つのebuildが必要な機能を提供します。 Broadcom社のファームウェアのファイルや同様のものを必要とするデバイスはbluez-firmwareが必要でしょう。

Code Listing 4.1: bluez-libsとbluez-utilsをインストール

# emerge net-wireless/bluez-libs net-wireless/bluez-utils

BlueZの設定とペアリング

ここで、Bluetoothデバイスがシステムに正しく認識されているか確認してみます。 先に必要なBluetoothサービスを開始します。

Code Listing 4.2: hciconfigを起動

(Bluetoothを開始)
# /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を参照してください。

Code Listing 4.3: /etc/bluetooth/hcid.confを編集

(設定ファイルへの推奨される変更を示しています)

# HCIdのオプション
options {
        # 新しいデバイスを自動で初期化
        autoinit yes;

(securityを"auto"に変更します)
        # セキュリティマネージャのモード
        #   none - セキュリティマネージャを無効化
        #   auto - 外部からの接続にローカルのパスキー(PINコード)を使用
        #   user - 常にユーザにパスキー(PINコード)を問い合わせ
        #
        security auto;

        # ペアリングのモード
        pairing multi;

(<=bluez-libs-2.xと<=bluez-utils-2.xを使用している場合のみPINヘルパーを必要とします。)
(pin_helperの値を/etc/bluetooth/pin-helperに変更します)
        # 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コード)を設定する必要があります。 これは他のデバイスとペアリングさせる際に役に立ちます。

Code Listing 4.4: /etc/bluetooth/pinを編集

("123456"をお好みのパスキー(PINコード)に置き換えてください。)
123456

Important: ここで設定した番号は、ペアリングできるようにする、Bluetoothデバイスを備えるすべてのホストで一致していなくてはなりません。 また、この番号を知るいかなる人物も、この番号が設定されたデバイスに基本的に接続することができてしまうので、この番号は 秘密にされなくてはなりません。

Note: <=bluez-libs-2.x<=bluez-utils-2.xを使用しているのであれば、 複数のPINヘルパーの中から使用するものを選択することができます。 使用できるPINヘルパーは/usr/lib/kdebluetooth/kbluepin (net-wireless/kdebluetooth)か/usr/bin/bluepinまたは/etc/bluetooth/pin-helperに限られます。

Note: >=bluez-libs-3.x>=bluez-utils-3.xからは、PINヘルパーはパスキーエージェントによって置き換えられました。 bluez-gnomekdebluetoothなどの、パスキー(PINコード)の管理の手助けをする視覚的なパスキーエージェントがいくつかあります。 また、コマンドラインからはbluez-utilsに含まれるpasskey-agentを使うこともできます。

サービスの設定

BlueZの構成を完了したら、必要なサービスを再起動しましょう。

Code Listing 4.5: Bluetoothデーモンの開始

# /etc/init.d/bluetooth restart
(defaultランレベルに追加することもできます。)
# rc-update add bluetooth default
 * bluetooth added to runlevel default
 * rc-update complete.

Bluetoothデーモンが正しく起動されたか確認してください。 hcidsdpdが実行中であるなら、Bluetoothは正しく構成されています。 ここまでできれば、デバイスが構成された設定どおりに動作中であるかどうか確認できます。

Code Listing 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コマンドを使います。

Code Listing 5.1: ローカルデバイスを確認

# hcitool dev
Devices:
        hci0    00:01:02:03:04:05

Code Listing 5.2: リモートデバイスを検索しデバイス名を表示

# hcitool scan
Scanning ...
        00:0A:0B:0C:0D:0E       Grayhat

Code Listing 5.3: リモートデバイスを検索しクロックオフセットとクラスを表示

# hcitool inq
Inquiring ...
        00:0A:0B:0C:0D:0E       clock offset: 0x5579    class: 0x72010c

リモートBluetoothデバイスのMACアドレスを知ることができたので、そららが正しくペアリングできているか確認します。

Code Listing 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の構成

Note: RFCOMMの構成は任意です。

rfcommコマンドを使うことでBluetoothデバイス間のRFCOMM接続が可能になります。 特にBluetoothをサポートするデバイスをいくつも持っているようなユーザにとっては、 /etc/bluetooth/rfcomm.confにあるrfcommのデフォルトの設定を変更することが賢明でしょう。

rfcomm0{で始まり}で終わる区切りの中のすべての内容は、 /dev/rfcomm0に関連付けられるデバイスのものです。 今回は、rfcomm0の場合の例のみをあげます。 環境にあわせてより多くのデバイスを追加することもできます。

Code Listing 5.5: /etc/bluetooth/rfcomm.confを編集

(変更が必要であるかもしれない箇所のみを示しています)
rfcomm0 {
        # 起動時にデバイスを割り当て
        (起動時にデバイスノード/dev/rfcomm0を作成します)
        bind yes;

        # デバイスのBluetoothアドレス
        (接続したいデバイスのアドレスを入力します)
        device 00:0A:0B:0C:0D:0E;

}

RFCOMMの設定構成が終われば、あらゆるデバイスに接続することができます。 必要な設定を/etc/bluetooth/rfcomm.confに記述したため、以下のコマンドを実行するだけでよいのです。 設定ファイルを編集していない場合のための代替手段も続けて示されています。

Code Listing 5.6: RFCOMM接続を確立

("0"は設定ファイルの中のrfcomm0を参照させています)
# rfcomm connect 0 
Connected /dev/rfcomm0 to 00:0A:0B:0C:0D:0E on channel 1
Press CTRL-C for hangup

(/etc/bluetooth/rfcomm.confを変更していない場合)
# 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を押すだけで中止できます。

Code Listing 5.7: RFCOMM接続を受け付け

# rfcomm listen 0 1
Waiting for connection on channel 1

listenコマンドは、connectコマンドと同じような2つのパラメータを取ることができます。 1つ目は接続の受付に使用するRFCOMM TTYデバイスを指定し(多くの場合は0)、2つ目は接続を受け付けるチャネルを指定します。

rfcommコマンドを実行する際に、どの物理デバイスを使用するかを指定することもできます。 物理デバイスを指定して上記の2つのコマンドを利用する一例を以下にあげておきます。

Code Listing 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)の構成

Note: PANの構成は任意です。このセクションでは、 ネットワークアクセスポイント(NAP)の設定とNAPへの接続の手順について説明しますが、 グループアドホックネットワーク(GN)も同じような手順で構築できます。

まず最初に、bnepモジュールをロードする必要があります。 これはコンピュータの起動のたびにロードしなくてはならないでしょう。

Code Listing 5.9: bnepモジュールをロード

# modprobe bnep
# echo "bnep" >> /etc/modules.autoload.d/kernel-2.6

NAPを提供するホストではpandデーモンを開始する必要があります。 また、NAPサービスを提供することと、このホストがマスタになることを明記します。 従って他のホストには、スレーブとしてマスタに接続することを明記します。 他に使用可能なサービスにはGN(グループアドホックネットワーク)があります。

Code Listing 5.10: pandデーモンを開始

# pand --listen --role NAP --master --autozap

これで接続を受け入れるホストができたので、残りのホストはそれに接続するだけです。

Code Listing 5.11: NAPへ接続

# pand --connect 00:0A:0B:0C:0D:0E --service NAP --autozap

すべてうまくいけば、ホストのIPアドレスを設定することができます。

Code Listing 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)

最後に、ネットワークが正しく動作してるか確認するために簡単なテストを行うことができます。

Code Listing 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: ファイルを受信します。

Code Listing 6.1: gnome-bluetoothをインストール

# emerge gnome-bluetooth

これをインストールすると、アプリケーション->システムツールに、 マネージャやファイル共有を簡単に開始するためのメニューエントリが追加されます。

簡単にファイルを転送する:

  • 携帯電話からコンピュータへ - Bluetoothを使って携帯電話からファイルを送信すると、 常にあなたの/homeに保存されるでしょう。

gnome-phone-managerはあなたのコンピュータだけを使って、 メッセージを送信したり受信するためのすばらしいツールです。 このアプリケーションを使えば、携帯電話に触らずにメッセージを読んだり送ったりすることができます。 また、設定を有効にすれば新着メッセージを画面に表示して知らせることもできます。 インストールはとても簡単です。

Code Listing 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のためのヘルパーです。

Code Listing 6.3: kdebluetoothをインストール

# emerge kdebluetooth

その他のアプリケーション

  • app-mobilephone/obexftp: 携帯電話用OBEXファイル転送ソフト
  • app-mobilephone/bemused: Bemusedは音楽のコレクションをBluetoothを使って携帯電話から管理するためのシステムです。
  • Multisyncを使うと携帯電話とコンピュータとの間でBluetoothやその他の接続方法を使って、 電話帳やカレンダーの項目、そしてメモを同期することができます。 これらの情報のバックアップや復元をしたり、Evolution電子メールクライアントと同期したりする機能もあります。 multisyncにBluetoothをサポートさせるためにはirmc USEフラグを設定する必要があります。
  • net-wireless/opdnet-wireless/ussp-pushは、 携帯電話にファイルを送信するための、コマンドラインのサーバとクライアントです。

7.  謝辞

Bluetoothでの開発に時間を割いて貢献し、このガイドの査読を行ったMarcel Holtmannに心から感謝します。 また、追加のハードウェアテストを行い、このガイドを改良したDouglas Russellにも大いに感謝します。



Print

Updated October 21, 2007

This translation is not maintained anymore

Summary: このガイドには、Bluetoothデバイスをホストに導入しカーネルを正しく構成する手順が書かれています。 さらに、Blutooth技術にできることやBlutoothの使い方も紹介します。

Ioannis Aslanidis
Author

Douglas Russell
Contributor

Marcel Holtmann
Contributor

Shyam Mani
Author

Łukasz Damentko
Editor

田中 裕也
翻訳

Donate to support our development efforts.

Support OSL

Support OSL

Gentoo Centric Hosting: vr.org

VR Hosted

Tek Alchemy

Tek Alchemy

SevenL.net

SevenL.net

Global Netoptex Inc.

Global Netoptex Inc.

Bytemark

Bytemark

Copyright 2001-2008 Gentoo Foundation, Inc. Questions, Comments? Contact us.