34.2 Bluetooth

Bluetoothは、各種デバイス(携帯電話、PDA、周辺装置、ラップトップなど)やシステムコンポーネント(キーボードやマウスなど)の接続に使用される無線テクノロジです。このテクノロジ名は、スカンジナビア紛争でさまざまな対立党派を統一したデンマーク王Harold Bluetoothに由来しています。Bluetoothのロゴは、「H」 (星型)と「B」を表すルーン文字に基づいています。

BruetoothをIrDAと比較すると、さまざまな側面に重要な違いがあります。まず初めに個々のデバイスが相互を直接「認識」する必要がなく、次に複数のデバイスをネットワーク上で接続することができます。ただし、最大データ転送速度は720Kbps (現行バージョン1.2の場合)です。理論上、Bluethoothは壁を隔てた通信が可能です。ただし、実際には壁の性質やデバイスクラスに依存します。10mから100mの通信範囲に、3つのデバイスクラスがあります。

34.2.1 基本事項

ここではBluetoothの機能に関する基本原則一般について概説します。必要なソフトウェア要件、Bluetoothによるシステムとの対話方法、Bluetoothプロファイルの機能などについて説明します。

34.2.1.1 ソフトウェア

Bluetoothを使用するためには、Bluetoothアダプタ(内蔵アダプタまたは外部デバイス)、ドライバ、およびBluetoothプロトコルスタックが必要です。Linuxカーネルには、すでにBluetooth用の基本ドライバが組み込まれています。Bluezシステムがプロトコルスタックとして使用されます。アプリケーションをBluetoothと確実に機能させるためには、基本パッケージbluez-libsおよびbluez-utilsをインストールする必要があります。この2つのパッケージには、必須サービスとユーティリティが多数用意されています。また、BroadcomAVM BlueFritz!など、bluez-firmwareパッケージのインストールを必要とするアダプタもあります。bluez-cupsパッケージは、Bluetooth接続を介した印刷処理を可能にします。Bluetooth接続の問題をデバッグする必要がある場合は、bluez-hcidumpパッケージをインストールします。

34.2.1.2 一般的な相互作用

Bluetoothシステムは、必要な機能を提供する、4種類の関連するレイヤーから構成されています。

ハードウェア

ハードウェアアダプタと、Linuxカーネルによるサポートに適したドライバです。

設定ファイル

Bluetoothシステムの制御に使用されます。

デーモン

設定ファイルにより制御されるサービスで、各種機能を提供します。

アプリケーション

アプリケーションにより、ユーザはデーモンが提供する機能を使用、および制御できます。

Bluetoothアダプタを挿入すると、ホットプラグシステムによりそのドライバがロードされます。ドライバがロードされた後、システムは設定ファイルを検査してBluetoothを起動する必要があるかどうかを確認します。起動を必要とする場合は、どのサービスを起動するかが判別されます。この情報に基づいて、関連デーモンが起動されます。Bluetoothアダプタはインストール中に認識されます。1つ以上のアダプタが検出されると、Bluetoothを有効にします。ここで検出されない場合は、Bluetoothシステムは無効のままになります。そのため後から追加されたBluetoothデバイスは手動で有効にする必要があります。

34.2.1.3 プロファイル

Bluetoothでは、プロファイルによってサービスが定義されます。プロファイルには、ファイル転送プロファイル、基本印刷プロファイル、およびパーソナルエリアネットワークプロファイルなどがあります。デバイスパッケージやマニュアルで、この情報について説明されていないことがよくありますが、他方のデバイスのサービスを使用できるように設定するには、双方のデバイスが同じプロファイルを認識する必要があります。残念ながら、メーカが個々のプロファイルの定義に厳密に準拠していない場合もあります。こうした背景にもかかわらず、デバイス間の通信は通常、円滑に行われます。

次の説明で、ローカルデバイスとはコンピュータに物理的に接続された状態のデバイスを指します。アクセスに無線接続を必要とする他のデバイスはすべて、リモートデバイスと呼びます。

34.2.2 環境設定

ここではBluetoothの設定について説明します。関係する各種設定ファイル、必要な各種ツール、を使用して、または手動によるBluetoothの設定方法について解説します。

34.2.2.1 YaSTによるBluetoothの設定

YaST Bluetoothモジュール(図 34.2. 「YaSTのBluetooth 設定」を参照)を使用して、システム上でBluetoothサポートを設定します。ホットプラグがシステム上でBluetoothを検出すると、(たとえば、ブート中アダプタをプラグインした場合)、このモジュールで設定された値を使用して、Bluetoothが自動的に起動されます。

図 34.2 YaSTのBluetooth 設定

YaSTのBluetooth 設定

最初の設定ステップでは、システムでBluetoothサービスを開始する必要があるかどうかを決定します。Bluetoothサービスが有効になっている場合、次の2つを設定できます。最初は[デバイス名]です。この名前はご使用のコンピュータが他のデバイスに検出された場合に、他のデバイス側に表示されるデバイス名です。これには次の2種類のプレースホルダを組み合わせることも可能です。%hはシステムのホスト名を表します(たとえば、DHCPによって動的に割り当てられる場合に有用)。%dはインタフェース番号を指定します。(ご使用のコンピュータに複数のBluetoothアダプタがある場合にのみ有用)。たとえば、フィールドにLaptop %hと入力し、ご使用のコンピュータがDHCPからunit123を割り当てられた場合、他のリモートデバイスはご使用のコンピュータをLaptop unit123として識別します。

[Securty Manager (セキュリティマネージャ)]パラメータは、リモートデバイスからの接続を検知した場合にローカルシステムがどのように対処するか、ということに関係しています。違いはPIN番号の取り扱いです。PINなしですべてのデバイスに接続を許可するか、PINが必要な場合に正しいPINが指定されたかを判別します。PIN (設定ファイルに格納)は、適切な入力フィールドに指定できます。あるデバイスが接続を試みた場合、最初にこのPINが使用されます。ここで認証に失敗すると、PINを使用しないように変更されます。セキュリティを高めるためには、[Always ask user for PIN(常時ユーザにPINを確認する)]を指定するのが最善と言えます。このオプションにより、異なる(リモート)デバイスに対して別のPINを使用できるようになります。

次に[拡張デーモン設定]をクリックすると、使用可能なサービス(Bluetoothではプロファイル)の選択および設定用ダイアログが表示されます。使用可能なサービスがすべてリストに表示されます。ここでは[有効にする]または[無効にする]をクリックしてサービスを有効または無効にすることができます。[編集]をクリックするとダイアログが開き、選択したサービス(デーモン)に対する引数を追加指定できます。変更は、サービスを十分に理解している場合にのみ行ってください。デーモンの設定を完了後に、[了解]をクリックしてこのダイアログを終了します。

メインダイアログに戻り、[セキュリティオプション]をクリックしてセキュリティダイアログを表示し、暗号化、認証、およびスキャン設定を行います。次に、セキュリティダイアログを終了してメインダイアログに戻ります。[Finish]をクリックしてメインダイアログを閉じると、Bluetoothシステムが使用可能になります。

メインダイアログから[デバイスおよびサービスクラス]ダイアログにも移動できます。各Bluetoothデバイスはさまざまなデバイスクラスに分類されています。このダイアログで[Desktop][Laptop]など、ご使用のコンピュータに適したデバイスクラスを選択してください。デバイスクラスは、ここで同時に設定できるサービスクラスとは異なり、それほど重要ではありません。携帯電話のようなリモートのBluetoothデバイスでは、相手のシステム上で適切なサービスクラスを検出できた場合にのみ使用できるようになる、特定の機能を備えている場合があります。これは多くの場合携帯電話に当てるケースです。携帯電話では「オブジェクト転送」と呼ばれるクラスを待機した後、コンピュータ間のファイル転送を許可します。ここでユーザは複数のクラスを選択できます。ただし、「念のため」とすべてのクラスを選択することは実用的ではありません。通常の場合はデフォルト設定で問題ありません。

Bluetoothを使用してネットワークをセットアップする場合は、[拡張デーモン設定]ダイアログで[PAND]を有効にし、編集でデーモンのモードを設定します。Bluetoothネットワーク接続を機能させるには、一方のpandが[ネットワーク接続(受信モード)]で動作し、ピアが[ネットワーク接続(検索モード)]で動作する必要があります。デフォルトでは、[ネットワークデーモンをリッスンモードに設定]モードが事前に設定されています。ローカルpandの動作を調整します。さらに、の[ネットワークカード]モジュールでbnepXインタフェース(Xはシステム内のデバイス番号)を設定します。

34.2.2.2 Bluetoothの手動設定

Bluezシステムの各コンポーネントの設定ファイルは、ディレクトリ/etc/bluetoothにあります。ただし、コンポーネント起動用のファイル/etc/sysconfig/bluetoothは、モジュールにより変更されます。

ここで説明する設定ファイルは、ユーザrootのみが変更できます。現在のところ、すべての設定を変更できるグラフィカルユーザインタフェースはありません。 Bluetoothモジュールを使用して指定できる最も重要な設定は34.2.2.1項 「YaSTによるBluetoothの設定」に記載されています。その他のすべての設定は経験のあるユーザ向けであり、特殊な場合以外、必要ではありません。通常、デフォルト設定はそのままで適切です。

PIN番号は、不正な接続を防止するための基本的な保護手段です。携帯電話は、最初に接続するときに(またはデバイスから電話への接続をセットアップするときに)、通常PIN番号を問い合わせます。2つのデバイスが通信を行うためには、両方が同じPIN番号で互いを識別する必要があります。コンピュータ上では、PINはファイル/etc/bluetooth/pinにあります。

[Important]Bluetooth接続のセキュリティ

PINを使用しても、2つのデバイス間の通信が完全に安全なわけではありません。デフォルトでは、Bluetooth接続の認証と暗号化は無効になっています。認証と暗号化を有効にすることで、結果的に一部のBluetoothデバイス間では、通信時の問題につながる可能性があります。

デバイス名やセキュリティモードなど、さまざまな設定を設定ファイル/etc/bluetooth/hcid.confで変更できます。通常、デフォルト設定はそのままで適切です。このファイルには、さまざまな設定のオプションを説明するコメントが含まれています。

インクルードファイルの2つのセクションがoptionsおよびdeviceとして指定されています。最初のセクションには、hcidで起動に使用される一般情報が含まれています。次のセクションには、個々のローカルBluetoothデバイスの設定が含まれています。

optionsセクションで最も重要な設定の1つがsecurity auto;です。autoに設定すると、hcidは着信接続にローカルPINを使用します。ローカルPINで接続に失敗すると、PINがnoneに切り替わり、いずれにしても接続を確立します。セキュリティレベルを高めるために、このデフォルト設定をuserに指定し、接続の確立時にユーザに対して必ずPINの入力を促すようにする必要があります。

deviceセクションでは、接続先のデバイスで表示される、このコンピュータの表示名を設定します。デバイスクラス(DesktopLaptopServerなど)も、このセクションで定義します。認証と暗号化も、ここで有効または無効にします。

34.2.3 システムコンポーネントとユーティリティ

Bluetoothの操作性は、さまざまなサービスとの対話に依存します。これには次のようなバックグラウンドデーモンが少なくとも2つ必要です。1つは、Bluetoothデバイスのインタフェースとして機能し、デバイスを制御するhcid(ホストコントローラインタフェースデーモン)、もう1つは、ホストが提供するサービスをデバイス側で確認するためのsdpd(サービスディスカバリプロトコルデーモン)です。システムを起動したときにこれらが自動的に有効になっていない場合は、rcbluetooth startを使用してhcidとsdpdを有効にできます。このコマンドは、rootとして実行する必要があります。

ここでは、Bluetoothの操作に使用できる最も重要なシェルツールについて説明します。現在、Bluetoothの制御に使用できるグラフィカルコンポーネントが多数出回ってはいますが、これらのツールプログラムについても調べてみるだけの価値はあります。

コマンドの中には、rootとしてのみ実行できるコマンドもあります。リモートデバイスのテストに使用するl2ping device_addressもそのようなコマンドの1つです。

34.2.3.1 hcitool

hcitoolは、ローカルおよびリモートのデバイスが検出されたかどうかを判断するために使用します。hcitool devコマンドを実行すると、ローカルデバイスが一覧表示されます。出力には、検出されたすべてのローカルデバイスについて、interface_name device_addressという形式で1行に1つのデバイスが表示されます。

コマンドhcitool inqを使用してリモートデバイスを検索します。検出されたすべてのデバイスについて、デバイスアドレス、クロックオフセット、およびデバイスクラスの3つの値が表示されます。デバイスアドレスは、他のコマンドでターゲットデバイスを識別するために使用する重要な値です。クロックオフセットは、主に技術的な目的で使用されます。クラスには、デバイスタイプとサービスタイプが16進数で指定されます。

コマンドhcitool name device-addressは、リモートデバイスのデバイス名を確認するために使用します。リモートコンピュータの場合、クラスとデバイス名は/etc/bluetooth/hcid.conf内の情報に対応します。ローカルデバイスのアドレスを指定すると、エラーが出力されます。

34.2.3.2 hciconfig

コマンド/usr/sbin/hciconfigを実行すると、ローカルデバイスの詳細情報が表示されます。引数を指定せずにhciconfigを実行すると、出力にはデバイス名(hciX)、物理デバイスアドレス(00:12:34:56:78形式の12桁の番号)などのデバイス情報と、伝送済みデータ量に関する情報が表示されます。

hciconfig hci0 nameを実行すると、リモートデバイスから要求を受信したときにコンピュータから戻される名前が表示されます。hciconfigは、ローカルデバイスの設定のクエリだけでなく、これらの設定の変更にも使用できます。たとえば、hciconfig hci0 name TESTを実行すると、名前がTESTに設定されます。

34.2.3.3 sdptool

プログラムsdptoolは、特定のデバイスでどのサービスが利用可能かを確認するために使用します。コマンドsdptool browse device_addressを実行すると、デバイスのすべてのサービスが一覧表示されます。コマンドsdptool search service_codeを使用して特定のサービスを検索します。このコマンドを実行すると、要求したサービスからアクセスできるすべてのデバイスがスキャンされます。そのデバイスのいずれかがサービスを提供している場合、プログラムはこのデバイスから返された(完全な)サービス名と簡単な説明を出力します。パラメータなしでsdptoolと入力することにより、提供されている全サービスコードの一覧を表示します。

34.2.4 グラフィックアプリケーション

Konquerorで、URLsdp:/を入力してローカルとリモートのBluetoothデバイスのリストを表示します。デバイスをダブルクリックすると、そのデバイスが提供するサービスの概要が表示されます。指定したサービスの1つにマウスを合わせると、そのサービスに使用されているプロファイルがブラウザのステータスバーに表示されます。サービスをクリックするとダイアログが開き、実行する操作を選択できます。保存、サービスの使用(アプリケーションの起動が必要)、またはアクションの取り消しのいずれかを選択します。ダイアログを再表示せず、選択したアクションを常に実行する場合は、チェックボックスをオンにします。一部、まだサポートが使用可能になっていないサービスや、追加パッケージのインストールを必要とするサービスがあります。

34.2.5 例

このセクションではBluetoothのシナリオとして想定される典型的な例を2つ取り上げます。最初の例では2つのホスト間でBluetooth経由のネットワーク接続がどのように確立されるかについて説明します。次の例ではコンピュータと携帯電話間の接続について説明します。

34.2.5.1 2台のホスト間のネットワーク接続

最初の例では、ホストH1H2の間にネットワーク接続が確立されます。この2つのホストのBluetoothデバイスアドレスはbaddr1baddr2(前述のように両方のホスト上でコマンドhcitool devを使用して判別)です。この2つのホストをIPアドレス192.168.1.3 (H1)および192.168.1.4 (H2)で識別する必要があります。

Bluetooth接続は、pand (パーソナルエリアネットワーキング)を使用して確立されます。次に示す各コマンドは、ユーザrootとして実行する必要があります。ここでは、Bluetooth固有のアクションを中心に説明し、ネットワークコマンドipの詳細は省略します。

pand -sを入力して、ホストH1でpandを起動します。次に、pand -c baddr1を使用することで、ホストH2での接続を確立できます。一方のホストでip link showと入力すると、使用可能なネットワークインタフェースのリストが表示されます。出力には、次のようなエントリが含まれています。

 bnep0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop qlen 1000 
 link/ether 00:12:34:56:89:90 brd ff:ff:ff:ff:ff:ff

出力には、00:12:34:56:89:90の代わりにローカルデバイスのアドレスbaddr1またはbaddr2が含まれているはずです。ここで、このインタフェースにIPアドレスを割り当て、有効にする必要があります。H1で、そのために以下の2つのコマンドを使用します。

ip addr add 192.168.1.3/24 dev bnep0
ip link set bnep0 up

H2で実行するコマンド:

ip addr add 192.168.1.4/24 dev bnep0
ip link set bnep0 up

これでH1は、H2からIP 192.168.1.3で、アクセスできます。コマンドssh 192.168.1.4を使用して、H1からH2にアクセスします(H2が、によってデフォルトで有効にされたsshdを実行していると仮定します)。コマンドssh 192.168.1.4は、一般ユーザとしても実行できます。

34.2.5.2 携帯電話からコンピュータへのデータ転送

2つ目の例では、携帯電話内蔵のデジタルカメラで撮った写真を、(マルチメディアメッセージの転送に必要になる余分なコストをかけずに)コンピュータに転送する方法を示します。携帯電話は機種によってメニュー構造が異なりますが、手順は通常、ほとんど同じです。必要であれば、携帯電話のマニュアルを参照してください。この例では、Sony Ericssonの携帯電話からラップトップに写真を転送する方法について説明します。サービスObex-Pushがコンピュータ上で利用でき、コンピュータが携帯電話からのアクセスを許可している必要があります。最初のステップでは、サービスをラップトップで利用できるようにします。電話からデータを取得するには、ラップトップ上で特別なサービスデーモンが実行している必要があります。ただし、kbluetoothパッケージがインストールされている場合、特別なデーモンは必要ありません。kbluetoothがインストールされていない場合は、bluez-utilsパッケージからのopdデーモンを使用します。次のコマンドでデーモンを起動します。

opd --mode OBEX --channel 10 --daemonize --path /tmp --sdp 

--sdp は、sdpd を使用してサービスを登録します。--path /tmp は、プログラムに対し、受信データの保存場所 (ここでは、/tmp) を指定します。書き込みアクセス権を持つ他のディレクトリを指定することもできます。

kbluetoothを使用する場合、ラップトップで写真を受信するとディレクトリを指定するように指示されます。

次に、携帯電話がコンピュータを認識するように設定する必要があります。これには、電話側で[Connect(接続)]メニューの[Bluetooth]を選択します。必要に応じて、[My devices(マイデバイス)]を選択する前に、[Turn On(オン)]をクリックします。[New device(新規デバイス)]を選択すると、携帯電話がラップトップを探査します。デバイスが検出されると、ディスプレイに名前が表示されます。ラップトップに関連付けられているデバイスを選択します。PINの入力を求められたら、/etc/bluetooth/pinに指定されているPINを入力します。これで、携帯電話がラップトップを認識し、ラップトップとデータを交換できるようになりました。現在のメニューを終了し、イメージメニューに移動します。転送するイメージを選択し、[More(詳細)]を押します。次のメニューでは、[Send(送信)]を押して通信モードを選択します。[Via Bluetooth(Bluetooth経由)]を選択します。ラップトップがターゲットデバイスとして表示されます。ラップトップを選択し、通信を開始します。イメージは、opdコマンドで指定したディレクトリに保存されます。オーディオトラックも、同じ方法でラップトップに転送できます。

34.2.6 トラブルシューティング

接続が確立できないときは、次のリストに従って作業を行います。エラーは接続の片端または両端で発生する可能性があることに注意してください。できれば、別のBluetoothデバイスで問題を再生し、そのデバイスに問題がないことを確認してください。

hcitool devの出力にローカルデバイスが表示されますか ?

この出力にローカルデバイスが表示されない場合は、hcidが起動していないか、デバイスがBluetoothデバイスとして認識されていません。これにはさまざまな原因が考えられます。デバイスに不具合がある、正しいドライバがない、などです。Bluetooth内蔵ラップトップの場合、通常は無線デバイス(WLANやBluetoothなど)用のオン/オフスイッチが備えられています。この種のスイッチがデバイスにあるかどうかをラップトップのマニュアルで確認してください。コマンドrcbluetooth restartでBluetoothシステムを再起動し、/var/log/messagesにエラーが報告されるかどうかを調べます。

Bluetoothアダプタにはファームウェアファイルが必要ですか ?

ファームウェアファイルが必要な場合は、bluez-bluefwをインストールし、rcbluetooth restartでBluetoothシステムを再起動します。

hcitool inqの出力に他のデバイスが表示されますか ?

このコマンドは何度かテストしてください。Bluetoothの周波数帯が他のデバイスでも使用されているため、接続に干渉が発生している可能性があります。

PINは一致していますか ?

コンピュータのPIN番号(/etc/bluetooth/pin内)がターゲットデバイスと一致しているかどうかを確認してください。

リモートデバイスは使用中のコンピュータを「認識」できますか ?

リモートデバイスから接続を行ってみます。このデバイスがコンピュータを認識するかを確認します。

ネットワーク接続を確立できますか(34.2.5.1項 「2台のホスト間のネットワーク接続」を参照) ?

34.2.5.1項 「2台のホスト間のネットワーク接続」で説明したセットアップは、いくつかの理由でうまく動作しないことがあります。たとえば、2台のコンピュータの一方がsshプロトコルをサポートしていない可能性があります。ping 192.168.1.3またはping 192.168.1.4を試してみます。このコマンドが実行できる場合は、次にsshdが有効かどうかを確認します。他に考えられる原因としては、例で使用しているアドレス192.168.1.Xと競合するネットワーク設定が既に一方のデバイスで使用されている場合です。この場合、10.123.1.210.123.1.3のような異なるアドレスを試してみます。

ラップトップはターゲットデバイスとして表示されますか(34.2.5.2項 「携帯電話からコンピュータへのデータ転送」を参照) ?携帯デバイスは、ラップトップのObex-Pushを認識しますか?

[My devices(マイデバイス)]で各デバイスを選択し、[Services(サービス)]のリストを表示します。(リストを更新しても) Obex-Pushが表示されない場合は、ラップトップ上のopdが原因です。opdはアクティブですか ?指定したディレクトリに対して、書き込みアクセスができますか ?

34.2.5.2項 「携帯電話からコンピュータへのデータ転送」で説明したシナリオは他の方法でも機能しますか ?

obexftpパッケージがインストールされている場合は、一部のデバイスでこの操作にコマンドobexftp -b device_address -B 10 -p imageを使用できます。複数のSiemensおよびSony Ericssonモデルではテストを完了し、機能することが確認されています。/usr/share/doc/packages/obexftpディレクトリのドキュメントを参照してください。

bluez-hcidumpパッケージがインストールされている場合は、hcidump -Xを使用してデバイス間で何が送信されたか確認できます。この出力に問題の場所を見つけるヒントが含まれている場合がありますが、平文(クリアテキスト)で部分的でなものであることに注意してください。

34.2.7 関連情報

いくつかの追加(最後に追加されたもの)ドキュメント(ドイツ語と英語版)が/usr/share/doc/packages/bluez-utils/にあります。

Bluetoothの使用方法と設定についての詳細な説明は、http://www.holtmann.org/linux/bluetooth/で入手可能です。その他、次の情報および指示が役立ちます。