「Bluetooth」の版間の差分

提供: ArchWiki
ナビゲーションに移動 検索に移動
(→‎CLI による設定: タイトル変更と Note の追加)
(3人の利用者による、間の46版が非表示)
1行目: 1行目:
{{Translateme|飜訳が追いついていません。飜訳のご協力または英語版の方をご参照ください。}}
 
 
[[Category:Bluetooth]]
 
[[Category:Bluetooth]]
[[cs:Bluetooth]]
 
 
[[de:Bluetooth]]
 
[[de:Bluetooth]]
 
[[en:Bluetooth]]
 
[[en:Bluetooth]]
 
[[es:Bluetooth]]
 
[[es:Bluetooth]]
 
[[fr:Bluetooth]]
 
[[fr:Bluetooth]]
[[it:Bluetooth]]
 
 
[[ru:Bluetooth]]
 
[[ru:Bluetooth]]
 
[[zh-hans:Bluetooth]]
 
[[zh-hans:Bluetooth]]
 
{{Related articles start}}
 
{{Related articles start}}
{{Related|Bluez4}}
 
 
{{Related|Bluetooth マウス}}
 
{{Related|Bluetooth マウス}}
  +
{{Related|Bluetooth キーボード}}
 
{{Related|Bluetooth ヘッドセット}}
 
{{Related|Bluetooth ヘッドセット}}
 
{{Related|Blueman}}
 
{{Related|Blueman}}
  +
{{Related|ObexFTP}}
 
{{Related articles end}}
 
{{Related articles end}}
[http://www.bluetooth.org/ Bluetooth] は携帯電話やコンピュータなどの電子デバイス用の近距離無線通信規格です。Linux においては、Bluetooth プロトコルスタックの実装として [http://www.bluez.org/ BlueZ] が標準的に使われています。
+
[[Wikipedia:ja:Bluetooth|Bluetooth]] は携帯電話やコンピュータなどの電子デバイス用の近距離無線通信規格です。Linux においては、Bluetooth プロトコルスタックの実装として [http://www.bluez.org/ BlueZ] が標準的に使われています。
   
 
== インストール ==
 
== インストール ==
21行目: 19行目:
 
# Bluetooth プロトコロスタックを提供する、{{Pkg|bluez}} パッケージを[[インストール]]します。
 
# Bluetooth プロトコロスタックを提供する、{{Pkg|bluez}} パッケージを[[インストール]]します。
 
# {{ic|bluetoothctl}} ユーティリティを提供する、{{Pkg|bluez-utils}} を[[インストール]]します。または {{AUR|bluez-utils-compat}} を[[インストール]]して、[[#非推奨の BlueZ tools|非推奨の BlueZ tools]] を追加します。
 
# {{ic|bluetoothctl}} ユーティリティを提供する、{{Pkg|bluez-utils}} を[[インストール]]します。または {{AUR|bluez-utils-compat}} を[[インストール]]して、[[#非推奨の BlueZ tools|非推奨の BlueZ tools]] を追加します。
# 一般的な Bluetooth ドライバは、{{ic|btusb}} カーネルモジュールです。このモジュールがロードされているかどうかを[[カーネルモジュール#Obtaining_information|確認]]してください。もしロードされていなければ、[[カーネルモジュール#Manual_module_handling|モジュールをロード]]してください。
+
# 一般的な Bluetooth ドライバは、{{ic|btusb}} カーネルモジュールです。このモジュールがロードされているかどうかを[[カーネルモジュール#情報を取得|確認]]してください。もしロードされていなければ、[[カーネルモジュール#手動でモジュールを扱う|モジュールをロード]]してください。
 
# {{ic|bluetooth.service}} を[[起動/有効化]]します。
 
# {{ic|bluetooth.service}} を[[起動/有効化]]します。
   
 
{{Note|
 
{{Note|
* デフォルトでは bluetooth デーモンは {{ic|lp}} グループのメンバーのユーザーだけに bnep0 デバイスを提供します。bluetooth 接続するときはユーザーをグループに追加しておいてください。必要なグループは {{ic|/etc/dbus-1/system.d/bluetooth.conf}} ファイルで変更することができます。
+
* デフォルトでは bluetooth デーモンは {{ic|lp}} [[ユーザーとグループ#システムグループ|グループ]]のメンバーのユーザーだけに bnep0 デバイスを提供します。bluetooth テザリングに接続するときはユーザーをグループに追加しておいてください。必要なグループは {{ic|/etc/dbus-1/system.d/bluetooth.conf}} ファイルで変更することができます。
 
* Bluetooth アダプターには Wi-Fi カードがバンドルされているものもあります (例: [https://www.intel.com/content/www/us/en/wireless-products/centrino-advanced-n-6235.html Intel Centrino])。これらの Bluetooth アダプターをカーネルから見えるようにするには、まず Wi-Fi カードを有効にする必要があります (大体はラップトップ上のキーボードショートカットを使う)。
 
* Bluetooth アダプターには Wi-Fi カードがバンドルされているものもあります (例: [https://www.intel.com/content/www/us/en/wireless-products/centrino-advanced-n-6235.html Intel Centrino])。これらの Bluetooth アダプターをカーネルから見えるようにするには、まず Wi-Fi カードを有効にする必要があります (大体はラップトップ上のキーボードショートカットを使う)。
 
* Bluetooth カードによってはネットワークアダプタと衝突することがあります (例: Broadcom)。したがって、ネットワークサービスを起動する前に Bluetooth デバイスを接続するようにしてください。
 
* Bluetooth カードによってはネットワークアダプタと衝突することがあります (例: Broadcom)。したがって、ネットワークサービスを起動する前に Bluetooth デバイスを接続するようにしてください。
* hcitool や hciconfig などのツールは上流では非推奨となっており、{{Pkg|bluez-utils}} にはもはや含まれていません。アップデートされないことが決まっているため、スクリプトの中で使用している場合は使わないように書き換えることを推奨します。それでも使いたい場合は {{AUR|bluez-utils-compat}} をインストールしてください。詳しい情報は {{Bug|53110}} や [https://www.spinics.net/lists/linux-bluetooth/msg69239.html Bluez メーリングリスト] を参照。}}
+
* hcitool や hciconfig などのツールは上流では非推奨となっており、{{Pkg|bluez-utils}} にはもはや含まれていません。アップデートされないことが決まっているため、スクリプトの中で使用している場合は使わないように書き換えることを推奨します。それでも使いたい場合は {{AUR|bluez-utils-compat}} をインストールしてください。詳しい情報は {{Bug|53110}} や [https://lore.kernel.org/linux-bluetooth/20170104133401.3636-1-luiz.dentz@gmail.com/ Bluez メーリングリスト] を参照。}}
   
 
=== フロントエンド ===
 
=== フロントエンド ===
35行目: 33行目:
   
 
* {{App|bluetoothctl|シェルからデバイスをペアリングすることは、最も単純で信頼性の高いオプションの一つです。|http://www.bluez.org/|{{Pkg|bluez-utils}}}}
 
* {{App|bluetoothctl|シェルからデバイスをペアリングすることは、最も単純で信頼性の高いオプションの一つです。|http://www.bluez.org/|{{Pkg|bluez-utils}}}}
  +
* {{App|bluetuith|ターミナルユーザインターフェイスによる Bluetooth マネージャを提供します。OBEX ファイル転送とマウスのサポート付きで、デバイス/アダプタを簡単に管理できます。|https://www.github.com/darkhz/bluetuith|{{AUR|bluetuith}}}}
   
 
{{Tip|bluetoothctl コマンドを自動化するには、{{ic|echo -e "''command1''\n''command2''\n" {{!}} bluetoothctl}} または {{ic|bluetoothctl -- ''command''}} を使用します。}}
 
{{Tip|bluetoothctl コマンドを自動化するには、{{ic|echo -e "''command1''\n''command2''\n" {{!}} bluetoothctl}} または {{ic|bluetoothctl -- ''command''}} を使用します。}}
43行目: 42行目:
   
 
* {{App|GNOME Bluetooth|[[GNOME]] の Bluetooth ツール。
 
* {{App|GNOME Bluetooth|[[GNOME]] の Bluetooth ツール。
** {{Pkg|gnome-bluetooth}} バックエンドを提供
+
** {{Pkg|gnome-bluetooth-3.0}} バックエンドを提供 ({{Pkg|gnome-bluetooth}} はレガシーです)
 
** {{Pkg|gnome-shell}} ステータスモニターアプレットを提供
 
** {{Pkg|gnome-shell}} ステータスモニターアプレットを提供
** {{Pkg|gnome-control-center}} provides the configuration front-end GUI that can be accessed by typing Bluetooth on the Activities overview, or with the {{ic|gnome-control-center bluetooth}} command.
+
** {{Pkg|gnome-control-center}} は設定用のフロントエンド GUI を提供しており、アクティビティ概要で Bluetooth と入力するか、 {{ic|gnome-control-center bluetooth}} コマンドでアクセスすることができます。
  +
** また、{{ic|bluetooth-sendto}} コマンドを直接起動して、リモートデバイスにファイルを送信することも可能です。
** You can also launch the {{ic|bluetooth-sendto}} command directly to send files to a remote device.
 
** {{AUR|nautilus-bluetooth}} adds a "Send via Bluetooth" entry to Nautilus' right-click menu
+
** {{AUR|nautilus-bluetooth}} Nautilus の右クリックメニューに "Bluetoothで送信" エントリを追加します。
  +
** ファイルを受信するには、Bluetooth 設定パネルを開きます。Bluetooth パネルが開いている間のみ受信できます。
** To receive files, open the Bluetooth settings panel; you can only receive whilst the Bluetooth panel is open.
 
** To add a Bluetooth entry to the ''Send To'' menu in Thunar's file properties menu, see instructions [https://docs.xfce.org/xfce/thunar/send-to here]. (The command that needs to be configured is {{ic|bluetooth-sendto %F}}).
+
** Thunar のファイルプロパティメニューの ''送信先'' メニューに Bluetooth エントリを追加するには、説明 [https://docs.xfce.org/xfce/thunar/send-to ここ] を参照してください。(設定が必要なコマンドは {{ic|bluetooth-sendto %F}} です)
 
|https://wiki.gnome.org/Projects/GnomeBluetooth|}}
 
|https://wiki.gnome.org/Projects/GnomeBluetooth|}}
* {{App|Bluedevil|[[KDE]]'s Bluetooth tool. If there is no Bluetooth icon visible in Dolphin and in the system tray, enable it in the system tray options or add a widget. You can configure Bluedevil and detect Bluetooth devices by clicking the icon. An interface is also available from the KDE System Settings.|https://invent.kde.org/plasma/bluedevil|{{Pkg|bluedevil}}}}
+
* {{App|Bluedevil|[[KDE]] Bluetooth ツール。 Dolphin やシステムトレイに Bluetooth のアイコンが表示されていない場合は、システムトレイオプションで有効にするか、ウィジェットを追加してください。アイコンをクリックすることで、Bluedevil の設定や Bluetooth デバイスの検出が可能です。KDE システム設定からもインターフェースが利用できます。|https://invent.kde.org/plasma/bluedevil|{{Pkg|bluedevil}}}}
* {{App|Blueberry|Linux Mint's spin-off of GNOME Bluetooth, which works in all desktop environments. ''Blueberry'' does not support receiving files through Obex Object Push.|https://github.com/linuxmint/blueberry|{{Pkg|blueberry}}}}
+
* {{App|Blueberry|GNOME Bluetooth から Linux Mint でスピンオフした ''Blueberry'' は全てのデスクトップ環境で動作します。Obex Object Push によるファイル受信をサポートしていません。|https://github.com/linuxmint/blueberry|{{Pkg|blueberry}}}}
* {{App|[[Blueman]]|A full featured Bluetooth manager.|https://github.com/blueman-project/blueman|{{Pkg|blueman}}}}
+
* {{App|[[Blueman]]|フル機能の Bluetooth マネージャー|https://github.com/blueman-project/blueman|{{Pkg|blueman}}}}
* {{App|[[ObexFTP]]|A tool for transferring files to/from any OBEX enabled device.|http://dev.zuckschwerdt.org/openobex/wiki/ObexFtp|{{AUR|obexftp}}}}
+
* {{App|[[ObexFTP]]|OBEX 対応のデバイスとの間でファイルを転送するツール。|http://dev.zuckschwerdt.org/openobex/wiki/ObexFtp|{{AUR|obexftp}}}}
   
 
== ペアリング ==
 
== ペアリング ==
   
  +
{{Note|Bluetooth デバイスを使用する前に、[[rfkill]] でブロックされていないことを確認してください。}}
{{Note|Before using the Bluetooth device, make sure that it is not blocked by [[rfkill]].}}
 
   
  +
このセクションでは、''bluetoothctl'' CLI を使って ''bluez5'' を直接設定する方法を説明しています。これは、代替のフロントエンドツール(例えば GNOME Bluetooth)を使用している場合は必要ないかもしれません。
シェルからデバイスをペアリングするのは最もシンプルで信頼性のある方法の1つです。正確な手順は利用するデバイスとその入力機能によります。以下は {{ic|/usr/bin/bluetoothctl}} を使ってデバイスをペアリングする一般的な説明です:
 
  +
  +
正確な手順は、利用するデバイスとその入力機能によります。以下は {{ic|bluetoothctl}} を使ってデバイスをペアリングする一般的な説明です。
   
 
{{ic|bluetoothctl}} 対話コマンドを実行してください。{{ic|help}} と入力することで利用できるコマンドのリストを表示できます。
 
{{ic|bluetoothctl}} 対話コマンドを実行してください。{{ic|help}} と入力することで利用できるコマンドのリストを表示できます。
  +
* {{ic|select ''MAC Address''}} と入力してデフォルトのコントローラを選択してください。
 
* {{ic|power on}} と入力してコントローラの電源入れさい。デフォルトではオフになっています
+
# (任意) {{ic|select ''MAC Address''}} と入力してデフォルトのコントローラを選択しください。
  +
# {{ic|power on}} と入力してコントローラの電源を入れて下さい。デフォルトではオフになっており、起動するたびにオフになります、[[#起動後/再開後に自動で有効にする]] を見てください。
* {{ic|devices}} と入力してペアリングするデバイスの MAC アドレスを取得してください。
 
* デバイスが表示されないときは {{ic|scan on}} コマドでデバイス検出モーしてください。
+
# {{ic|devices}} と入力して、ペアリグしたいデバイスの MAC アレスを取得してください。
* {{ic|agent on}} でジェントをオンにしてください。
+
# デバイスが表示されないときは {{ic|scan on}} コマンドデバイス検出モにしてください。
  +
# {{ic|agent on}} でエージェントをオンにするか、特定のエージェントを選択してください: {{ic|agent}} の後にタブキーを2回押すと、利用可能なエージェントのリストが表示されるはずです。Bluetooth エージェントとは、Bluetooth の 'ペアリングコード' を管理するもののことです。エージェントは、'ペアリングコード'の受信に応答したり、'ペアリングコード'を送信したりできます。ほとんどの場合、{{ic|default-agent}} を使うのが適切なはずです。[https://askubuntu.com/questions/763939/bluetoothctl-what-is-a-bluetooth-agent]
* {{ic|pair ''MAC Address''}} と入力することでペアリングを実行します (タブ補完が使えます)。
 
  +
# {{ic|pair ''MAC Address''}} と入力することでペアリングを実行します (タブ補完が使えます)。
* PIN がないデバイスを使う場合は、手動でデバイスを信頼する必要があるかもしれません。{{ic|trust ''MAC Address''}} と入力してこれを行なって下さい。
 
  +
# PIN がないデバイスを使う場合は、手動でデバイスを信頼する必要があるかもしれません。{{ic|trust ''MAC Address''}} と入力してこれを行なって下さい。デバイスを信頼するには {{ic|trust ''MAC_address''}} と入力してください。
* 最後に、{{ic|connect ''MAC_address''}} を使って接続を確立してください。
 
  +
# {{ic|connect ''MAC_address''}} を使って接続を確立してください。
   
 
セッションの例は以下のようになります:
 
セッションの例は以下のようになります:
# bluetoothctl
 
[NEW] Controller 00:10:20:30:40:50 pi [default]
 
[bluetooth]# agent KeyboardOnly
 
Agent registered
 
[bluetooth]# default-agent
 
Default agent request successful
 
[bluetooth]# scan on
 
Discovery started
 
[CHG] Controller 00:10:20:30:40:50 Discovering: yes
 
[NEW] Device 00:12:34:56:78:90 myLino
 
[CHG] Device 00:12:34:56:78:90 LegacyPairing: yes
 
[bluetooth]# pair 00:12:34:56:78:90
 
Attempting to pair with 00:12:34:56:78:90
 
[CHG] Device 00:12:34:56:78:90 Connected: yes
 
[CHG] Device 00:12:34:56:78:90 Connected: no
 
[CHG] Device 00:12:34:56:78:90 Connected: yes
 
Request PIN code
 
[agent] Enter PIN code: 1234
 
[CHG] Device 00:12:34:56:78:90 Paired: yes
 
Pairing successful
 
[CHG] Device 00:12:34:56:78:90 Connected: no
 
[bluetooth]# connect 00:12:34:56:78:90
 
Attempting to connect to 00:12:34:56:78:90
 
[CHG] Device 00:12:34:56:78:90 Connected: yes
 
Connection successful
 
   
  +
{{hc|$ bluetoothctl|
== 設定 ==
 
  +
[NEW] Controller 00:10:20:30:40:50 ''hostname'' [default]
=== 起動後に自動で有効にする ===
 
  +
[bluetooth]# agent KeyboardOnly
デフォルトでは、再起動後に Bluetooth アダプタが有効になりません。{{ic|1=AutoEnable=true}} を {{ic|/etc/bluetooth/main.conf}} の {{ic|[Policy]}} セクションの下部に追加するだけです:
 
  +
Agent registered
   
{{hc|1=/etc/bluetooth/main.conf|2=
+
[bluetooth]# default-agent
  +
Default agent request successful
[Policy]
 
  +
AutoEnable=true
 
  +
[bluetooth]# power on
  +
Changing power on succeeded
  +
[CHG] Controller 00:10:20:30:40:50 Powered: yes
  +
  +
[bluetooth]# scan on
  +
Discovery started
  +
[CHG] Controller 00:10:20:30:40:50 Discovering: yes
  +
[NEW] Device 00:12:34:56:78:90 ''device name''
  +
[CHG] Device 00:12:34:56:78:90 LegacyPairing: yes
  +
  +
[bluetooth]# pair 00:12:34:56:78:90
  +
Attempting to pair with 00:12:34:56:78:90
  +
[CHG] Device 00:12:34:56:78:90 Connected: yes
  +
[CHG] Device 00:12:34:56:78:90 Connected: no
  +
[CHG] Device 00:12:34:56:78:90 Connected: yes
  +
Request PIN code
  +
[agent] Enter PIN code: 1234
  +
[CHG] Device 00:12:34:56:78:90 Paired: yes
  +
Pairing successful
  +
[CHG] Device 00:12:34:56:78:90 Connected: no
  +
  +
[bluetooth]# connect 00:12:34:56:78:90
  +
Attempting to connect to 00:12:34:56:78:90
  +
[CHG] Device 00:12:34:56:78:90 Connected: yes
  +
Connection successful
 
}}
 
}}
   
  +
=== デュアルブートペアリング ===
=== 起動時に発見可能にする ===
 
   
  +
デュアルブート環境でデバイスをペアリングするには、Linux インストール時にペアリング・キーを手動で変更し、両方のシステムで一致するようにする必要があります。
デバイスが常に見えていて、直接接続できる必要がある場合:
 
   
  +
==== 設定方法 ====
{{hc|1=/etc/bluetooth/main.conf|2=
 
  +
[General]
 
  +
これを行うには、まず Arch Linux 上でデバイスのペアリングを行います。その後、もう一方の OS を再起動し、デバイスをペアリングします。ここでペアリング・キーを取り出す必要がありますが、まず Bluetooth デバイスの電源を切り、接続を試みないようにします。
DiscoverableTimeout = 0
 
  +
  +
{{Note|([[Logitech MX Master|MX Master 3]] などの)一部の Logitech デバイスは、デバイスが新しいシステムとペアリングするたびに MAC アドレスの値を1つ増加させます。プロセスの最後にこれに対処するために、このケースに該当するかどうかを確認する必要があります。}}
  +
  +
==== Windows の場合 ====
  +
  +
===== Windows での展開 =====
  +
  +
リンクキーを含むレジストリキーは、[https://docs.microsoft.com/en-us/windows/security/identity-protection/access-control/local-accounts#system SYSTEM アカウント] でしかアクセスできないため、ログインすることができません。そのため、{{ic|regedit.exe}} を {{ic|SYSTEM}} として実行するには、Windows Sysinternals 公式サイトにある Microsoft の [https://docs.microsoft.com/en-us/sysinternals/downloads/psexec PsExec] ツールが必要になります。
  +
  +
[https://download.sysinternals.com/files/PSTools.zip PsTools] をダウンロードし、{{ic|PsExe64.exe}} を解凍します。
  +
  +
[https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/windows-commands#command-shell-overview コマンドシェル] の管理者インスタンスで、解凍した EXE の場所からレジストリエディタを起動してください:
  +
.\PsExec64.exe -s -i regedit.exe
  +
  +
レジストリエディタで、以下のレジストリキーに移動します。
  +
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\BTHPORT\Parameters\Keys
  +
  +
このキーの中に各 Bluetooth アダプターの MAC アドレス別のキーがあります。複数のキーがあり、どれを使えばいいかわからない場合は、[https://www.addictivetips.com/windows-tips/find-bluetooth-mac-address-windows-10/ このガイド]に従って、目的の Bluetooth アダプタの MAC アドレスを検索してください。
  +
  +
目的のデバイス・アダプタ・キーの中に、同じように MAC アドレス別に、ペアリングされた各デバイスのバイナリ値があります。
  +
  +
インストール間で共有したい各ペアデバイスについて、キー全体を右クリックし、''.reg'' ファイルとしてエクスポートしてください。これはテキストファイルで、このファイルからキーをコピーできます。
  +
  +
このファイルにバイナリキーが1つだけ存在する場合、Bluetooth 5.1 デバイスではなく、そのペアリングキーが必要なもの全てであるということになります。
  +
  +
ペアリングしたデバイスに複数のキー ({{ic|LTK}} や {{ic|IRK}} など) が存在する場合、これは Bluetooth 5.1 デバイスで''ある''ということになります。これらのキーを使う方法は [[#Bluetooth 5.1キーの準備]] を見てください。
  +
  +
最後に、キーを Linux 環境にインポートするために [[#終わりに]] へ進んでください。
  +
  +
===== Linux での展開 =====
  +
  +
{{Note|Windows パーティションが Bitlocker で暗号化されている場合、Linux から chntpw を使ってアクセスすることはできません。}}
  +
  +
Arch をリブートしてください。{{Pkg|chntpw}} をインストールして、Windows システムドライブをマウントします。
  +
  +
$ cd ''/path/to/windows/system''/Windows/System32/config
  +
$ chntpw -e SYSTEM
  +
{{Note|CurrentControlSet の代わりに ControlSet00X(X は任意の数字)と表示されることがあります。ls コマンドで確認してください。}}
  +
{{ic|chntpw}} 環境の中で以下を実行します。
  +
  +
> cd CurrentControlSet\Services\BTHPORT\Parameters\Keys
  +
もしくは
  +
> cd ControlSet00X\Services\BTHPORT\Parameters\Keys
  +
  +
次に、Bluetooth アダプタの MAC アドレスを取得し、そのフォルダを入力します。
  +
  +
> ls
  +
> cd ''your-device's-mac-address''
  +
  +
ペアリングしているデバイスにも同じことをします。Bluetooth 5.1 デバイスで''ない''場合、ペアリングキーしか表示されません:
  +
  +
{{hc|> ls|
  +
Node has 0 subkeys and 1 values
  +
size type value name [value if type DWORD]
  +
16 REG_BINARY <123456789876>
 
}}
 
}}
   
  +
Bluetooth 5.1 デバイスである場合、{{ic|hex}} を通して、デバイスのキーを取得します。
=== Wake from suspend ===
 
   
  +
{{hc|> hex 123456789876|
To allow bluetooth keyboards, mice, etc. to wake the system from suspend. First, check the bios settings and make sure that wake from USB is not disabled. In many cases, bluetooth from the motherboard is a USB device.
 
  +
:00000 XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX (いくつかの他の文字)
  +
}}
   
  +
”XX" はペアリング・キーです。どのキーがどの MAC アドレスにマッピングされているか、メモしておいてください。
Find the vendor code and device ID for the bluetooth adapter
 
  +
{{bc|$ lsusb {{!}} grep bluetooth -i
 
  +
Bluetooth 5.1 デバイスで''ある''場合、1つのデバイスに対応するキーが複数表示されます。
Bus 001 Device 002: ID 8087:0039 Intel Corp. AX200 Bluetooth
 
  +
  +
{{bc|
  +
Node has 0 subkeys and 8 values
  +
size type value name [value if type DWORD]
  +
16 3 REG_BINARY <LTK>
  +
4 4 REG_DWORD <KeyLength> 16 [0x10]
  +
8 b REG_QWORD <ERand>
  +
4 4 REG_DWORD <EDIV> 37520 [0x9290]
  +
16 3 REG_BINARY <IRK>
  +
8 b REG_QWORD <Address>
  +
4 4 REG_DWORD <AddressType> 1 [0x1]
  +
4 4 REG_DWORD <AuthReq> 45 [0x2d]
 
}}
 
}}
   
  +
これらのキーを使う方法は [[#Bluetooth 5.1キーの準備]] を見てください。必要な値を得るには {{ic|hex ''value_name''}} を使います。
Add a new udev rule for the vendor code and device ID to enable wake from suspend
 
  +
{{hc|1=/etc/udev/rules.d/91-keyboardmousewakeup.rules|2=
 
  +
最後に、キーを Linux 環境にインポートするために [[#終わりに]] へ進んでください。
SUBSYSTEM=="usb", ATTRS{idVendor}=="8087", ATTRS{idProduct}=="0039" RUN+="/bin/sh -c 'echo enabled > /sys$env{DEVPATH}/../power/wakeup;'"
 
  +
  +
===== Bluetooth 5.1キーの準備 =====
  +
  +
{{Expansion|We are still working on getting a comprehensive idea of how these work across vendors. For now, documenting specific devices' compatibility with these methods is helpful - especially non-Logitech data points.|Talk:Bluetooth#Logitech Bluetooth Devices Mac Address Increment}}
  +
  +
展開した Bluetooth 5.1 のキーとパラメータは、Linux のものにマッピングする必要があります。要求されたファイル作成し、適切な内容を書き込んでください。[[#終わりに]] でそれらをインストールします。この処理はデバイスに依存し、いくつかの値は操作する必要があります。操作を行うコードユーティリティは以下に記載します。
  +
  +
* Logitech MX Master 3、Pebble M350 マウス、K580 キーボード、そして Logitech BT5.1 デバイスの場合:
  +
** {{ic|LTK}} は {{ic|SlaveLongTermKey.Key}} と {{ic|PeripheralLongTermKey.Key}} の '''両方''' にマップします。16進数の桁の間にあるスペースは取り除いてください。
  +
** {{ic|IRK}} は {{ic|IdentityResolvingKey.Key}} にマップします。16進数の桁の間にあるスペースは取り除いてください。
  +
** {{ic|ERand}} は {{ic|0}} である必要があります。操作は必要ありません。
  +
** {{ic|EDiv}} は {{ic|0}} である必要があります。操作は必要ありません。
  +
* 他のデバイスの場合:
  +
** {{ic|LTK}} は {{ic|LongTermKey.Key}} に対応します。16進数の桁の間にあるスペースは取り除いてください。
  +
** {{ic|ERand}} は {{ic|Rand}} にマップします。オクテットの順番を逆にして、全体の数字を10進数に変換してください。
  +
** {{ic|EDIV}} は {{ic|EDiv}} にマップします。16進数の桁の間にあるスペースは取り除いてください。
  +
  +
{{Note|
  +
* 値からスペースを除くために[https://www.browserling.com/tools/remove-all-whitespace このオンラインツール]や以下の [[Python]] コードを使用できます:
  +
>>> <nowiki>'</nowiki>''key_value''<nowiki>'</nowiki>.replace(' ', '')
  +
* 以下の Python コードは {{ic|ERand}} の変換を行います:
  +
{{bc|1=
  +
>>> ERand=' 63 02 84 B8 5D 40 44 DF '
  +
>>> ERand=list(reversed(ERand.strip().split()))
  +
>>> int("".join(ERand), 16)
  +
16088054540146049635
  +
}}
 
}}
 
}}
   
  +
一般的なケースの例として:
== グラフィカルフロントエンドによる設定 ==
 
  +
* {{ic|48 4D AF CD 0F 92 22 88 0A 52 9A F4 76 DA 8B 94}} の {{ic|LTK}} は、{{ic|484DAFCD0F9222880A529AF476DA8B94}} の {{ic|LongTermKey.Key}} となります。
  +
* {{ic|63 02 84 B8 5D 40 44 DF}} の {{ic|ERand}} は、{{ic|16088054540146049635}} の {{ic|Rand}} となります。
  +
* {{ic|37520}} の {{ic|EDIV}} は、{{ic|37520}} の {{ic|EDiv}} となります。
   
  +
==== macOS の場合 ====
以下のパッケージによって Bluetooth をカスタマイズするのにグラフィカルインターフェイスを使えるようになります。
 
   
  +
{{Accuracy|These instructions will not work for Bluetooth 5.1 devices such as the Logitech MX Master 3. A step should be added for locating those, and then [[#Bluetooth 5.1キーの準備]] should be generalized (if needed) to cover macOS.}}
=== GNOME Bluetooth ===
 
   
  +
macOS を起動し、ターミナルを開きます。
[https://wiki.gnome.org/Projects/GnomeBluetooth GNOME Bluetooth] は [[GNOME]] の Bluetooth ツールです。{{Pkg|gnome-bluetooth}} パッケージにはバックエンドが含まれており、{{Pkg|gnome-shell}} には状態監視アプレットが、{{Pkg|gnome-control-center}} には設定フロントエンド GUI が入っています。アクティビティに Bluetooth と入力するか、{{ic|gnome-control-center bluetooth}} コマンドを実行することでアクセスできます。また、{{ic|bluetooth-sendto}} コマンドを実行することでリモートデバイスに直接ファイルを送信することが可能です。
 
   
  +
* Sierra 以前の OS の場合、以下を実行します。
ファイルを受信するには、{{Pkg|gnome-user-share}} パッケージをインストールしてください。''Settings -> Sharing'' からペアリングしたデバイスから Bluetooth 経由で送られたファイルを受け取ることができます。
 
   
  +
{{bc|# defaults read /private/var/root/Library/Preferences/blued.plist LinkKeys > ~/bt_keys.txt}}
{{Tip|Bluetooth のエントリを Thunar のファイルプロパティメニューの ''Send To'' に追加するには、[https://docs.xfce.org/xfce/thunar/send-to こちら] の手順を見て下さい (設定する必要があるコマンドは {{ic|bluetooth-sendto %F}} です)。}}
 
   
  +
* High Sierra 以降をお使いの場合は、以下を実行してください。
=== Bluedevil ===
 
   
  +
{{bc|# defaults read /private/var/root/Library/Preferences/com.apple.bluetoothd.plist LinkKeys > ~/bt_keys.txt}}
[https://projects.kde.org/projects/kde/workspace/bluedevil Bluedevil] は [[KDE]] の Bluetooth ツールです。{{Pkg|bluedevil}} (KDE Plasma 5) パッケージで[[インストール]]することができます。
 
   
  +
古いバージョンの macOS(High Sierra およびそれより古いバージョン)の場合、キーを反転する必要があります。例えば {{ic|98 54 2f aa bb cc dd ee ff gg hh ii jj kk ll mm}} は {{ic|MM LL KK JJ GG FF EE DD CC BB 2F 54 98}} となります。
Dolphin やシステムトレイには Bluetooth アイコンが表示されないので、手動で追加してください。アイコンをクリックすることで Bluedevil を設定したり Bluetooth デバイスを検出できます。KDE システム設定からインターフェイスにアクセスすることも可能です。
 
   
  +
{{ic|bt_keys.txt}} ファイルを Arch Linux から読み込み可能なドライブにコピーします。Arch Linux を起動してください。
=== Blueberry ===
 
   
  +
==== 終わりに ====
''Blueberry'' は全てのデスクトップ環境で動作するフロントエンドです。{{Pkg|blueberry}} パッケージでインストールできます。設定ツール (''blueberry'') とシステムトレイアプレット (''blueberry-tray'') が含まれています。
 
   
  +
キーを手に入れたら、ユーザーを root に変更し、以下を実行してください:
=== Blueman ===
 
   
  +
{{bc|# cd /var/lib/bluetooth/''BT-Adapter-MAC-address''}}
[[Blueman]] を参照。
 
  +
  +
ここには、ペアリングした Bluetooth 機器ごとのフォルダがあります。Arch とデュアルブートでペアリングしたい各デバイスについて、以下を実行します:
  +
  +
{{bc|# cd ''device-MAC-address''}}
  +
  +
{{Note|この時点で、ペアリング時に MAC アドレスの値を増加させるデバイスを使用している場合、MAC アドレスのディレクトリを、値を増加させたパスへ移動させる必要があります。Windows から MAC アドレスをコピーするか、あるいは、各オクテットが2桁の[[Wikipedia:Hexadecimal|16進数]]であることに注意しながら自分で値を増加させてください。}}
  +
  +
ペアリングキーを持っている場合(つまり、これは Bluetooth 5.1 デバイスでない)、{{ic|info}} ファイルを編集し、{{ic|[LinkKey]}} 以下のキーを変更します。例えば:
  +
  +
{{hc|1=info|2=
  +
[LinkKey]
  +
Key=XXXXXXXXXXXXXXX
  +
}}
  +
  +
{{Note|すべての文字が大文字であることを確認する必要があります。スペースはすべて削除してください。}}
  +
  +
Bluetooth 5.1 キーを持っている場合、代わりにキーファイルを MAC アドレスのディレクトリにコピーする必要があります。
  +
  +
次に、{{ic|bluetooth.service}} と {{ic|pulseaudio}} を [[再起動]] してください。({{ic|pulseaudio -k && pulseaudio --start}} を使ってください。)
  +
  +
これで、デバイスに接続できるはずです。
  +
  +
{{Note|Bluetooth マネージャによっては、デバイスに再接続するために完全な再起動が必要な場合があります。}}
  +
  +
== 設定 ==
  +
  +
=== 起動後/再開後に自動で有効にする ===
  +
  +
{{Pkg|bluez}} 5.65 以降、BlueZ はデフォルトで、サービスの起動時やサスペンドからの復帰時にすべての Bluetooth アダプタをオンにします。[https://github.com/bluez/bluez/commit/180cf09933b2d8eb03972c8638063429fe5fece5]
  +
  +
アダプタを自動で有効化させたくない場合(例えば、ポータブルデバイスなどでバッテリを節約したい場合)、{{ic|/etc/bluetooth/main.conf}} の {{ic|[Policy]}} セクションで {{ic|1=AutoEnable=false}} を設定してください:
  +
  +
{{hc|1=/etc/bluetooth/main.conf|2=
  +
[Policy]
  +
AutoEnable=false
  +
}}
  +
  +
この設定を行っても、[[#ペアリング]] で説明されているように {{ic|power on}} を実行すれば、アダプタを手動でオンにできます。
  +
  +
=== 起動時に発見可能にする ===
  +
  +
デバイスが常に見えていて、かつ直接接続できる必要がある場合:
  +
  +
{{hc|1=/etc/bluetooth/main.conf|2=
  +
[General]
  +
DiscoverableTimeout = 0
  +
}}
  +
  +
=== サスペンドからの復帰 ===
  +
  +
Bluetooth キーボードやマウスなどをサスペンドから起動できるようにする。まず、bios の設定を確認し、サスペンドからの復帰 が無効になっていないことを確認します。多くの場合、マザーボードからの Bluetooth は USB デバイスです。
  +
  +
bluetooth アダプターのベンダーコードとデバイス ID を確認してください:
  +
  +
{{hc|$ lsusb {{!}} grep bluetooth -i|
  +
Bus 001 Device 002: ID 8087:0039 Intel Corp. AX200 Bluetooth
  +
}}
  +
  +
サスペンドからの復帰を有効にするために、ベンダコードとデバイス ID の新しい udev ルールを追加してください:
  +
  +
{{hc|/etc/udev/rules.d/91-keyboard-mouse-wakeup.rules|2=
  +
SUBSYSTEM=="usb", ATTRS{idVendor}=="8087", ATTRS{idProduct}=="0039" RUN+="/bin/sh -c 'echo enabled > /sys$env{DEVPATH}/../power/wakeup;'"
  +
}}
  +
  +
復帰後に Bluetooth キーボードを自動的に再設定して、例えば異なるキーマップやキーのリピート速度をもたせたりする(詳細は [[Xorg でのキーボード設定#typematic delay と rate の調整]] と [[xmodmap]])には、[[実行可能属性|実行可能]]なスクリプトを作成してください。
  +
  +
{{hc|configure_keyboard.sh|2=
  +
#!/bin/sh
  +
export DISPLAY=:0
  +
xset r rate 220 30
  +
xmodmap /''your''/''path''/''to''/.Xmodmap
  +
}}
  +
  +
そして、上記のような追加の udev ルールを作成してください。
  +
  +
{{hc|/etc/udev/rules.d/92-keyboard-reconfiguration-wakeup.rules|2=
  +
SUBSYSTEM=="usb", ATTRS{idVendor}=="8087", ATTRS{idProduct}=="0039" RUN+="/''your''/''path''/''to''/configure_keyboard.sh"
  +
}}
   
 
== オーディオ ==
 
== オーディオ ==
   
通常は、オーディオサーバーと bluetooth を統合するために追加の手順を実行する必要があります。これについては、以下のセクションで説明します。
+
通常は、オーディオサーバーと Bluetooth を統合するために追加の手順を実行する必要があります。これについては、以下のセクションで説明します。
   
 
Bluetooth オーディオや Bluetooth ヘッドセットなどの情報については [[Bluetooth ヘッドセット]] のページを見てください。
 
Bluetooth オーディオや Bluetooth ヘッドセットなどの情報については [[Bluetooth ヘッドセット]] のページを見てください。
165行目: 345行目:
 
=== PulseAudio ===
 
=== PulseAudio ===
   
Bluetooth ヘッドフォンやスピーカーのようなオーディオ機器を使うには {{Pkg|pulseaudio-bluetooth}} パッケージのインストールが必要です。
+
Bluetooth ヘッドフォンやスピーカーのようなオーディオ機器を使うには {{Pkg|pulseaudio-bluetooth}} パッケージのインストールが必要です。インストールを反映させるために、pulseaudio を再起動してください: {{ic|pulseaudio -k}}。デフォルトの Pulseaudio インストールでは、即座に Bluetooth デバイスからスピーカーにオーディオをストリーミングできるはずです。
   
  +
システム全体の PulseAudio 設定がある場合は、デーモンを実行しているユーザー(通常は {{ic|pulse}}) が {{ic|lp}} グループに属しており、PulseAudio 設定に Bluetooth モジュールをロードしていることを確認します:
PulseAudio のデフォルトのインストールでは、 bluetooth デバイスからスピーカーにオーディオをストリーミングできるようになります。
 
 
システム全体の PulseAudio 設定がある場合は、デーモンを実行しているユーザー(通常は {{ic|pulse}}) が {{ic|lp}} グループに属しており、PulseAudio構成にBluetoothモジュールをロードしていることを確認します:
 
   
 
{{hc|/etc/pulse/system.pa|2=
 
{{hc|/etc/pulse/system.pa|2=
177行目: 355行目:
 
...
 
...
 
}}
 
}}
  +
  +
これは任意ですが、Bluetooth デバイスの接続時にすべてのオーディオをそのデバイスに自動で切り替えたい場合、{{ic|load-module module-switch-on-connect}} を追加してください。
   
 
=== PipeWire ===
 
=== PipeWire ===
   
v0.3.19 以降の PipeWire はデフォルトで Bluetooth をサポートしています。 [https://gitlab.freedesktop.org/pipewire/pipewire/-/wikis/Configuration#bluetooth bluetooth] を参照してください
+
v0.3.19 以降の PipeWire はデフォルトで Bluetooth をサポートしています。
   
 
=== ALSA ===
 
=== ALSA ===
   
{{Note|Bluez5 は [[ALSA]] の直接統合を中止し、 [[PulseAudio]] のみをサポートします。 PulseAudio を使用できない場合、または使用しない場合は、次の手順に従います。}}
+
{{Note|Bluez5 は [[ALSA]] の直接統合を中止し、 [[PulseAudio]] のみをサポートします。 PulseAudio を使用できない場合、または使用しない場合は、次の手順に従ってください。}}
   
 
まず、 Bluetooth オーディオデバイスが正しくペアリングされ、システムに接続されていることを確認します。
 
まず、 Bluetooth オーディオデバイスが正しくペアリングされ、システムに接続されていることを確認します。
   
次に、 {{AUR|bluez-alsa-git}} をインストールし、 {{ic|bluealsa}} サービスを開始 (有効にします) し、ユーザーを {{ic|audio}} グループに追加します。
+
次に、 {{AUR|bluez-alsa-git}} をインストールし、 {{ic|bluealsa}} サービスを開始(そして、有効に) し、ユーザーを {{ic|audio}} グループに追加します。
   
次のコマンドを実行して、すべてが意図したとおりに動作しているかどうかを確認します
+
次のコマンドを実行して、すべてが意図したとおりに動作しているかどうかを確認します({{ic|''XX:XX:XX:XX:XX:XX''}} と {{ic|''FILE.wav''}} の部分は置き換えてください):
   
{{ic|''XX:XX:XX:XX:XX:XX''}} and {{ic|''FILE.wav''}} below):
 
 
$ aplay -D bluealsa:SRV=org.bluealsa,DEV=''XX:XX:XX:XX:XX:XX'',PROFILE=a2dp ''FILE.wav''
 
$ aplay -D bluealsa:SRV=org.bluealsa,DEV=''XX:XX:XX:XX:XX:XX'',PROFILE=a2dp ''FILE.wav''
   
208行目: 387行目:
   
 
== Bluetooth シリアル ==
 
== Bluetooth シリアル ==
Bluetooth-to-Serial modules (HC-05、HC-06) で Bluetooth シリアル通信が機能するようにするには、次の手順に従います。
 
   
  +
Bluetooth-to-Serial modules (HC-05、HC-06) で Bluetooth シリアル通信が機能するようにするには、次の手順に従います:
[https://wiki.archlinux.org/index.php/Bluetooth#Pairing こちら] で説明したように、 {{ic|bluetoothctl}} を使って Bluetooth デバイスをペアリングします。
 
   
  +
[[#ペアリング|上記]]で説明したように、 {{ic|bluetoothctl}} を使って Bluetooth デバイスを'''ペアリング'''します。
{{AUR|bluez-rfcomm}} と {{AUR|bluez-utils-compat}} をインストールします。新しいツールにはない機能があります。
 
   
  +
{{AUR|bluez-utils-compat}} をインストールします。新しいツールにはない機能があります。
ペアになっているデバイスの MAC アドレスを tty 端末にバインドします。
 
# rfcomm bind rfcomm0 <MAC address of bluetooth device>
 
   
  +
ペアになっているデバイスの MAC アドレスを tty 端末にバインドします:
これで、シリアル通信用に {{ic|/dev/rfcomm0}} を開くことができます。
 
   
  +
# rfcomm bind rfcomm0 ''MAC_address_of_Bluetooth_device''
picocom/dev/rfcomm 0-b 115200
 
  +
  +
これで、シリアル通信用に {{ic|/dev/rfcomm0}} を開くことができます:
  +
  +
picocom /dev/rfcomm0 -b 115200
   
 
== トラブルシューティング ==
 
== トラブルシューティング ==
  +
  +
{{Out of date|Replace hciconfig with newer commands.}}
   
 
=== デバッグ ===
 
=== デバッグ ===
   
デバッグするには、最初に {{ic|bluetooth.service}} を [https://wiki.archlinux.jp/index.php/Systemd#.E3.83.A6.E3.83.8B.E3.83.83.E3.83.88.E3.82.92.E4.BD.BF.E3.81.86 stop] します。
+
デバッグするには、最初に {{ic|bluetooth.service}} を[[停止]]します。
   
 
そして {{ic|-d}} パラメーターを付けて開始します。
 
そして {{ic|-d}} パラメーターを付けて開始します。
235行目: 418行目:
 
=== 非推奨の BlueZ tools ===
 
=== 非推奨の BlueZ tools ===
   
Eight BlueZ tools [https://git.kernel.org/pub/scm/bluetooth/bluez.git/commit/?id=b1eb2c4cd057624312e0412f6c4be000f7fc3617 were deprecated] and removed from {{Pkg|bluez-utils}}, although not all of them were superseded by newer tools. The {{AUR|bluez-utils-compat}} package provides an alternative version of {{Pkg|bluez-utils}} with the deprecated tools.
+
8つの BlueZ ツールは[https://git.kernel.org/pub/scm/bluetooth/bluez.git/commit/?id=b1eb2c4cd057624312e0412f6c4be000f7fc3617 非推奨となり]{{Pkg|bluez-utils}} から削除されましたが、それらのすべてが新しいツールに取って代わられたわけではありません。{{AUR|bluez-utils-compat}} パッケージは非推奨のツールを含む代替バージョンの {{Pkg|bluez-utils}} を提供します。
   
{| class="wikitable" style="max-width: 50em;"
+
{| class="wikitable"
 
|-
 
|-
  +
! 非推奨のツール
! Deprecated tool
 
  +
! あり得る代替
! Most likely replacement
 
 
|-
 
|-
 
| [https://manpages.debian.org/stretch/bluez/gatttool.1.en.html gatttool] || btgatt-client, [https://git.kernel.org/cgit/bluetooth/bluez.git/tree/doc/gatt-api.txt D-Bus Gatt API]
 
| [https://manpages.debian.org/stretch/bluez/gatttool.1.en.html gatttool] || btgatt-client, [https://git.kernel.org/cgit/bluetooth/bluez.git/tree/doc/gatt-api.txt D-Bus Gatt API]
246行目: 429行目:
 
| [https://manpages.debian.org/stretch/bluez/hciattach.1.en.html hciattach] || btattach
 
| [https://manpages.debian.org/stretch/bluez/hciattach.1.en.html hciattach] || btattach
 
|-
 
|-
| [https://manpages.debian.org/stretch/bluez/hciconfig.1.en.html hciconfig] || btmgmt (and bluetoothctl?)
+
| [https://manpages.debian.org/stretch/bluez/hciconfig.1.en.html hciconfig] || btmgmt (そして bluetoothctl?)
 
|-
 
|-
| [https://manpages.debian.org/stretch/bluez-hcidump/hcidump.1.en.html hcidump] || btmon (and btsnoop)
+
| [https://manpages.debian.org/stretch/bluez-hcidump/hcidump.1.en.html hcidump] || btmon (そして btsnoop)
 
|-
 
|-
| [https://manpages.debian.org/stretch/bluez/hcitool.1.en.html hcitool] || missing, [https://git.kernel.org/cgit/bluetooth/bluez.git/tree/doc/device-api.txt D-Bus Device API] available
+
| [https://manpages.debian.org/stretch/bluez/hcitool.1.en.html hcitool] || なし、[https://git.kernel.org/cgit/bluetooth/bluez.git/tree/doc/device-api.txt D-Bus Device API] 利用可能
 
|-
 
|-
 
| [https://manpages.debian.org/stretch/bluez/rfcomm.1.en.html rfcomm]
 
| [https://manpages.debian.org/stretch/bluez/rfcomm.1.en.html rfcomm]
| rowspan="2" | missing, implement with [https://git.kernel.org/cgit/bluetooth/bluez.git/tree/doc/profile-api.txt D-Bus Profile1 API]?
+
| rowspan="2" | なし、[https://git.kernel.org/cgit/bluetooth/bluez.git/tree/doc/profile-api.txt D-Bus Profile1 API] の実装?
 
|-
 
|-
 
| [https://manpages.debian.org/stretch/bluez/ciptool.1.en.html ciptool]
 
| [https://manpages.debian.org/stretch/bluez/ciptool.1.en.html ciptool]
 
|-
 
|-
| style="vertical-align: top;" | [https://manpages.debian.org/stretch/bluez/sdptool.1.en.html sdptool]
+
|[https://manpages.debian.org/stretch/bluez/sdptool.1.en.html sdptool]
| missing, functionality seems to be scattered over different D-Bus objects: [https://git.kernel.org/cgit/bluetooth/bluez.git/tree/doc/profile-api.txt Profile], [https://git.kernel.org/cgit/bluetooth/bluez.git/tree/doc/advertising-api.txt Advertising], and the UUIDs arrays in [https://git.kernel.org/cgit/bluetooth/bluez.git/tree/doc/device-api.txt device] and [https://git.kernel.org/cgit/bluetooth/bluez.git/tree/doc/adapter-api.txt adapter].
+
| なし、機能が、異なる D-Bus オブジェクトに散らばっている模様: [https://git.kernel.org/cgit/bluetooth/bluez.git/tree/doc/profile-api.txt Profile][https://git.kernel.org/cgit/bluetooth/bluez.git/tree/doc/advertising-api.txt Advertising]、そして [https://git.kernel.org/cgit/bluetooth/bluez.git/tree/doc/device-api.txt device] [https://git.kernel.org/cgit/bluetooth/bluez.git/tree/doc/adapter-api.txt adapter] の UUID の配列。
 
|}
 
|}
 
=== bluez-utils にシェルコマンドが入っていない ===
 
一部のツールは廃止されパッケージから削除されました。現時点ではまだ AUR パッケージの {{AUR|bluez-utils-compat}} でインストールすることは可能です。新しいツールによって概ね同じ機能が使えますが、一部の機能はまだ新しい [https://git.kernel.org/cgit/bluetooth/bluez.git/tree/doc/ D-Bus API] で実装されていません:
 
{| class="wikitable"
 
|-
 
! 廃止されたツール
 
! 代わりとなるツール
 
|-
 
| gatttool || btgatt-client, [D-Bus Gatt API https://git.kernel.org/cgit/bluetooth/bluez.git/tree/doc/gatt-api.txt]
 
|-
 
| hciattach || btattach
 
|-
 
| hciconfig || btmgmt (と bluetoothctl)
 
|-
 
| hcidump || btmon (と btsnoop)
 
|-
 
| hcitool || 存在しません。[https://git.kernel.org/cgit/bluetooth/bluez.git/tree/doc/device-api.txt D-Bus Device API] から利用できます。
 
|-
 
| rfcomm
 
| rowspan="2" | 存在しません。[https://git.kernel.org/cgit/bluetooth/bluez.git/tree/doc/profile-api.txt D-Bus Profile1 API] で実装できます。
 
|-
 
| ciptool
 
|-
 
| style="vertical-align: top;" | sdptool
 
| 存在しません。複数の D-Bus オブジェクトに機能が分散されています: [https://git.kernel.org/cgit/bluetooth/bluez.git/tree/doc/profile-api.txt Profile], [https://git.kernel.org/cgit/bluetooth/bluez.git/tree/doc/advertising-api.txt Advertising], [https://git.kernel.org/cgit/bluetooth/bluez.git/tree/doc/device-api.txt device] と [https://git.kernel.org/cgit/bluetooth/bluez.git/tree/doc/adapter-api.txt adapter] の UUID 配列。
 
|}
 
 
=== bluetoothctl ===
 
bluetoothctl でコントローラが見つからない場合、bluetooth デバイスがブロックされている可能性があります。{{Pkg|rfkill}}{{Broken package link|置換パッケージ: {{Pkg|util-linux}}}} を使ってブロックを解除してみてください:
 
 
# rfkill unblock bluetooth
 
   
 
=== gnome-bluetooth ===
 
=== gnome-bluetooth ===
   
 
bluetooth-properties でファイルの受信を有効にしようとしたときに以下のメッセージが表示される場合:
 
bluetooth-properties でファイルの受信を有効にしようとしたときに以下のメッセージが表示される場合:
  +
 
Bluetooth OBEX start failed: Invalid path
 
Bluetooth OBEX start failed: Invalid path
 
Bluetooth FTP start failed: Invalid path
 
Bluetooth FTP start failed: Invalid path
  +
{{Pkg|xdg-user-dirs}} をインストールして次を実行してください:
 
  +
[[XDG ユーザーディレクトリ]] が存在することを確認してください。
$ xdg-user-dirs-update
 
次のコマンドでパスを編集できます:
 
$ vi ~/.config/user-dirs.dirs
 
   
 
=== Bluetooth USB ドングル ===
 
=== Bluetooth USB ドングル ===
   
USB ドングルを使う場合は、Bluetooth ドングルが認識されているか確認してください。USB ドングルを挿入する時に {{ic|/var/log/messages.log}} を表示する (もしくは systemd で {{ic|journalctl -f}} を実行する) ことで確認できます。以下のような表示があるはずです (hci を探しさい):
+
USB ドングルを使う場合は、Bluetooth ドングルが認識されているか確認してください。USB ドングルを挿入する時に {{ic|journalctl -f}} を root として実行する(もしくは {{ic|/var/log/messages.log}} を調査する)ことで、そのことを確認できます。以下のような見た目であるはずです(hci をください)
   
 
{{bc|
 
{{bc|
314行目: 465行目:
 
}}
 
}}
   
最初の2行しか表示されていなかった場合は、デバイスを立ち上げる必要があります。
+
最初の2行しか表示されていなかった場合、デバイス見つかっていますがそのデバイスを立ち上げる必要があります。
 
例:
 
例:
   
  +
# btmgmt
{{hc|hciconfig -a hci0|
 
  +
hci0: Type: USB
 
  +
{{hc|[mgmt]# info|
BD Address: 00:00:00:00:00:00 ACL MTU: 0:0 SCO MTU: 0:0
 
  +
Index list with 1 item
DOWN
 
  +
hci0: Primary controller
RX bytes:0 acl:0 sco:0 events:0 errors:0
 
  +
addr 00:1A:7D:DA:71:10 version 6 manufacturer 10 class 0x000000
TX bytes:0 acl:0 sco:0 commands:0 errors:
 
  +
supported settings: powered connectable fast-connectable discoverable bondable link-security ssp br/edr hs le advertising secure-conn debug-keys privacy static-addr
  +
'''current settings:''' connectable discoverable bondable ssp br/edr le secure-conn
  +
name Mozart
  +
short name
 
}}
 
}}
   
# hciconfig hci0 up
+
{{hc|[mgmt]# select hci0|
  +
Selected index 0
  +
}}
  +
  +
{{hc|[hci0]# power up|
  +
hci0 Set Powered complete, settings: '''powered''' connectable discoverable bondable ssp br/edr le secure-conn
  +
}}
  +
  +
{{hc|[hci0]# info|
  +
hci0: Primary controller
  +
addr 00:1A:7D:DA:71:10 version 6 manufacturer 10 class 0x1c0104
  +
supported settings: powered connectable fast-connectable discoverable bondable link-security ssp br/edr hs le advertising secure-conn debug-keys privacy static-addr
  +
'''current settings: powered''' connectable discoverable bondable ssp br/edr le secure-conn
  +
}}
  +
  +
または
  +
  +
# bluetoothctl
  +
  +
{{hc|[bluetooth]# show|
  +
Controller 00:1A:7D:DA:71:10 (public)
  +
Name: Mozart
  +
Alias: Mozart
  +
Class: 0x0000095c
  +
'''Powered: no'''
  +
Discoverable: yes
  +
Pairable: yes
  +
}}
  +
  +
{{hc|[bluetooth]# power on'''|
  +
[CHG] Controller 00:1A:7D:DA:71:10 Class: 0x001c0104
  +
Changing power on succeeded
  +
[CHG] Controller 00:1A:7D:DA:71:10 '''Powered: yes'''
  +
}}
   
{{hc|hciconfig -a hci0|
+
{{hc|[bluetooth]# show|
  +
Controller 00:1A:7D:DA:71:10 (public)
hci0: Type: USB
 
  +
Name: Mozart
BD Address: 00:02:72:C4:7C:06 ACL MTU: 377:10 SCO MTU: 64:8
 
  +
Alias: Mozart
UP RUNNING
 
  +
Class: 0x001c0104
RX bytes:348 acl:0 sco:0 events:11 errors:0
 
  +
'''Powered: yes'''
TX bytes:38 acl:0 sco:0 commands:11 errors:0
 
  +
Discoverable: yes
  +
Pairable: yes
 
}}
 
}}
   
  +
[https://www.bluetooth.com/specifications/assigned-numbers/host-controller-interface/ 公式の仕様表]に従って、Bluetooth のバージョンが HCI のバージョンにマップされていることを確認できます。例えば、先の出力では、HCI '''version 6''' が Bluetooth version 4.0 です。
これが以下のようなエラーで失敗する場合:
 
Operation not possible due to RF-kill
 
おそらくコンピュータのハードウェアスイッチか、{{ic|rfkill}} ユーティリティが原因です。ユーティリティが原因の場合は次のコマンドで解決できます:
 
# rfkill unblock all
 
(場合によって) bluetooth のハードウェアスイッチは USB の bluetooth ドングルへのアクセスも操作します。スイッチを押したり動かしてもう一度デバイスを立ち上げてみてください。
 
   
デバイスが検出されているか確認するために {{ic|bluez-utils}} に含まれている {{ic|hcitool}} を使うことができます。次のコマンドで利用可能なデバイスとその ID・MAC アドレスのリストを表示することが可能です:
+
デバイスが検出されているか確認するために {{ic|bluez-utils}} に含まれている {{ic|hcitool}} を使うことができます。次のコマンドで利用可能なデバイスとその識別子・MAC アドレスのリストを表示することが可能です:
   
{{hc|$ hcitool dev|
+
{{hc|$ btmgmt info|
  +
Index list with 1 item
Devices:
 
  +
hci0: Primary controller
hci0 00:1B:DC:0F:DB:40
 
  +
addr 00:1A:7D:DA:71:10 '''version 6''' manufacturer 10 class 0x1c0104
  +
supported settings: powered connectable fast-connectable discoverable bondable link-security ssp br/edr hs le advertising secure-conn debug-keys privacy static-addr
  +
current settings: powered connectable discoverable bondable ssp br/edr le secure-conn
 
}}
 
}}
   
デバイスに関するもっと詳細な情報は {{ic|hciconfig}} を使うことで取得できます。
+
デバイスに関するもっと詳細な情報は、非推奨の {{ic|hciconfig}} を使うことで取得できます。({{AUR|bluez-utils-compat}})
   
 
{{hc|$ hciconfig -a hci0|
 
{{hc|$ hciconfig -a hci0|
359行目: 548行目:
 
Packet type: DM1 DM3 DM5 DH1 DH3 DH5 HV1 HV2 HV3
 
Packet type: DM1 DM3 DM5 DH1 DH3 DH5 HV1 HV2 HV3
 
Link policy: RSWITCH HOLD SNIFF PARK
 
Link policy: RSWITCH HOLD SNIFF PARK
Link mode: SLAVE ACCEPT
+
Link mode: SLAVE ACCEPT
 
Name: 'BlueZ (0)'
 
Name: 'BlueZ (0)'
 
Class: 0x000100
 
Class: 0x000100
383行目: 572行目:
 
==== CSR ドングル 0a12:0001 ====
 
==== CSR ドングル 0a12:0001 ====
   
デバイス {{ic|ID 0a12:0001 Cambridge Silicon Radio, Ltd Bluetooth Dongle (HCI モード)}} にはリグレッションのバグがあり、現在のところカーネルのバージョン3.9.11以下でしか動作しません。新しいバージョン用のパッチがあります。詳細は、 [https://bugzilla.kernel.org/show_bug.cgi?id=60824 Kernel Bug 60824] を参照してください。
+
デバイス {{ic|ID 0a12:0001 Cambridge Silicon Radio, Ltd Bluetooth Dongle (HCI mode)}} にはリグレッションのバグがあり、現在のところカーネルのバージョン 3.9.11 以下でしか動作しません。新しいバージョン用のパッチがあります。詳細は、 [https://bugzilla.kernel.org/show_bug.cgi?id=60824 Kernel Bug 60824] を参照してください。
   
 
=== Logitech Bluetooth USB ドングル ===
 
=== Logitech Bluetooth USB ドングル ===
389行目: 578行目:
 
Logitech のドングルには Embedded と HCI という二つのモードで動作するものがあります (例: Logitech MX5000)。embedded モードではドングルは USB デバイスをエミュレートするので PC は普通の USB マウス・キーボードを使っていると認識します。
 
Logitech のドングルには Embedded と HCI という二つのモードで動作するものがあります (例: Logitech MX5000)。embedded モードではドングルは USB デバイスをエミュレートするので PC は普通の USB マウス・キーボードを使っていると認識します。
   
USB BT ミニレシーバの小さな赤いボタンを押すと他のモードが有効になります。BT ドングルの赤いボタンを押しながらコンピュータに接続してください。ボタンを押して3-5秒で、Bluetooth アイコンがシステムトレイに表示されます [https://ubuntuforums.org/showthread.php?t=1332197]。
+
USB BT ミニレシーバの小さな赤いボタンを押すと他のモードが有効になります。BT ドングルの赤いボタンを押しながらコンピュータに接続してください。ボタンを押して3-5秒で、Bluetooth アイコンがシステムトレイに表示されます [https://ubuntuforums.org/showthread.php?t=1332197 Discussion]。
   
 
また、{{Pkg|bluez-hid2hci}} パッケージをインストールすることもできます。Logitech のドングルを接続すると自動的に切り替えます。
 
また、{{Pkg|bluez-hid2hci}} パッケージをインストールすることもできます。Logitech のドングルを接続すると自動的に切り替えます。
395行目: 584行目:
 
=== hcitool scan: Device not found ===
 
=== hcitool scan: Device not found ===
   
* Dell ラップトップ (例: Studio 15) では Bluetooth モードを HID から HCI に切り替える必要があります。{{Pkg|bluez-hid2hci}} パッケージをインストールすれば、[[udev]] が自動的に切り替えを行うはずです。また、次のコマンドを実行して手動で HCI に切り替えることもできます:
+
* 一部の Dell ラップトップ (例: Studio 15) では Bluetooth モードを HID から HCI に切り替える必要があります。{{Pkg|bluez-hid2hci}} パッケージをインストールすれば、[[udev]] が自動的に切り替えを行うはずです。また、次のコマンドを実行して手動で HCI に切り替えることもできます:
  +
 
# /usr/lib/udev/hid2hci
 
# /usr/lib/udev/hid2hci
   
* デバイスが表示されない場合、マシンに Windows オペレーティングシステムがあるときは Windows から bluetooth アダプターを有効にして見て下さい。
+
* デバイスが表示されない場合かつマシンに Windows オペレーティングシステムがあるときは Windows から bluetooth アダプターを有効にして見て下さい。
   
 
* 場合によっては次のコマンドで有効にできます:
 
* 場合によっては次のコマンドで有効にできます:
# hciconfig hci0 up
 
   
  +
# bluetoothctl power on
=== rfkill unblock: Do not unblock ===
 
   
  +
=== bluetoothctl: No default controller available ===
デバイスがソフトブロックされていて connman を動作させている場合、次を試してみて下さい:
 
$ connmanctl enable bluetooth
 
   
  +
一部のマザーボード Bluetooth コントローラにはバグがあります。バグがこの問題の原因であるか調べるには、{{ic|journalctl {{!}} grep hci}} を実行してください。このコマンドの出力に "command tx timeout" や "Reading Intel version command failed" のようなエントリが存在する場合、PC の電源を切り、電源ケーブルを物理的に外して数秒間放置してください。これにより、コントローラにファームウェアを再ロードさせます(通常の再起動では再ロードしません)。[https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1859592 こちら]のバグレポートを見てください。
=== コンピュータが表示されない ===
 
   
携帯からコンピュータ表示されないときは、PSCAN と ISCAN 有効にしてください:
+
デバイス [[rfkill]] によってブロックされていないとを確認してください
# enable PSCAN and ISCAN
 
$ hciconfig hci0 piscan
 
# check it worked
 
{{hc|$ hciconfig|
 
hci0: Type: USB
 
BD Address: 00:12:34:56:78:9A ACL MTU: 192:8 SCO MTU: 64:8
 
'''UP RUNNING PSCAN ISCAN'''
 
RX bytes:20425 acl:115 sco:0 events:526 errors:0
 
TX bytes:5543 acl:84 sco:0 commands:340 errors:0
 
}}
 
   
  +
また、一部の Intel カード(8260 など)は Bluetooth サービスによって正しく認識されないかもしれません。{{Pkg|bluez-utils}} の代わりに非推奨の {{AUR|bluez-utils-compat}} を使うことでこの問題が解決したというケースが報告されています。
{{Note|{{ic|/etc/bluetooth/main.conf}} の DiscoverableTimeout と PairableTimeout を確認してください。}}
 
   
  +
これは省電力機能が原因かもしれません。その場合、{{ic|1=btusb.enable_autosuspend=n}} [[カーネルパラメータ#設定|カーネルパラメータ]]により解決できる可能性があります。[https://bugzilla.redhat.com/show_bug.cgi?id=1573562 Red Hat Bugzilla – Bug 1573562] も参照してください。
以下のように {{ic|/etc/bluetooth/main.conf}} 内のデバイスクラスを変更してみて下さい:
 
# Default device class. Only the major and minor device class bits are
 
# considered.
 
#Class = 0x000100 (from default config)
 
Class = 0x100100
 
   
  +
時々、{{ic|btusb}} をオプション無しでアンロード・ロードすればコントローラを元に戻せることがあります:
上記のように設定することでコンピュータが認識されます。
 
   
  +
# modprobe -r btusb
=== Logitech のキーボードがペアリングできない ===
 
  +
# modprobe btusb
   
  +
=== systemd: Condition check resulted in Bluetooth service being skipped ===
Logitech キーボードとペアリングするときにパスキーがない場合は、次のコマンドを入力してください:
 
# hciconfig hci0 sspmode 0
 
   
  +
{{ic|bluetooth.service}} は {{ic|/sys/class/bluetooth}} ディレクトリが存在することのみを要求します。このディレクトリは {{ic|bluetooth}} カーネルモジュールにより作成される必要があります。このカーネルモジュールは、{{ic|systemd-udev}} が動作している Bluetooth ハードウェアデバイスを発見した場合にのみ、{{ic|systemd-udev}} により自動的にロードされます。
ペアリング後も、キーボードが接続されないときは、{{ic|hcidump -at}} の出力を確認してください。以下のメッセージのように接続・切断が繰り返し表示される場合:
 
   
  +
{{ic|/sys/class/bluetooth}} が存在しない場合、{{ic|lsmod}} コマンドを使って、Bluetooth カーネルモジュールがロードされているかどうかを確認してください。Bluetooth デバイスがあるにも関わらずロードされていない場合、[[カーネルモジュール#手動でモジュールを扱う|Bluetooth モジュールをロード]]し、{{ic|bluetooth.service}} を[[再起動]]することで、手動で起動できます。
status 0x00 handle 11 reason 0x13
 
Reason: Remote User Terminated Connection
 
   
  +
また、{{ic|bluetooth}} モジュールをロードする際に、対応するカーネル Bluetooth ドライバもロードする必要があります。{{ic|btusb}} が最も可能性がありますが、{{ic|btrtl,btintel,btbcm,bnep,btusb}} などの可能性もあります。
今のところの対処方法としては[[bluez4|昔の Bluetooth スタック]]をインストールするしかありません。
 
   
  +
{{ic|bluetooth.service}} の[[ユニットステータス]]を確認して、このサービスが起動しているかどうかを確認してください。
=== HSP/HFP プロファイル ===
 
   
  +
[https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=853207 Debian Bug report logs - #853207] も参照してください。
bluez5 では HSP/HFP プロファイル ([[TeamSpeak]], [[Skype]] などのための通信ヘッドセット) のサポートが削除されています。[[PulseAudio]] (バージョン6以上) などの HSP/HFP を自力で実装しているアプリケーションをインストールする必要があります。
 
   
  +
{{ic|bluetooth.service}} の起動に成功したが、まだ Bluetooth を使えないことがある場合(例: {{ic|scan on}} 時に {{ic|bluetoothctl}} が {{ic|org.Bluez.Error.NotReady}} のようなメッセージを発する)、コンピュータを再起動し、次のことをダブルチェックしてください: {{ic|/sys/class/bluetooth}} ディレクトリが存在するか; {{ic|lsmod}} の出力に正しい Bluetooth モジュールが含まれているか; ジャーナルのログを確認するなど。{{ic|systemd-udev}} は、また手動の変更をせずとも Bluetooth ハードウェアを自動的に認識するはずです。
=== Thinkpad Bluetooth レーザーマウス ===
 
   
  +
=== rfkill unblock: Do not unblock ===
Thinkpad Bluetooth レーザーマウスが数秒の間に (マウスを動かしたりボタンを押したときに) 何度も接続と切断を繰り返す場合、コード {{ic|0000}} を使ってペアリングしてみてください。
 
  +
  +
デバイスがソフトブロックされていて [[ConnMan]] を動作させている場合、次を試してみて下さい:
  +
$ connmanctl enable bluetooth
  +
  +
=== コンピュータが表示されない ===
  +
  +
携帯からコンピュータが表示されないときは、discoverable モードを有効にしてください:
  +
  +
# bluetoothctl discoverable on
  +
  +
discoverable モードがオンになっていることを確認してください:
  +
  +
{{hc|# bluetoothctl show|
  +
Powered: yes
  +
Discoverable: yes
  +
Pairable: yes
  +
}}
  +
  +
{{Note|{{ic|/etc/bluetooth/main.conf}} の {{ic|PairableTimeout}} と {{ic|DiscoverableTimeout}} を確認してください。}}
  +
  +
まだコンピュータが表示されない場合、以下のように {{ic|/etc/bluetooth/main.conf}} 内のデバイスクラスを変更してみて下さい:
  +
  +
# Default device class. Only the major and minor device class bits are
  +
# considered.
  +
#Class = 0x000100 # Computer Type (from default config)
  +
Class = 0x100100 # (Object-Transfer Service & Computer Type)
  +
  +
{{Note|場合によっては、{{ic|main.conf}} 内の {{ic|Class}} はデバイスの初期化後に上書きされます。なので、{{ic|hciconfig hci0 class 100100}} のようにクラスを直接設定してください。}}
  +
  +
あるユーザは、携帯からコンピュータを見られるようにするためにはこうするしか無いと報告しています。LG TV(そして、一部の他の機器)はオーディオデバイスから発見可能です。なので、{{ic|000414}} (soundbar クラス)を使用することでそのようなデバイスを発見できるようにできます。
  +
  +
Bluetooth デバイス/サービスのクラスを生成するには https://bluetooth-pentest.narod.ru/software/bluetooth_class_of_device-service_generator.html を見てください。
   
 
=== Foxconn / Hon Hai / Lite-On の Broadcom デバイス ===
 
=== Foxconn / Hon Hai / Lite-On の Broadcom デバイス ===
   
起動時にファームウェアを書き込む必要があるデバイスが存在します。ファームウェアは提供されていませんが、[https://github.com/jessesung/hex2hcd hex2hcd] ({{Pkg|bluez-utils}} でインストールされます) を使って Microsoft Windows の ''.hex'' ファイルから ''.hcd'' に変換することができます。
+
一部のデバイスでは、起動時にファームウェアを書き込む必要があます。ファームウェアは提供されていませんが、[https://github.com/jessesung/hex2hcd hex2hcd] ({{Pkg|bluez-utils}} でインストールされます) を使って Microsoft Windows の ''.hex'' ファイルから ''.hcd'' に変換することができます。
   
 
正しい ''.hex'' ファイルを取得するために、''lsusb'' でデバイスの vendor:product コードを検索してください。例:
 
正しい ''.hex'' ファイルを取得するために、''lsusb'' でデバイスの vendor:product コードを検索してください。例:
475行目: 680行目:
 
# modprobe btusb
 
# modprobe btusb
   
  +
これでデバイスが使えるようになるはずです。以上の設定を永続化させる方法は [https://bbs.archlinux.org/viewtopic.php?id=162688 BBS#162688] を参照。
場合によって (おそらく古いカーネルを使っている場合)、''brcm_patchram_plus'' ユーティリティを使って ''.hcd'' ファイルを書き込む必要があります (ユーティリティは {{AUR|brcm_patchram_plus-git}}{{Broken package link|{{aur-mirror|brcm_patchram_plus-git}}}} に含まれています)。まず、''dmesg'' でデバイスが ''btusb'' によって bluetooth デバイスとして認識されていることを確認してください。そして、以下のコマンドを実行 (''04ca 2006'' はあなたのデバイスの vendor product コードのペアに置き換えて下さい):
 
 
# echo '04ca 2006' > /sys/bus/usb/drivers/btusb/new_id
 
 
デバイスを立ち上げます:
 
 
# hciconfig hci0 up
 
   
  +
=== Intel の複合 WiFi と Bluetooth カード===
ファームウェアを書き込み:
 
   
  +
[[ワイヤレス設定#Bluetooth の共存]] を見てください。
# brcm_patchram_plus_usb --patchram fw-04ca_2006.hcd hci0
 
 
これでデバイスが使えるようになるはずです。以上の設定を永続化させる方法は [https://bbs.archlinux.org/viewtopic.php?id=162688 BBS#162688] を参照。
 
   
 
=== デバイスを接続した数秒後に切断してしまう ===
 
=== デバイスを接続した数秒後に切断してしまう ===
   
デバイスを接続したすぐ後に切断が発生し {{ic|journalctl}} の出力に以下のようなメッセージが確認できる場合:
+
デバイスを接続したすぐ後に切断が発生し、ジャーナルの出力に以下のようなメッセージが確認できる場合:
   
 
bluetoothd: Unable to get connect data for Headset Voice gateway: getpeername: Transport endpoint is not connected (107)
 
bluetoothd: Unable to get connect data for Headset Voice gateway: getpeername: Transport endpoint is not connected (107)
 
bluetoothd: connect error: Connection refused (111)
 
bluetoothd: connect error: Connection refused (111)
   
おそらく別のオペレーティングシステムで同一の Bluetooth アダプタを使ってデバイスがペアリングされていることが原因です (例: デュアルブート)。一部のデバイスは同一の MAC アドレス (Bluetooth アダプタ) に対して複数のペアリングを関連付けた場合に対処できません。デバイスをペアリングしなおすことで解決します。まずデバイスを削除してください:
+
おそらく別のオペレーティングシステムで同一の Bluetooth アダプタを使ってデバイスがペアリングされていることが原因です (例: デュアルブート)。一部のデバイスは同一の MAC アドレス (例: Bluetooth アダプタ) に対して複数のペアリングを関連付けた場合に対処できません。この問題を解決するには [[#ュアルブートペアリング]] の指示に従ってください
   
  +
=== スキャンしてもデバイスが表示されない ===
$ bluetoothctl
 
[bluetooth]# devices
 
Device XX:XX:XX:XX:XX:XX My Device
 
[bluetooth]# remove XX:XX:XX:XX:XX:XX
 
   
  +
Bluetooth Low Energy を使用しているデバイスは bluetoothctl でスキャンしても表示されないことがあります (例: Logitech MX Master)。{{aur|bluez-utils-compat}} をインストールしてから以下を実行してみてください:
そして {{ic|bluetooth.service}} を[[再起動]]して Bluetooth アダプタをオンにし、デバイスをスキャンしてからペアリングしてください。Bluetooth マネージャによっては、デバイスを探知するために再起動が必要なこともあります。
 
   
  +
{{hc|# bluetoothctl|
=== エラーによってデバイスが接続できない ===
 
  +
[NEW] Controller (MAC) myhostname [default]
  +
}}
   
  +
{{hc|[bluetooth]# power on|
{{ic|journalctl}} の出力に以下のようなメッセージが確認できる場合:
 
  +
[CHG] Controller (MAC) Class: 0x0c010c
  +
Changing power on succeeded
  +
[CHG] Controller (MAC) Powered: yes
  +
}}
   
  +
{{hc|[bluetooth]# scan on|
a2dp-source profile connect failed for 9C:64:40:22:E1:3F: Protocol not available
 
  +
Discovery started
  +
[CHG] Controller (MAC) Discovering: yes
  +
}}
   
  +
他のターミナルで以下を実行:
{{Pkg|pulseaudio-bluetooth}} をインストールして PulseAudio を再起動してみてください。ファイル転送しか使っていない場合でも上記のエラーが発生することがあります。
 
   
  +
# hcitool lescan
=== スキャンしてもデバイスが表示されない ===
 
   
  +
デバイスが表示されるまで待機してから hcitool を {{ic|Ctrl+c}} で閉じてください。bluetoothctl からデバイスが認識されたら通常通りにペアリングできます。
Bluetooth Low Energy を使用しているデバイスは bluetoothctl でスキャンしても表示されないことがあります (例: Logitech MX Master)。{{aur|bluez-utils-compat}} をインストールしてから以下を実行してみてください:
 
   
  +
=== シンボリックリンクのせいで、転送されたファイルを受信できない ===
# systemctl start bluetooth.service
 
# bluetoothctl
 
[NEW] Controller (MAC) myhostname [default]
 
[bluetooth]# power on
 
[CHG] Controller (MAC) Class: 0x0c010c
 
Changing power on succeeded
 
[CHG] Controller (MAC) Powered: yes
 
[bluetooth]# scan on
 
Discovery started
 
[CHG] Controller (MAC) Discovering: yes
 
   
  +
有効な Bluetooth 接続でファイルの受信に失敗する場合、問題はファイルの転送パス内のシンボリックリンクである場合があります。ジャーナルに以下のようなログが現れます:
他のターミナルで以下を実行:
 
   
  +
Jun 18 11:18:13 ember obexd[3338969]: open(/home/me/.cache/obexd/MOC740): Operation not permitted (1)
# hcitool lescan
 
  +
  +
エラーメッセージに表示されれたパス内にシンボリックリンクが含まれている場合、obexd はデフォルトで[https://git.kernel.org/pub/scm/bluetooth/bluez.git/tree/obexd/plugins/filesystem.c#n90 それを拒否します]。この挙動は、[[systemd#ドロップインファイル|ドロップインファイル]]を {{ic|obex.service}} [[systemd/ユーザー|ユーザサービス]]に対して使うことにより初期化時に上書きできます。
  +
  +
{{hc|~/.config/systemd/user/obex.service.d/10-symlink.conf|2=
  +
[Service]
  +
ExecStart=
  +
ExecStart=/usr/lib/bluetooth/obexd --symlinks
  +
}}
   
  +
その後、ユーザの ''systemd'' マネージャの設定を[[リロード]]し、{{ic|obex.service}} ユーザユニットを[[再起動]]してください。
デバイスが表示されるまで待機してから hcitool を Ctrl+C で閉じてください。bluetoothctl からデバイスが認識されたら通常通りにペアリングできます。
 
   
 
=== ヘッドホンとマウスの干渉 ===
 
=== ヘッドホンとマウスの干渉 ===
   
Bluetooth マウスとキーボードを同時に使用しているときに音声が途切れる場合は #23 で参照されているように、次を試してくみてださい。 https://bugs.launchpad.net/ubuntu/+source/bluez/+bug/424215
+
Bluetooth マウスとキーボードを同時に使用しているときに音声が途切れる場合は #23 https://bugs.launchpad.net/ubuntu/+source/bluez/+bug/424215 で参照されているように、次を試してくみてださい。
   
 
# hciconfig hci0 lm ACCEPT,MASTER
 
# hciconfig hci0 lm ACCEPT,MASTER
551行目: 753行目:
 
Timeout=216
 
Timeout=216
   
hcitool dev コマンドを実行すると、ローカルアダプタの MAC アドレスを確認できます。また、 {{ic|hcitool con}} コマンドを実行すると、現在接続されているリモートデバイスの MAC アドレスを確認できます。
+
{{ic|hcitool dev}} コマンドを実行すると、ローカルアダプタの MAC アドレスを確認できます。また、 {{ic|hcitool con}} コマンドを実行すると、現在接続されているリモートデバイスの MAC アドレスを確認できます。
   
 
=== サスペンド/リジューム後にアダプタが消える ===
 
=== サスペンド/リジューム後にアダプタが消える ===
562行目: 764行目:
 
...
 
...
 
|__ Port 3: Dev 3, If 0, Class=Wireless, Driver=btusb, 12M
 
|__ Port 3: Dev 3, If 0, Class=Wireless, Driver=btusb, 12M
ID 8087:0025 Intel Corp.
+
ID 8087:0025 Intel Corp.
 
|__ Port 3: Dev 3, If 1, Class=Wireless, Driver=btusb, 12M
 
|__ Port 3: Dev 3, If 1, Class=Wireless, Driver=btusb, 12M
ID 8087:0025 Intel Corp.
+
ID 8087:0025 Intel Corp.
 
...
 
...
 
</nowiki>}}
 
</nowiki>}}
570行目: 772行目:
 
この場合、ベンダー ID は 8087 で、製品 ID は 0025 です。
 
この場合、ベンダー ID は 8087 で、製品 ID は 0025 です。
 
次に、 {{pkg|usb_modeswitch}} を使用してアダプタをリセットします。
 
次に、 {{pkg|usb_modeswitch}} を使用してアダプタをリセットします。
  +
# usb_modeswitch -R -v <ベンダーID> -p <プロダクトID>
 
  +
# usb_modeswitch -R -v ''vendor_ID'' -p ''product_ID''
   
 
=== カーネル 5.9 以降のすべての BLE デバイスの問題 ===
 
=== カーネル 5.9 以降のすべての BLE デバイスの問題 ===
   
v5.9 以降のカーネルでは BLE 接続でリンク層プライバシーを使用しようとしスタックします。ペアリング後にデバイスが動作しても、リブートまたはサスペンド後にペアリングが解除される場合、おそらくこれが原因です。
+
v5.9 以降のカーネルでは、カーネルの Bluetooth スタックは BLE 接続でリンク層プライバシーを使用しようとします。ペアリング後にデバイスが動作しても、リブートまたはサスペンド後にペアリングが解除される場合、おそらくこれが原因です。
   
この問題を回避するには、 {{ic|/var/lib/bluetooth/<アダプターMACアドレス>/<デバイスMACアドレス>/info}} を開いて次の行を削除し、{{ic|bluetooth.service}} を再起動します
+
この問題を回避[https://lkml.kernel.org/lkml/D577711C-4AF5-4E82-8A17-E766B64E15A9@holtmann.org/] するには、 {{ic|/var/lib/bluetooth/''アダプターMACアドレス''/''デバイスMACアドレス''/info}} を開いて次の行を削除し、{{ic|bluetooth.service}} を再起動します:
   
 
{{bc|1=
 
{{bc|1=
583行目: 786行目:
 
}}
 
}}
   
Archフォーラム [https://bbs.archlinux.org/viewtopic.php?id=259954 discussion] 参照してください。
+
Arch フォーラムの関連する [https://bbs.archlinux.org/viewtopic.php?id=259954 discussion] 参照してください。
   
  +
=== Bluetooth が suspend-to-idle 中のデバイスを即座に立ち上げてしまう ===
=== Continually connect/disconnect with tp-link UB400 and xbox controller ===
 
   
  +
[[サスペンドとハイバネート|suspend-to-idle/S2idle/S0ix/Modern Standby]] する能力のあるシステムにおいては、Bluetooth コントローラがスリープ中も有効化されたままになります。通常、これにより、Bluetooth デバイスが接続されていると、システムが[https://bugzilla.kernel.org/show_bug.cgi?id=200039 スリープに移行した直後にスリープが解除されてしまいます]。
Edit {{ic|/etc/bluetooth/main.conf}} and set below settings (uncomment/change value):
 
  +
  +
これを防ぐために、スリープに移行する前に Bluetooth を完全に無効化できます。{{Pkg|bluez-utils}} をインストールし、以下のファイルを作成してください:
  +
  +
{{hc|/etc/systemd/system/bluetooth-disable-before-sleep.service|2=
  +
[Unit]
  +
Description=Disable Bluetooth before going to sleep
  +
Before=sleep.target
  +
Before=suspend.target
  +
Before=hybrid-sleep.target
  +
Before=suspend-then-hibernate.target
  +
StopWhenUnneeded=yes
  +
  +
[Service]
  +
Type=oneshot
  +
RemainAfterExit=yes
  +
  +
ExecStart=/usr/bin/bluetoothctl power off
  +
ExecStop=/usr/bin/bluetoothctl power on
  +
  +
[Install]
  +
WantedBy=sleep.target
  +
WantedBy=suspend.target
  +
WantedBy=hybrid-sleep.target
  +
WantedBy=suspend-then-hibernate.target
  +
}}
  +
  +
このサービスを[[有効化]]し、スリープに移行した時に Bluetooth デバイスが切断されることや、スリープからの復帰時に Bluetooth が再び接続されることを確認してください。
  +
  +
この回避策を使用すると、[[#サスペンドからの復帰|Bluetooth マウス/キーボードを使ってシステムをスリープから復帰させること]]ができなくなります。
  +
  +
=== tp-link UB400 と Xboxのコントローラが接続/切断を繰り返す ===
  +
  +
{{ic|/etc/bluetooth/main.conf}} を編集して、以下の設定をします(アンコメント/値を変更します)
   
 
[General
 
[General
598行目: 834行目:
 
AutoEnable=true
 
AutoEnable=true
   
Then [[restart]] the {{ic|bluetooth.service}}.
+
その後、{{ic|bluetooth.service}} を [[再起動]] します。
   
You can see relevant [https://github.com/atar-axis/xpadneo/issues/166 discussion on xpadneo] but the xpadneo driver is not needed.
+
関連する [https://github.com/atar-axis/xpadneo/issues/166 xpadneo に関する議論] を見ることができますが、xpadneo のドライバは必要ありません。
   
  +
=== 実験的な機能を有効化する ===
=== カーネル 5.10 の一部の Bluetooth ドライバの問題 ===
 
   
  +
Bluez スタックでは、バグがあるかもしれない新しい機能が ''Experimental'' オプションに含まれています。このオプションに含まれている機能は、実験的な機能の安定化が決まったり、不要と判断されたりすることにより、時間と共に変化します。これを有効化するには、設定ファイルの該当する行をアンコメントしてください:
v5.10 以降、一部の Qualcomm Atheros bluetooth チップセットドライバーが動作しなくなり、次のエラーが表示される場合:
 
   
  +
{{hc|/etc/bluetooth/main.conf|2=
{{hc|journalctl {{!}} grep hci0 |
 
  +
# Enables experimental features and interfaces.
Feb 22 18:40:24 user kernel: Bluetooth: hci0: don't support firmware rome 0x31010000
 
  +
# Defaults to false.
  +
Experimental = true
 
}}
 
}}
   
  +
あるいは、{{ic|bluetooth.service}} を[[編集]]して、{{ic|--experimental}} フラグを追加することもできます。以下の[[ドロップインファイル]]のように:
Linux.org Bugzilla で関連する [https://bugzilla.kernel.org/show_bug.cgi?id=210681 バグレポート] を参照してください。
 
  +
  +
{{hc|/etc/systemd/system/bluetooth.service.d/override.conf|2=
  +
[Service]
  +
ExecStart=
  +
ExecStart=/usr/lib/bluetooth/bluetoothd --experimental
  +
}}
  +
  +
== 参照 ==
  +
  +
* [https://averylarsen.com/2019/12/20/keeping-bluetooth-devices-paired-between-linux-and-windows/ Keeping Bluetooth devices paired between Linux and Windows]
  +
* [https://nullroute.eu.org/~grawity/bluetooth-key-sharing.html Bluetooth link keys on dual-boot systems]
   
  +
{{TranslationStatus|Bluetooth|2022-08-08|740713}}
パッチを当ててモジュールを再構築するか ([https://github.com/BrandomRobor/btusb-210681-fix btusb-210681-fix])、古い (5.9.x) カーネルを使うことができます。このバグは {{Pkg|linux}} 5.11.arch2-1 で修正されました。
 

2022年11月9日 (水) 01:16時点における版

関連記事

Bluetooth は携帯電話やコンピュータなどの電子デバイス用の近距離無線通信規格です。Linux においては、Bluetooth プロトコルスタックの実装として BlueZ が標準的に使われています。

目次

インストール

  1. Bluetooth プロトコロスタックを提供する、bluez パッケージをインストールします。
  2. bluetoothctl ユーティリティを提供する、bluez-utilsインストールします。または bluez-utils-compatAURインストールして、非推奨の BlueZ tools を追加します。
  3. 一般的な Bluetooth ドライバは、btusb カーネルモジュールです。このモジュールがロードされているかどうかを確認してください。もしロードされていなければ、モジュールをロードしてください。
  4. bluetooth.service起動/有効化します。
ノート:
  • デフォルトでは bluetooth デーモンは lp グループのメンバーのユーザーだけに bnep0 デバイスを提供します。bluetooth テザリングに接続するときはユーザーをグループに追加しておいてください。必要なグループは /etc/dbus-1/system.d/bluetooth.conf ファイルで変更することができます。
  • Bluetooth アダプターには Wi-Fi カードがバンドルされているものもあります (例: Intel Centrino)。これらの Bluetooth アダプターをカーネルから見えるようにするには、まず Wi-Fi カードを有効にする必要があります (大体はラップトップ上のキーボードショートカットを使う)。
  • Bluetooth カードによってはネットワークアダプタと衝突することがあります (例: Broadcom)。したがって、ネットワークサービスを起動する前に Bluetooth デバイスを接続するようにしてください。
  • hcitool や hciconfig などのツールは上流では非推奨となっており、bluez-utils にはもはや含まれていません。アップデートされないことが決まっているため、スクリプトの中で使用している場合は使わないように書き換えることを推奨します。それでも使いたい場合は bluez-utils-compatAUR をインストールしてください。詳しい情報は FS#53110Bluez メーリングリスト を参照。

フロントエンド

コンソール

  • bluetoothctl — シェルからデバイスをペアリングすることは、最も単純で信頼性の高いオプションの一つです。
http://www.bluez.org/ || bluez-utils
  • bluetuith — ターミナルユーザインターフェイスによる Bluetooth マネージャを提供します。OBEX ファイル転送とマウスのサポート付きで、デバイス/アダプタを簡単に管理できます。
https://www.github.com/darkhz/bluetuith || bluetuithAUR
ヒント: bluetoothctl コマンドを自動化するには、echo -e "command1\ncommand2\n" | bluetoothctl または bluetoothctl -- command を使用します。

グラフィカル

以下のパッケージでは、Bluetooth をカスタマイズするためのグラフィカルインターフェイスが利用可能です。

  • GNOME BluetoothGNOME の Bluetooth ツール。
    • gnome-bluetooth-3.0 バックエンドを提供 (gnome-bluetooth はレガシーです)
    • gnome-shell ステータスモニターアプレットを提供
    • gnome-control-center は設定用のフロントエンド GUI を提供しており、アクティビティ概要で Bluetooth と入力するか、 gnome-control-center bluetooth コマンドでアクセスすることができます。
    • また、bluetooth-sendto コマンドを直接起動して、リモートデバイスにファイルを送信することも可能です。
    • nautilus-bluetoothAUR は Nautilus の右クリックメニューに "Bluetoothで送信" エントリを追加します。
    • ファイルを受信するには、Bluetooth 設定パネルを開きます。Bluetooth パネルが開いている間のみ受信できます。
    • Thunar のファイルプロパティメニューの 送信先 メニューに Bluetooth エントリを追加するには、説明 ここ を参照してください。(設定が必要なコマンドは bluetooth-sendto %F です)
https://wiki.gnome.org/Projects/GnomeBluetooth ||
  • BluedevilKDE の Bluetooth ツール。 Dolphin やシステムトレイに Bluetooth のアイコンが表示されていない場合は、システムトレイオプションで有効にするか、ウィジェットを追加してください。アイコンをクリックすることで、Bluedevil の設定や Bluetooth デバイスの検出が可能です。KDE システム設定からもインターフェースが利用できます。
https://invent.kde.org/plasma/bluedevil || bluedevil
  • Blueberry — GNOME Bluetooth から Linux Mint でスピンオフした Blueberry は全てのデスクトップ環境で動作します。Obex Object Push によるファイル受信をサポートしていません。
https://github.com/linuxmint/blueberry || blueberry
  • Blueman — フル機能の Bluetooth マネージャー
https://github.com/blueman-project/blueman || blueman
  • ObexFTP — OBEX 対応のデバイスとの間でファイルを転送するツール。
http://dev.zuckschwerdt.org/openobex/wiki/ObexFtp || obexftpAUR

ペアリング

ノート: Bluetooth デバイスを使用する前に、rfkill でブロックされていないことを確認してください。

このセクションでは、bluetoothctl CLI を使って bluez5 を直接設定する方法を説明しています。これは、代替のフロントエンドツール(例えば GNOME Bluetooth)を使用している場合は必要ないかもしれません。

正確な手順は、利用するデバイスとその入力機能によります。以下は bluetoothctl を使ってデバイスをペアリングする一般的な説明です。

bluetoothctl 対話コマンドを実行してください。help と入力することで利用できるコマンドのリストを表示できます。

  1. (任意) select MAC Address と入力してデフォルトのコントローラを選択してください。
  2. power on と入力してコントローラの電源を入れて下さい。デフォルトではオフになっており、起動するたびにオフになります、#起動後/再開後に自動で有効にする を見てください。
  3. devices と入力して、ペアリングしたいデバイスの MAC アドレスを取得してください。
  4. デバイスが表示されないときは scan on コマンドでデバイス検出モードにしてください。
  5. agent on でエージェントをオンにするか、特定のエージェントを選択してください: agent の後にタブキーを2回押すと、利用可能なエージェントのリストが表示されるはずです。Bluetooth エージェントとは、Bluetooth の 'ペアリングコード' を管理するもののことです。エージェントは、'ペアリングコード'の受信に応答したり、'ペアリングコード'を送信したりできます。ほとんどの場合、default-agent を使うのが適切なはずです。[1]
  6. pair MAC Address と入力することでペアリングを実行します (タブ補完が使えます)。
  7. PIN がないデバイスを使う場合は、手動でデバイスを信頼する必要があるかもしれません。trust MAC Address と入力してこれを行なって下さい。デバイスを信頼するには trust MAC_address と入力してください。
  8. connect MAC_address を使って接続を確立してください。

セッションの例は以下のようになります:

$ bluetoothctl
[NEW] Controller 00:10:20:30:40:50 hostname [default]
[bluetooth]# agent KeyboardOnly
Agent registered

[bluetooth]# default-agent
Default agent request successful

[bluetooth]# power on
Changing power on succeeded
[CHG] Controller 00:10:20:30:40:50 Powered: yes

[bluetooth]# scan on
Discovery started
[CHG] Controller 00:10:20:30:40:50 Discovering: yes
[NEW] Device 00:12:34:56:78:90 device name
[CHG] Device 00:12:34:56:78:90 LegacyPairing: yes

[bluetooth]# pair 00:12:34:56:78:90
Attempting to pair with 00:12:34:56:78:90
[CHG] Device 00:12:34:56:78:90 Connected: yes
[CHG] Device 00:12:34:56:78:90 Connected: no
[CHG] Device 00:12:34:56:78:90 Connected: yes
Request PIN code
[agent] Enter PIN code: 1234
[CHG] Device 00:12:34:56:78:90 Paired: yes
Pairing successful
[CHG] Device 00:12:34:56:78:90 Connected: no

[bluetooth]# connect 00:12:34:56:78:90
Attempting to connect to 00:12:34:56:78:90
[CHG] Device 00:12:34:56:78:90 Connected: yes
Connection successful

デュアルブートペアリング

デュアルブート環境でデバイスをペアリングするには、Linux インストール時にペアリング・キーを手動で変更し、両方のシステムで一致するようにする必要があります。

設定方法

これを行うには、まず Arch Linux 上でデバイスのペアリングを行います。その後、もう一方の OS を再起動し、デバイスをペアリングします。ここでペアリング・キーを取り出す必要がありますが、まず Bluetooth デバイスの電源を切り、接続を試みないようにします。

ノート: (MX Master 3 などの)一部の Logitech デバイスは、デバイスが新しいシステムとペアリングするたびに MAC アドレスの値を1つ増加させます。プロセスの最後にこれに対処するために、このケースに該当するかどうかを確認する必要があります。

Windows の場合

Windows での展開

リンクキーを含むレジストリキーは、SYSTEM アカウント でしかアクセスできないため、ログインすることができません。そのため、regedit.exeSYSTEM として実行するには、Windows Sysinternals 公式サイトにある Microsoft の PsExec ツールが必要になります。

PsTools をダウンロードし、PsExe64.exe を解凍します。

コマンドシェル の管理者インスタンスで、解凍した EXE の場所からレジストリエディタを起動してください:

.\PsExec64.exe -s -i regedit.exe

レジストリエディタで、以下のレジストリキーに移動します。

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\BTHPORT\Parameters\Keys

このキーの中に各 Bluetooth アダプターの MAC アドレス別のキーがあります。複数のキーがあり、どれを使えばいいかわからない場合は、このガイドに従って、目的の Bluetooth アダプタの MAC アドレスを検索してください。

目的のデバイス・アダプタ・キーの中に、同じように MAC アドレス別に、ペアリングされた各デバイスのバイナリ値があります。

インストール間で共有したい各ペアデバイスについて、キー全体を右クリックし、.reg ファイルとしてエクスポートしてください。これはテキストファイルで、このファイルからキーをコピーできます。

このファイルにバイナリキーが1つだけ存在する場合、Bluetooth 5.1 デバイスではなく、そのペアリングキーが必要なもの全てであるということになります。

ペアリングしたデバイスに複数のキー (LTKIRK など) が存在する場合、これは Bluetooth 5.1 デバイスであるということになります。これらのキーを使う方法は #Bluetooth 5.1キーの準備 を見てください。

最後に、キーを Linux 環境にインポートするために #終わりに へ進んでください。

Linux での展開
ノート: Windows パーティションが Bitlocker で暗号化されている場合、Linux から chntpw を使ってアクセスすることはできません。

Arch をリブートしてください。chntpw をインストールして、Windows システムドライブをマウントします。

$ cd /path/to/windows/system/Windows/System32/config
$ chntpw -e SYSTEM
ノート: CurrentControlSet の代わりに ControlSet00X(X は任意の数字)と表示されることがあります。ls コマンドで確認してください。

chntpw 環境の中で以下を実行します。

> cd CurrentControlSet\Services\BTHPORT\Parameters\Keys

もしくは

> cd ControlSet00X\Services\BTHPORT\Parameters\Keys

次に、Bluetooth アダプタの MAC アドレスを取得し、そのフォルダを入力します。

> ls
> cd your-device's-mac-address

ペアリングしているデバイスにも同じことをします。Bluetooth 5.1 デバイスでない場合、ペアリングキーしか表示されません:

> ls
Node has 0 subkeys and 1 values
size  type        value name    [value if type DWORD]
16    REG_BINARY <123456789876>

Bluetooth 5.1 デバイスである場合、hex を通して、デバイスのキーを取得します。

> hex 123456789876
:00000 XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX (いくつかの他の文字)

”XX" はペアリング・キーです。どのキーがどの MAC アドレスにマッピングされているか、メモしておいてください。

Bluetooth 5.1 デバイスである場合、1つのデバイスに対応するキーが複数表示されます。

Node has 0 subkeys and 8 values
  size     type              value name             [value if type DWORD]
    16  3 REG_BINARY         <LTK>
     4  4 REG_DWORD          <KeyLength>               16 [0x10]
     8  b REG_QWORD          <ERand>
     4  4 REG_DWORD          <EDIV>                 37520 [0x9290]
    16  3 REG_BINARY         <IRK>
     8  b REG_QWORD          <Address>
     4  4 REG_DWORD          <AddressType>              1 [0x1]
     4  4 REG_DWORD          <AuthReq>                 45 [0x2d]

これらのキーを使う方法は #Bluetooth 5.1キーの準備 を見てください。必要な値を得るには hex value_name を使います。

最後に、キーを Linux 環境にインポートするために #終わりに へ進んでください。

Bluetooth 5.1キーの準備
この記事またはセクションは加筆を必要としています。
理由: We are still working on getting a comprehensive idea of how these work across vendors. For now, documenting specific devices' compatibility with these methods is helpful - especially non-Logitech data points. (議論: Talk:Bluetooth#Logitech Bluetooth Devices Mac Address Increment)

展開した Bluetooth 5.1 のキーとパラメータは、Linux のものにマッピングする必要があります。要求されたファイル作成し、適切な内容を書き込んでください。#終わりに でそれらをインストールします。この処理はデバイスに依存し、いくつかの値は操作する必要があります。操作を行うコードユーティリティは以下に記載します。

  • Logitech MX Master 3、Pebble M350 マウス、K580 キーボード、そして Logitech BT5.1 デバイスの場合:
    • LTKSlaveLongTermKey.KeyPeripheralLongTermKey.Key両方 にマップします。16進数の桁の間にあるスペースは取り除いてください。
    • IRKIdentityResolvingKey.Key にマップします。16進数の桁の間にあるスペースは取り除いてください。
    • ERand0 である必要があります。操作は必要ありません。
    • EDiv0 である必要があります。操作は必要ありません。
  • 他のデバイスの場合:
    • LTKLongTermKey.Key に対応します。16進数の桁の間にあるスペースは取り除いてください。
    • ERandRand にマップします。オクテットの順番を逆にして、全体の数字を10進数に変換してください。
    • EDIVEDiv にマップします。16進数の桁の間にあるスペースは取り除いてください。
ノート:
>>> 'key_value'.replace(' ', )
  • 以下の Python コードは ERand の変換を行います:
>>> ERand=' 63 02 84 B8 5D 40 44 DF   '
>>> ERand=list(reversed(ERand.strip().split()))
>>> int("".join(ERand), 16)
16088054540146049635

一般的なケースの例として:

  • 48 4D AF CD 0F 92 22 88 0A 52 9A F4 76 DA 8B 94LTK は、484DAFCD0F9222880A529AF476DA8B94LongTermKey.Key となります。
  • 63 02 84 B8 5D 40 44 DFERand は、16088054540146049635Rand となります。
  • 37520EDIV は、37520EDiv となります。

macOS の場合

この記事またはセクションの正確性には問題があります。
理由: These instructions will not work for Bluetooth 5.1 devices such as the Logitech MX Master 3. A step should be added for locating those, and then #Bluetooth 5.1キーの準備 should be generalized (if needed) to cover macOS. (議論: トーク:Bluetooth#)

macOS を起動し、ターミナルを開きます。

  • Sierra 以前の OS の場合、以下を実行します。
# defaults read /private/var/root/Library/Preferences/blued.plist LinkKeys > ~/bt_keys.txt
  • High Sierra 以降をお使いの場合は、以下を実行してください。
# defaults read /private/var/root/Library/Preferences/com.apple.bluetoothd.plist LinkKeys > ~/bt_keys.txt

古いバージョンの macOS(High Sierra およびそれより古いバージョン)の場合、キーを反転する必要があります。例えば 98 54 2f aa bb cc dd ee ff gg hh ii jj kk ll mmMM LL KK JJ GG FF EE DD CC BB 2F 54 98 となります。

bt_keys.txt ファイルを Arch Linux から読み込み可能なドライブにコピーします。Arch Linux を起動してください。

終わりに

キーを手に入れたら、ユーザーを root に変更し、以下を実行してください:

# cd /var/lib/bluetooth/BT-Adapter-MAC-address

ここには、ペアリングした Bluetooth 機器ごとのフォルダがあります。Arch とデュアルブートでペアリングしたい各デバイスについて、以下を実行します:

# cd device-MAC-address
ノート: この時点で、ペアリング時に MAC アドレスの値を増加させるデバイスを使用している場合、MAC アドレスのディレクトリを、値を増加させたパスへ移動させる必要があります。Windows から MAC アドレスをコピーするか、あるいは、各オクテットが2桁の16進数であることに注意しながら自分で値を増加させてください。

ペアリングキーを持っている場合(つまり、これは Bluetooth 5.1 デバイスでない)、info ファイルを編集し、[LinkKey] 以下のキーを変更します。例えば:

info
[LinkKey]
Key=XXXXXXXXXXXXXXX
ノート: すべての文字が大文字であることを確認する必要があります。スペースはすべて削除してください。

Bluetooth 5.1 キーを持っている場合、代わりにキーファイルを MAC アドレスのディレクトリにコピーする必要があります。

次に、bluetooth.servicepulseaudio再起動 してください。(pulseaudio -k && pulseaudio --start を使ってください。)

これで、デバイスに接続できるはずです。

ノート: Bluetooth マネージャによっては、デバイスに再接続するために完全な再起動が必要な場合があります。

設定

起動後/再開後に自動で有効にする

bluez 5.65 以降、BlueZ はデフォルトで、サービスの起動時やサスペンドからの復帰時にすべての Bluetooth アダプタをオンにします。[2]

アダプタを自動で有効化させたくない場合(例えば、ポータブルデバイスなどでバッテリを節約したい場合)、/etc/bluetooth/main.conf[Policy] セクションで AutoEnable=false を設定してください:

/etc/bluetooth/main.conf
[Policy]
AutoEnable=false

この設定を行っても、#ペアリング で説明されているように power on を実行すれば、アダプタを手動でオンにできます。

起動時に発見可能にする

デバイスが常に見えていて、かつ直接接続できる必要がある場合:

/etc/bluetooth/main.conf
[General]
DiscoverableTimeout = 0

サスペンドからの復帰

Bluetooth キーボードやマウスなどをサスペンドから起動できるようにする。まず、bios の設定を確認し、サスペンドからの復帰 が無効になっていないことを確認します。多くの場合、マザーボードからの Bluetooth は USB デバイスです。

bluetooth アダプターのベンダーコードとデバイス ID を確認してください:

$ lsusb | grep bluetooth -i
Bus 001 Device 002: ID 8087:0039 Intel Corp. AX200 Bluetooth

サスペンドからの復帰を有効にするために、ベンダコードとデバイス ID の新しい udev ルールを追加してください:

/etc/udev/rules.d/91-keyboard-mouse-wakeup.rules
SUBSYSTEM=="usb", ATTRS{idVendor}=="8087", ATTRS{idProduct}=="0039" RUN+="/bin/sh -c 'echo enabled > /sys$env{DEVPATH}/../power/wakeup;'"

復帰後に Bluetooth キーボードを自動的に再設定して、例えば異なるキーマップやキーのリピート速度をもたせたりする(詳細は Xorg でのキーボード設定#typematic delay と rate の調整xmodmap)には、実行可能なスクリプトを作成してください。

configure_keyboard.sh
#!/bin/sh
export DISPLAY=:0
xset r rate 220 30
xmodmap /your/path/to/.Xmodmap

そして、上記のような追加の udev ルールを作成してください。

/etc/udev/rules.d/92-keyboard-reconfiguration-wakeup.rules
SUBSYSTEM=="usb", ATTRS{idVendor}=="8087", ATTRS{idProduct}=="0039" RUN+="/your/path/to/configure_keyboard.sh"

オーディオ

通常は、オーディオサーバーと Bluetooth を統合するために追加の手順を実行する必要があります。これについては、以下のセクションで説明します。

Bluetooth オーディオや Bluetooth ヘッドセットなどの情報については Bluetooth ヘッドセット のページを見てください。

PulseAudio

Bluetooth ヘッドフォンやスピーカーのようなオーディオ機器を使うには pulseaudio-bluetooth パッケージのインストールが必要です。インストールを反映させるために、pulseaudio を再起動してください: pulseaudio -k。デフォルトの Pulseaudio インストールでは、即座に Bluetooth デバイスからスピーカーにオーディオをストリーミングできるはずです。

システム全体の PulseAudio 設定がある場合は、デーモンを実行しているユーザー(通常は pulse) が lp グループに属しており、PulseAudio 設定に Bluetooth モジュールをロードしていることを確認します:

/etc/pulse/system.pa
...
load-module module-bluetooth-policy
load-module module-bluetooth-discover
...

これは任意ですが、Bluetooth デバイスの接続時にすべてのオーディオをそのデバイスに自動で切り替えたい場合、load-module module-switch-on-connect を追加してください。

PipeWire

v0.3.19 以降の PipeWire はデフォルトで Bluetooth をサポートしています。

ALSA

ノート: Bluez5 は ALSA の直接統合を中止し、 PulseAudio のみをサポートします。 PulseAudio を使用できない場合、または使用しない場合は、次の手順に従ってください。

まず、 Bluetooth オーディオデバイスが正しくペアリングされ、システムに接続されていることを確認します。

次に、 bluez-alsa-gitAUR をインストールし、 bluealsa サービスを開始(そして、有効に) し、ユーザーを audio グループに追加します。

次のコマンドを実行して、すべてが意図したとおりに動作しているかどうかを確認します(XX:XX:XX:XX:XX:XXFILE.wav の部分は置き換えてください):

$ aplay -D bluealsa:SRV=org.bluealsa,DEV=XX:XX:XX:XX:XX:XX,PROFILE=a2dp FILE.wav

最後に、 ~/.asoundrc に次の行を追加します。

~/.asoundrc
defaults.bluealsa {
    service "org.bluealsa"
    device "XX:XX:XX:XX:XX:XX"
    profile "a2dp"
}

これで、 bluealsa デバイスを使って Bluetooth オーディオデバイスに接続できるようになります。ボリューム管理は alsamixer とオプション -D bluealsa を使って通常行われます。

Bluetooth シリアル

Bluetooth-to-Serial modules (HC-05、HC-06) で Bluetooth シリアル通信が機能するようにするには、次の手順に従います:

上記で説明したように、 bluetoothctl を使って Bluetooth デバイスをペアリングします。

bluez-utils-compatAUR をインストールします。新しいツールにはない機能があります。

ペアになっているデバイスの MAC アドレスを tty 端末にバインドします:

# rfcomm bind rfcomm0 MAC_address_of_Bluetooth_device

これで、シリアル通信用に /dev/rfcomm0 を開くことができます:

picocom /dev/rfcomm0 -b 115200

トラブルシューティング

この記事またはセクションは情報が古くなっています。
理由: Replace hciconfig with newer commands. (Discuss)

デバッグ

デバッグするには、最初に bluetooth.service停止します。

そして -d パラメーターを付けて開始します。

# /usr/lib/bluetooth/bluetoothd -n -d

別のオプションとして、 btmon ツールが有ります。

非推奨の BlueZ tools

8つの BlueZ ツールは非推奨となりbluez-utils から削除されましたが、それらのすべてが新しいツールに取って代わられたわけではありません。bluez-utils-compatAUR パッケージは非推奨のツールを含む代替バージョンの bluez-utils を提供します。

非推奨のツール あり得る代替
gatttool btgatt-client, D-Bus Gatt API
hciattach btattach
hciconfig btmgmt (そして bluetoothctl?)
hcidump btmon (そして btsnoop)
hcitool なし、D-Bus Device API 利用可能
rfcomm なし、D-Bus Profile1 API の実装?
ciptool
sdptool なし、機能が、異なる D-Bus オブジェクトに散らばっている模様: ProfileAdvertising、そして deviceadapter の UUID の配列。

gnome-bluetooth

bluetooth-properties でファイルの受信を有効にしようとしたときに以下のメッセージが表示される場合:

Bluetooth OBEX start failed: Invalid path
Bluetooth FTP start failed: Invalid path

XDG ユーザーディレクトリ が存在することを確認してください。

Bluetooth USB ドングル

USB ドングルを使う場合は、Bluetooth ドングルが認識されているか確認してください。USB ドングルを挿入する時に journalctl -f を root として実行する(もしくは /var/log/messages.log を調査する)ことで、そのことを確認できます。以下のような見た目であるはずです(hci を見てください)。

Feb 20 15:00:24 hostname kernel: [ 2661.349823] usb 4-1: new full-speed USB device number 3 using uhci_hcd
Feb 20 15:00:24 hostname bluetoothd[4568]: HCI dev 0 registered
Feb 20 15:00:24 hostname bluetoothd[4568]: Listening for HCI events on hci0
Feb 20 15:00:25 hostname bluetoothd[4568]: HCI dev 0 up
Feb 20 15:00:25 hostname bluetoothd[4568]: Adapter /org/bluez/4568/hci0 has been enabled

最初の2行しか表示されていなかった場合、デバイスは見つかっていますが、そのデバイスを立ち上げる必要があります。 例:

# btmgmt
[mgmt]# info
Index list with 1 item
hci0:	Primary controller
	addr 00:1A:7D:DA:71:10 version 6 manufacturer 10 class 0x000000
	supported settings: powered connectable fast-connectable discoverable bondable link-security ssp br/edr hs le advertising secure-conn debug-keys privacy static-addr
	current settings: connectable discoverable bondable ssp br/edr le secure-conn
	name Mozart
	short name
[mgmt]# select hci0
Selected index 0
[hci0]# power up
hci0 Set Powered complete, settings: powered connectable discoverable bondable ssp br/edr le secure-conn
[hci0]# info
hci0:	Primary controller
	addr 00:1A:7D:DA:71:10 version 6 manufacturer 10 class 0x1c0104
	supported settings: powered connectable fast-connectable discoverable bondable link-security ssp br/edr hs le advertising secure-conn debug-keys privacy static-addr
	current settings: powered connectable discoverable bondable ssp br/edr le secure-conn

または

# bluetoothctl
[bluetooth]# show
Controller 00:1A:7D:DA:71:10 (public)
	Name: Mozart
	Alias: Mozart
	Class: 0x0000095c
	Powered: no
	Discoverable: yes
	Pairable: yes
[bluetooth]# power on
[CHG] Controller 00:1A:7D:DA:71:10 Class: 0x001c0104
Changing power on succeeded
[CHG] Controller 00:1A:7D:DA:71:10 Powered: yes
[bluetooth]# show
Controller 00:1A:7D:DA:71:10 (public)
	Name: Mozart
	Alias: Mozart
	Class: 0x001c0104
	Powered: yes
	Discoverable: yes
	Pairable: yes

公式の仕様表に従って、Bluetooth のバージョンが HCI のバージョンにマップされていることを確認できます。例えば、先の出力では、HCI version 6 が Bluetooth version 4.0 です。

デバイスが検出されているか確認するために bluez-utils に含まれている hcitool を使うことができます。次のコマンドで利用可能なデバイスとその識別子・MAC アドレスのリストを表示することが可能です:

$ btmgmt info
Index list with 1 item
hci0:	Primary controller
	addr 00:1A:7D:DA:71:10 version 6 manufacturer 10 class 0x1c0104
	supported settings: powered connectable fast-connectable discoverable bondable link-security ssp br/edr hs le advertising secure-conn debug-keys privacy static-addr
	current settings: powered connectable discoverable bondable ssp br/edr le secure-conn

デバイスに関するもっと詳細な情報は、非推奨の hciconfig を使うことで取得できます。(bluez-utils-compatAUR)

$ hciconfig -a hci0
hci0:   Type: USB
        BD Address: 00:1B:DC:0F:DB:40 ACL MTU: 310:10 SCO MTU: 64:8
        UP RUNNING PSCAN ISCAN
        RX bytes:1226 acl:0 sco:0 events:27 errors:0
        TX bytes:351 acl:0 sco:0 commands:26 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: 'BlueZ (0)'
        Class: 0x000100
        Service Classes: Unspecified
        Device Class: Computer, Uncategorized
        HCI Ver: 2.0 (0x3) HCI Rev: 0xc5c LMP Ver: 2.0 (0x3) LMP Subver: 0xc5c
        Manufacturer: Cambridge Silicon Radio (10)

ドングルから短距離にいるときにオーディオデバイスがおかしくなる

他のデバイスと同一の USB ホストを共有している場合、オーディオデバイスとの通信に干渉 する可能性があります。オーディオデバイスがバスに接続されている唯一のデバイスであることを確認してください。例:

$ lsusb
Bus 002 Device 002: ID 0a12:0001 Cambridge Silicon Radio, Ltd Bluetooth Dongle (HCI mode)
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 004: ID 048d:1345 Integrated Technology Express, Inc. Multi Cardreader
Bus 001 Device 003: ID 0424:a700 Standard Microsystems Corp. 2 Port Hub
Bus 001 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

CSR ドングル 0a12:0001

デバイス ID 0a12:0001 Cambridge Silicon Radio, Ltd Bluetooth Dongle (HCI mode) にはリグレッションのバグがあり、現在のところカーネルのバージョン 3.9.11 以下でしか動作しません。新しいバージョン用のパッチがあります。詳細は、 Kernel Bug 60824 を参照してください。

Logitech Bluetooth USB ドングル

Logitech のドングルには Embedded と HCI という二つのモードで動作するものがあります (例: Logitech MX5000)。embedded モードではドングルは USB デバイスをエミュレートするので PC は普通の USB マウス・キーボードを使っていると認識します。

USB BT ミニレシーバの小さな赤いボタンを押すと他のモードが有効になります。BT ドングルの赤いボタンを押しながらコンピュータに接続してください。ボタンを押して3-5秒で、Bluetooth アイコンがシステムトレイに表示されます Discussion

また、bluez-hid2hci パッケージをインストールすることもできます。Logitech のドングルを接続すると自動的に切り替えます。

hcitool scan: Device not found

  • 一部の Dell ラップトップ (例: Studio 15) では Bluetooth モードを HID から HCI に切り替える必要があります。bluez-hid2hci パッケージをインストールすれば、udev が自動的に切り替えを行うはずです。また、次のコマンドを実行して手動で HCI に切り替えることもできます:
# /usr/lib/udev/hid2hci
  • デバイスが表示されない場合で、かつマシンに Windows オペレーティングシステムがあるときは Windows から bluetooth アダプターを有効にして見て下さい。
  • 場合によっては次のコマンドで有効にできます:
# bluetoothctl power on

bluetoothctl: No default controller available

一部のマザーボード Bluetooth コントローラにはバグがあります。バグがこの問題の原因であるか調べるには、journalctl | grep hci を実行してください。このコマンドの出力に "command tx timeout" や "Reading Intel version command failed" のようなエントリが存在する場合、PC の電源を切り、電源ケーブルを物理的に外して数秒間放置してください。これにより、コントローラにファームウェアを再ロードさせます(通常の再起動では再ロードしません)。こちらのバグレポートを見てください。

デバイスが rfkill によってブロックされていないことを確認してください。

また、一部の Intel カード(8260 など)は Bluetooth サービスによって正しく認識されないかもしれません。bluez-utils の代わりに非推奨の bluez-utils-compatAUR を使うことでこの問題が解決したというケースが報告されています。

これは省電力機能が原因かもしれません。その場合、btusb.enable_autosuspend=n カーネルパラメータにより解決できる可能性があります。Red Hat Bugzilla – Bug 1573562 も参照してください。

時々、btusb をオプション無しでアンロード・ロードすればコントローラを元に戻せることがあります:

# modprobe -r btusb
# modprobe btusb

systemd: Condition check resulted in Bluetooth service being skipped

bluetooth.service/sys/class/bluetooth ディレクトリが存在することのみを要求します。このディレクトリは bluetooth カーネルモジュールにより作成される必要があります。このカーネルモジュールは、systemd-udev が動作している Bluetooth ハードウェアデバイスを発見した場合にのみ、systemd-udev により自動的にロードされます。

/sys/class/bluetooth が存在しない場合、lsmod コマンドを使って、Bluetooth カーネルモジュールがロードされているかどうかを確認してください。Bluetooth デバイスがあるにも関わらずロードされていない場合、Bluetooth モジュールをロードし、bluetooth.service再起動することで、手動で起動できます。

また、bluetooth モジュールをロードする際に、対応するカーネル Bluetooth ドライバもロードする必要があります。btusb が最も可能性がありますが、btrtl,btintel,btbcm,bnep,btusb などの可能性もあります。

bluetooth.serviceユニットステータスを確認して、このサービスが起動しているかどうかを確認してください。

Debian Bug report logs - #853207 も参照してください。

bluetooth.service の起動に成功したが、まだ Bluetooth を使えないことがある場合(例: scan on 時に bluetoothctlorg.Bluez.Error.NotReady のようなメッセージを発する)、コンピュータを再起動し、次のことをダブルチェックしてください: /sys/class/bluetooth ディレクトリが存在するか; lsmod の出力に正しい Bluetooth モジュールが含まれているか; ジャーナルのログを確認するなど。systemd-udev は、また手動の変更をせずとも Bluetooth ハードウェアを自動的に認識するはずです。

rfkill unblock: Do not unblock

デバイスがソフトブロックされていて ConnMan を動作させている場合、次を試してみて下さい:

$ connmanctl enable bluetooth

コンピュータが表示されない

携帯からコンピュータが表示されないときは、discoverable モードを有効にしてください:

# bluetoothctl discoverable on

discoverable モードがオンになっていることを確認してください:

# bluetoothctl show
	Powered: yes
	Discoverable: yes
	Pairable: yes
ノート: /etc/bluetooth/main.confPairableTimeoutDiscoverableTimeout を確認してください。

まだコンピュータが表示されない場合、以下のように /etc/bluetooth/main.conf 内のデバイスクラスを変更してみて下さい:

# Default device class. Only the major and minor device class bits are
# considered.
#Class = 0x000100 # Computer Type (from default config)
Class = 0x100100 # (Object-Transfer Service & Computer Type)
ノート: 場合によっては、main.conf 内の Class はデバイスの初期化後に上書きされます。なので、hciconfig hci0 class 100100 のようにクラスを直接設定してください。

あるユーザは、携帯からコンピュータを見られるようにするためにはこうするしか無いと報告しています。LG TV(そして、一部の他の機器)はオーディオデバイスから発見可能です。なので、000414 (soundbar クラス)を使用することでそのようなデバイスを発見できるようにできます。

Bluetooth デバイス/サービスのクラスを生成するには https://bluetooth-pentest.narod.ru/software/bluetooth_class_of_device-service_generator.html を見てください。

Foxconn / Hon Hai / Lite-On の Broadcom デバイス

一部のデバイスでは、起動時にファームウェアを書き込む必要があります。ファームウェアは提供されていませんが、hex2hcd (bluez-utils でインストールされます) を使って Microsoft Windows の .hex ファイルから .hcd に変換することができます。

正しい .hex ファイルを取得するために、lsusb でデバイスの vendor:product コードを検索してください。例:

...
Bus 002 Device 004: ID 04ca:2006 Lite-On Technology Corp. Broadcom BCM43142A0 Bluetooth Device
...

または:

Bus 004 Device 004: Id 0489:e031 Foxconn / Hon Hai

もしくは、Windows (仮想マシンでもかまいません) を起動して Device Manager ユーティリティからファームウェアの名前を取得してください。デバイスのモデルを知りたいのに lsusb で表示されない場合、lsusb -viProduct でわかることがあります。

.hex ファイルはダウンロードした Windows ドライバーから抽出することができます。Windows を実行する必要はありません。適切なドライバーをダウンロードしてください。例えば Bluetooth Widcomm (Lifebook P771 のドライバーとして記載) には多数の Broadcom デバイスのドライバーが含まれています。Bluetooth Widcomm の場合、ドライバーは RAR アーカイブになっているので、unrar x で解凍できます。多数の .hex ファイルの中から必要なファイルを見つけるために、Win32/bcbtums-win7x86-brcm.inf ファイルの中身を確認して [RAMUSBE031.CopyList] を検索してください。E031 はあなたの使っているデバイスの product コード (大文字) に置き換えて下さい (lsusb で確認できる2番目の16進数)。その下に、必要な .hex ファイルの名前が書かれているはずです。

.hcd ファイルを手に入れたら、/lib/firmware/brcm/BCM.hcd にコピーしてください - このファイル名は dmesg によって提案されています。あなたのマシンでは異なっている可能性があるため dmesg の出力で確認してください。そして btusb モジュールをリロードします:

# rmmod btusb
# modprobe btusb

これでデバイスが使えるようになるはずです。以上の設定を永続化させる方法は BBS#162688 を参照。

Intel の複合 WiFi と Bluetooth カード

ワイヤレス設定#Bluetooth の共存 を見てください。

デバイスを接続した数秒後に切断してしまう

デバイスを接続したすぐ後に切断が発生し、ジャーナルの出力に以下のようなメッセージが確認できる場合:

bluetoothd: Unable to get connect data for Headset Voice gateway: getpeername: Transport endpoint is not connected (107)
bluetoothd: connect error: Connection refused (111)

おそらく別のオペレーティングシステムで同一の Bluetooth アダプタを使ってデバイスがペアリングされていることが原因です (例: デュアルブート)。一部のデバイスは同一の MAC アドレス (例: Bluetooth アダプタ) に対して複数のペアリングを関連付けた場合に対処できません。この問題を解決するには #デュアルブートペアリング の指示に従ってください。

スキャンしてもデバイスが表示されない

Bluetooth Low Energy を使用しているデバイスは bluetoothctl でスキャンしても表示されないことがあります (例: Logitech MX Master)。bluez-utils-compatAUR をインストールしてから以下を実行してみてください:

# bluetoothctl
[NEW] Controller (MAC) myhostname [default]
[bluetooth]# power on
[CHG] Controller (MAC) Class: 0x0c010c
Changing power on succeeded
[CHG] Controller (MAC) Powered: yes
[bluetooth]# scan on
Discovery started
[CHG] Controller (MAC) Discovering: yes

他のターミナルで以下を実行:

# hcitool lescan

デバイスが表示されるまで待機してから hcitool を Ctrl+c で閉じてください。bluetoothctl からデバイスが認識されたら通常通りにペアリングできます。

シンボリックリンクのせいで、転送されたファイルを受信できない

有効な Bluetooth 接続でファイルの受信に失敗する場合、問題はファイルの転送パス内のシンボリックリンクである場合があります。ジャーナルに以下のようなログが現れます:

Jun 18 11:18:13 ember obexd[3338969]: open(/home/me/.cache/obexd/MOC740): Operation not permitted (1)

エラーメッセージに表示されれたパス内にシンボリックリンクが含まれている場合、obexd はデフォルトでそれを拒否します。この挙動は、ドロップインファイルobex.service ユーザサービスに対して使うことにより初期化時に上書きできます。

~/.config/systemd/user/obex.service.d/10-symlink.conf
[Service]
ExecStart=
ExecStart=/usr/lib/bluetooth/obexd --symlinks

その後、ユーザの systemd マネージャの設定をリロードし、obex.service ユーザユニットを再起動してください。

ヘッドホンとマウスの干渉

Bluetooth マウスとキーボードを同時に使用しているときに音声が途切れる場合は #23 https://bugs.launchpad.net/ubuntu/+source/bluez/+bug/424215 で参照されているように、次を試してくみてださい。

# hciconfig hci0 lm ACCEPT,MASTER
# hciconfig hci0 lp HOLD,SNIFF,PARK

Bluetoothマウスの動きの遅さ

/var/lib/bluetooth/XX:XX:XX:XX:XX:XX/YY:YY:YY:YY:YY:YY/info (XX:XX:XX:XX:XX:XX Bluetooth アダプタの MAC アドレス YY:YY:YY:YY:YY:YY - マウスの MAC アドレス) このファイルを編集し、次の行を追加します:

[ConnectionParameters]
MinInterval=6
MaxInterval=9
Latency=44
Timeout=216

hcitool dev コマンドを実行すると、ローカルアダプタの MAC アドレスを確認できます。また、 hcitool con コマンドを実行すると、現在接続されているリモートデバイスの MAC アドレスを確認できます。

サスペンド/リジューム後にアダプタが消える

まず、アダプタのベンダーと製品 ID を見つけます。例:

lsusb -tv
/:  Bus 01.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/12p, 480M
    ID 1d6b:0002 Linux Foundation 2.0 root hub
    ...
    |__ Port 3: Dev 3, If 0, Class=Wireless, Driver=btusb, 12M
        ID 8087:0025 Intel Corp.
    |__ Port 3: Dev 3, If 1, Class=Wireless, Driver=btusb, 12M
        ID 8087:0025 Intel Corp.
    ...

この場合、ベンダー ID は 8087 で、製品 ID は 0025 です。 次に、 usb_modeswitch を使用してアダプタをリセットします。

# usb_modeswitch -R -v vendor_ID -p product_ID

カーネル 5.9 以降のすべての BLE デバイスの問題

v5.9 以降のカーネルでは、カーネルの Bluetooth スタックは BLE 接続でリンク層プライバシーを使用しようとします。ペアリング後にデバイスが動作しても、リブートまたはサスペンド後にペアリングが解除される場合、おそらくこれが原因です。

この問題を回避[3] するには、 /var/lib/bluetooth/アダプターMACアドレス/デバイスMACアドレス/info を開いて次の行を削除し、bluetooth.service を再起動します:

[IdentityResolvingKey]
Key=...

Arch フォーラムの関連する discussion を参照してください。

Bluetooth が suspend-to-idle 中のデバイスを即座に立ち上げてしまう

suspend-to-idle/S2idle/S0ix/Modern Standby する能力のあるシステムにおいては、Bluetooth コントローラがスリープ中も有効化されたままになります。通常、これにより、Bluetooth デバイスが接続されていると、システムがスリープに移行した直後にスリープが解除されてしまいます

これを防ぐために、スリープに移行する前に Bluetooth を完全に無効化できます。bluez-utils をインストールし、以下のファイルを作成してください:

/etc/systemd/system/bluetooth-disable-before-sleep.service
[Unit]
Description=Disable Bluetooth before going to sleep
Before=sleep.target
Before=suspend.target
Before=hybrid-sleep.target
Before=suspend-then-hibernate.target
StopWhenUnneeded=yes

[Service]
Type=oneshot
RemainAfterExit=yes

ExecStart=/usr/bin/bluetoothctl power off
ExecStop=/usr/bin/bluetoothctl power on

[Install]
WantedBy=sleep.target
WantedBy=suspend.target
WantedBy=hybrid-sleep.target
WantedBy=suspend-then-hibernate.target

このサービスを有効化し、スリープに移行した時に Bluetooth デバイスが切断されることや、スリープからの復帰時に Bluetooth が再び接続されることを確認してください。

この回避策を使用すると、Bluetooth マウス/キーボードを使ってシステムをスリープから復帰させることができなくなります。

tp-link UB400 と Xboxのコントローラが接続/切断を繰り返す

/etc/bluetooth/main.conf を編集して、以下の設定をします(アンコメント/値を変更します)

[General
JustWorksRepairing = always
FastConnectable = true
Class = 0x000100
[GATT]
ReconnectIntervals=1,1,2,3,5,8,13,21,34,55
AutoEnable=true

その後、bluetooth.service再起動 します。

関連する xpadneo に関する議論 を見ることができますが、xpadneo のドライバは必要ありません。

実験的な機能を有効化する

Bluez スタックでは、バグがあるかもしれない新しい機能が Experimental オプションに含まれています。このオプションに含まれている機能は、実験的な機能の安定化が決まったり、不要と判断されたりすることにより、時間と共に変化します。これを有効化するには、設定ファイルの該当する行をアンコメントしてください:

/etc/bluetooth/main.conf
# Enables experimental features and interfaces.
# Defaults to false.
Experimental = true

あるいは、bluetooth.service編集して、--experimental フラグを追加することもできます。以下のドロップインファイルのように:

/etc/systemd/system/bluetooth.service.d/override.conf
[Service]
ExecStart=
ExecStart=/usr/lib/bluetooth/bluetoothd --experimental

参照

翻訳ステータス: このページは en:Bluetooth の翻訳バージョンです。最後の翻訳日は 2022-08-08 です。もし英語版に 変更 があれば、翻訳の同期を手伝うことができます。