「Bluetooth」の版間の差分
(→エラーによってデバイスが接続できない: 削除) |
(→トラブルシューティング: 同期) |
||
364行目: | 364行目: | ||
== トラブルシューティング == |
== トラブルシューティング == |
||
+ | |||
+ | {{Out of date|Replace hciconfig with newer commands.}} |
||
=== デバッグ === |
=== デバッグ === |
||
− | デバッグするには、最初に {{ic|bluetooth.service}} を |
+ | デバッグするには、最初に {{ic|bluetooth.service}} を[[停止]]します。 |
そして {{ic|-d}} パラメーターを付けて開始します。 |
そして {{ic|-d}} パラメーターを付けて開始します。 |
||
377行目: | 379行目: | ||
=== 非推奨の BlueZ tools === |
=== 非推奨の BlueZ tools === |
||
− | 8つの |
+ | 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 |
+ | {| 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] |
||
392行目: | 394行目: | ||
| [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 (and btsnoop) |
||
|- |
|- |
||
− | | [https://manpages.debian.org/stretch/bluez/hcitool.1.en.html hcitool] || |
+ | | [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/rfcomm.1.en.html rfcomm] |
| [https://manpages.debian.org/stretch/bluez/rfcomm.1.en.html rfcomm] |
||
− | | rowspan="2" | |
+ | | rowspan="2" | missing, implement with [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] |
||
|- |
|- |
||
− | | |
+ | |[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]. |
|} |
|} |
||
406行目: | 408行目: | ||
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| |
+ | USB ドングルを使う場合は、Bluetooth ドングルが認識されているか確認してください。USB ドングルを挿入する時に {{ic|journalctl -f}} を root として実行する(もしくは {{ic|/var/log/messages.log}} を調査する)ことで、そのことを確認できます。以下のような見た目であるはずです(hci を見てください)。 |
{{bc| |
{{bc| |
||
425行目: | 426行目: | ||
}} |
}} |
||
− | 最初の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 |
||
}} |
}} |
||
− | + | {{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| |
+ | {{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}} を使うことができます。次のコマンドで利用可能なデバイスとその |
+ | デバイスが検出されているか確認するために {{ic|bluez-utils}} に含まれている {{ic|hcitool}} を使うことができます。次のコマンドで利用可能なデバイスとその識別子・MAC アドレスのリストを表示することが可能です: |
− | {{hc|$ |
+ | {{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| |
||
470行目: | 509行目: | ||
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 |
||
494行目: | 533行目: | ||
==== CSR ドングル 0a12:0001 ==== |
==== CSR ドングル 0a12:0001 ==== |
||
− | デバイス {{ic|ID 0a12:0001 Cambridge Silicon Radio, Ltd Bluetooth Dongle (HCI |
+ | デバイス {{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 ドングル === |
||
500行目: | 539行目: | ||
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 のドングルを接続すると自動的に切り替えます。 |
||
512行目: | 551行目: | ||
* 場合によっては次のコマンドで有効にできます: |
* 場合によっては次のコマンドで有効にできます: |
||
− | # |
+ | # bluetoothctl power on |
+ | |||
+ | === bluetoothctl: No default controller available === |
||
+ | |||
+ | This error may happen if the device is blocked by [[rfkill]]. |
||
+ | |||
+ | It might also happen with some intel cards (such as the 8260) to not be picked up correctly by the Bluetooth service. In some cases, using the deprecated {{AUR|bluez-utils-compat}} in lieu of {{Pkg|bluez-utils}} have reportedly fixed the issue. |
||
+ | |||
+ | This might also be caused by power saving measures, in which case adding the [[Kernel parameters#Configuration|kernel parameter]] {{ic|1=btusb.enable_autosuspend=n}} is a potential solution. See also [https://bugzilla.redhat.com/show_bug.cgi?id=1573562 Red Hat Bugzilla – Bug 1573562]. |
||
+ | |||
+ | Sometimes unloading and loading {{ic|btusb}} without options helps to get the controller back: |
||
+ | |||
+ | # modprobe -r btusb |
||
+ | # modprobe btusb |
||
+ | |||
+ | === systemd: Condition check resulted in Bluetooth service being skipped === |
||
+ | |||
+ | {{ic|bluetooth.service}} only requires the directory {{ic|/sys/class/bluetooth}} to exist, which should be created by kernel module {{ic|bluetooth}}, which is only autoloaded by {{ic|systemd-udev}} if it actually finds a working Bluetooth hardware device. |
||
+ | |||
+ | If your {{ic|/sys/class/bluetooth}} does not exist, check if your kernel Bluetooth module is loaded by {{ic|lsmod}}. If not, and you believe you have a Bluetooth device, you can try manually starting them by [[Kernel module#Manual module handling|loading the Bluetooth module]] and [[restart]]ing {{ic|bluetooth.service}}. |
||
+ | |||
+ | You should also load your corresponding kernel Bluetooth driver when loading the {{ic|bluetooth}} module, most likely {{ic|btusb}}, but can also be {{ic|btrtl,btintel,btbcm,bnep,btusb}} etc. |
||
+ | |||
+ | Check {{ic|bluetooth.service}}'s [[unit status]] to see whether it started. |
||
+ | |||
+ | See also [https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=853207 Debian Bug report logs - #853207]. |
||
+ | |||
+ | If {{ic|bluetooth.service}} started successfully, but there is chance that you still cannot use Bluetooth normally (e.g. {{ic|bluetoothctl}} says something like {{ic|org.Bluez.Error.NotReady}} when you {{ic|scan on}}). If this happens, try rebooting your computer, and double-check: whether directory {{ic|/sys/class/bluetooth}} exists; whether {{ic|lsmod}} includes correct Bluetooth modules; log messages in the [[journal]]; etc. {{ic|systemd-udev}} should pickup your Bluetooth hardware automatically without manual changes again. |
||
=== rfkill unblock: Do not unblock === |
=== rfkill unblock: Do not unblock === |
||
− | デバイスがソフトブロックされていて |
+ | デバイスがソフトブロックされていて [[ConnMan]] を動作させている場合、次を試してみて下さい: |
$ connmanctl enable bluetooth |
$ connmanctl enable bluetooth |
||
=== コンピュータが表示されない === |
=== コンピュータが表示されない === |
||
− | 携帯からコンピュータが表示されないときは、 |
+ | 携帯からコンピュータが表示されないときは、discoverable モードを有効にしてください: |
+ | |||
− | # enable PSCAN and ISCAN |
||
+ | # bluetoothctl discoverable on |
||
− | $ hciconfig hci0 piscan |
||
+ | |||
− | # check it worked |
||
+ | discoverable モードがオンになっていることを確認してください: |
||
− | {{hc|$ hciconfig| |
||
+ | |||
− | hci0: Type: USB |
||
+ | {{hc|# bluetoothctl show| |
||
− | BD Address: 00:12:34:56:78:9A ACL MTU: 192:8 SCO MTU: 64:8 |
||
+ | Powered: yes |
||
− | '''UP RUNNING PSCAN ISCAN''' |
||
+ | Discoverable: yes |
||
− | RX bytes:20425 acl:115 sco:0 events:526 errors:0 |
||
+ | Pairable: yes |
||
− | TX bytes:5543 acl:84 sco:0 commands:340 errors:0 |
||
}} |
}} |
||
− | {{Note|{{ic|/etc/bluetooth/main.conf}} の |
+ | {{Note|{{ic|/etc/bluetooth/main.conf}} の {{ic|PairableTimeout}} と {{ic|DiscoverableTimeout}} を確認してください。}} |
+ | |||
+ | まだコンピュータが表示されない場合、以下のように {{ic|/etc/bluetooth/main.conf}} 内のデバイスクラスを変更してみて下さい: |
||
− | 以下のように {{ic|/etc/bluetooth/main.conf}} 内のデバイスクラスを変更してみて下さい: |
||
# Default device class. Only the major and minor device class bits are |
# Default device class. Only the major and minor device class bits are |
||
# considered. |
# considered. |
||
− | #Class = 0x000100 (from default config) |
+ | #Class = 0x000100 # Computer Type (from default config) |
− | Class = 0x100100 |
+ | 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 デバイス === |
||
574行目: | 645行目: | ||
# hciconfig hci0 up |
# hciconfig hci0 up |
||
− | ファームウェアを書き込み: |
+ | ファームウェアを書き込み: |
# brcm_patchram_plus_usb --patchram fw-04ca_2006.hcd hci0 |
# brcm_patchram_plus_usb --patchram fw-04ca_2006.hcd hci0 |
||
これでデバイスが使えるようになるはずです。以上の設定を永続化させる方法は [https://bbs.archlinux.org/viewtopic.php?id=162688 BBS#162688] を参照。 |
これでデバイスが使えるようになるはずです。以上の設定を永続化させる方法は [https://bbs.archlinux.org/viewtopic.php?id=162688 BBS#162688] を参照。 |
||
+ | |||
+ | === Intel の複合 WiFi と Bluetooth カード=== |
||
+ | |||
+ | [[ワイヤレス設定#Bluetooth の共存]] を見てください。 |
||
=== デバイスを接続した数秒後に切断してしまう === |
=== デバイスを接続した数秒後に切断してしまう === |
||
− | デバイスを接続したすぐ後に切断が発生し |
+ | デバイスを接続したすぐ後に切断が発生し、ジャーナルの出力に以下のようなメッセージが確認できる場合: |
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 |
||
− | |||
− | そして {{ic|bluetooth.service}} を[[再起動]]して Bluetooth アダプタをオンにし、デバイスをスキャンしてからペアリングしてください。Bluetooth マネージャによっては、デバイスを探知するために再起動が必要なこともあります。 |
||
=== スキャンしてもデバイスが表示されない === |
=== スキャンしてもデバイスが表示されない === |
||
600行目: | 668行目: | ||
Bluetooth Low Energy を使用しているデバイスは bluetoothctl でスキャンしても表示されないことがあります (例: Logitech MX Master)。{{aur|bluez-utils-compat}} をインストールしてから以下を実行してみてください: |
Bluetooth Low Energy を使用しているデバイスは bluetoothctl でスキャンしても表示されないことがあります (例: Logitech MX Master)。{{aur|bluez-utils-compat}} をインストールしてから以下を実行してみてください: |
||
+ | {{hc|# bluetoothctl| |
||
− | # systemctl start bluetooth.service |
||
+ | [NEW] Controller (MAC) myhostname [default] |
||
− | # bluetoothctl |
||
+ | }} |
||
− | [NEW] Controller (MAC) myhostname [default] |
||
+ | |||
− | [bluetooth]# power on |
||
+ | {{hc|[bluetooth]# power on| |
||
− | [CHG] Controller (MAC) Class: 0x0c010c |
||
+ | [CHG] Controller (MAC) Class: 0x0c010c |
||
− | Changing power on succeeded |
||
+ | Changing power on succeeded |
||
− | [CHG] Controller (MAC) Powered: yes |
||
+ | [CHG] Controller (MAC) Powered: yes |
||
− | [bluetooth]# scan on |
||
+ | }} |
||
− | Discovery started |
||
+ | |||
− | [CHG] Controller (MAC) Discovering: yes |
||
+ | {{hc|[bluetooth]# scan on| |
||
+ | Discovery started |
||
+ | [CHG] Controller (MAC) Discovering: yes |
||
+ | }} |
||
他のターミナルで以下を実行: |
他のターミナルで以下を実行: |
||
615行目: | 687行目: | ||
# hcitool lescan |
# hcitool lescan |
||
− | デバイスが表示されるまで待機してから hcitool を Ctrl+ |
+ | デバイスが表示されるまで待機してから hcitool を {{ic|Ctrl+c}} で閉じてください。bluetoothctl からデバイスが認識されたら通常通りにペアリングできます。 |
+ | |||
+ | === シンボリックリンクのせいで、転送されたファイルを受信できない === |
||
+ | |||
+ | If incoming file transfers fail on an an otherwise functional Bluetooth connection, the problem may be due to symlinks in your file transfer path. Logs like this would appear in the journal: |
||
+ | |||
+ | Jun 18 11:18:13 ember obexd[3338969]: open(/home/me/.cache/obexd/MOC740): Operation not permitted (1) |
||
+ | |||
+ | If the path shown in the error message contains a symlink, then obexd by default [https://git.kernel.org/pub/scm/bluetooth/bluez.git/tree/obexd/plugins/filesystem.c#n90 will not accept it]. The behavior can be overridden on initialization using a [[drop-in file]] for the {{ic|obex.service}} [[systemd/User|user service]]: |
||
+ | |||
+ | {{hc|~/.config/systemd/user/obex.service.d/10-symlink.conf|2= |
||
+ | [Service] |
||
+ | ExecStart= |
||
+ | ExecStart=/usr/lib/bluetooth/obexd --symlinks |
||
+ | }} |
||
+ | |||
+ | Then [[reload]] the ''systemd'' manager configuration of the calling user and [[restart]] the {{ic|obex.service}} user unit. |
||
=== ヘッドホンとマウスの干渉 === |
=== ヘッドホンとマウスの干渉 === |
||
− | Bluetooth マウスとキーボードを同時に使用しているときに音声が途切れる場合は #23 で参照されているように、次を試してくみてださい。 |
+ | Bluetooth マウスとキーボードを同時に使用しているときに音声が途切れる場合は #23 https://bugs.launchpad.net/ubuntu/+source/bluez/+bug/424215 で参照されているように、次を試してくみてださい。 |
# hciconfig hci0 lm ACCEPT,MASTER |
# hciconfig hci0 lm ACCEPT,MASTER |
||
634行目: | 722行目: | ||
Timeout=216 |
Timeout=216 |
||
− | hcitool dev コマンドを実行すると、ローカルアダプタの MAC アドレスを確認できます。また、 {{ic|hcitool con}} コマンドを実行すると、現在接続されているリモートデバイスの MAC アドレスを確認できます。 |
+ | {{ic|hcitool dev}} コマンドを実行すると、ローカルアダプタの MAC アドレスを確認できます。また、 {{ic|hcitool con}} コマンドを実行すると、現在接続されているリモートデバイスの MAC アドレスを確認できます。 |
=== サスペンド/リジューム後にアダプタが消える === |
=== サスペンド/リジューム後にアダプタが消える === |
||
645行目: | 733行目: | ||
... |
... |
||
|__ 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>}} |
||
659行目: | 747行目: | ||
v5.9 以降のカーネルでは BLE 接続でリンク層プライバシーを使用しようとしスタックします。ペアリング後にデバイスが動作しても、リブートまたはサスペンド後にペアリングが解除される場合、おそらくこれが原因です。 |
v5.9 以降のカーネルでは 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= |
||
666行目: | 754行目: | ||
}} |
}} |
||
− | Archフォーラム |
+ | Archフォーラムの関連する [https://bbs.archlinux.org/viewtopic.php?id=259954 discussion] を参照してください。 |
+ | |||
+ | === Bluetooth が suspend-to-idle のデバイスを即座に立ち上げる === |
||
+ | |||
+ | On systems capable of [[Power_management/Suspend_and_hibernate|suspend-to-idle/S2idle/S0ix/Modern Standby]], Bluetooth controllers will stay enabled during sleep. This will usually cause the system to [https://bugzilla.kernel.org/show_bug.cgi?id=200039 wake up immediately after going to sleep] if any Bluetooth device is connected. |
||
+ | |||
+ | To prevent this, you can disable Bluetooth completely before going to sleep - install {{Pkg|bluez-utils}} and create this file: |
||
+ | |||
+ | {{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 |
||
+ | }} |
||
+ | |||
+ | [[Systemd#Using_units|Enable]] this service and check if Bluetooth devices disconnect when going to sleep, and whenever Bluetooth goes back up after waking up the system. |
||
+ | |||
+ | If this workaround is in use, [[Bluetooth#Wake_from_suspend|waking up the system with a Bluetooth mouse/keyboard]] will not work. |
||
=== tp-link UB400 と Xboxのコントローラが接続/切断を繰り返す === |
=== tp-link UB400 と Xboxのコントローラが接続/切断を繰り返す === |
||
684行目: | 805行目: | ||
関連する [https://github.com/atar-axis/xpadneo/issues/166 xpadneo に関する議論] を見ることができますが、xpadneo のドライバは必要ありません。 |
関連する [https://github.com/atar-axis/xpadneo/issues/166 xpadneo に関する議論] を見ることができますが、xpadneo のドライバは必要ありません。 |
||
+ | |||
+ | === 実験的な機能を有効化する === |
||
+ | |||
+ | {{Accuracy|Does the Arch Linux package have this compiled in? If not, how can one get a build with experimental features (preferably an AUR package)?}} |
||
+ | |||
+ | The Bluez stack keeps new, potentially buggy features behind the ''Experimental'' option. The functionality included under this by this vary over time, as experimental features are determined to be stable and no longer require the option. To enable this, uncomment the relevant line in the configuration: |
||
+ | |||
+ | {{hc|/etc/bluetooth/main.conf|2= |
||
+ | # Enables experimental features and interfaces. |
||
+ | # Defaults to false. |
||
+ | Experimental = true |
||
+ | }} |
||
== 参照 == |
== 参照 == |
2022年6月18日 (土) 17:49時点における版
Bluetooth は携帯電話やコンピュータなどの電子デバイス用の近距離無線通信規格です。Linux においては、Bluetooth プロトコルスタックの実装として BlueZ が標準的に使われています。
目次
- 1 インストール
- 2 ペアリング
- 3 設定
- 4 オーディオ
- 5 Bluetooth シリアル
- 6 トラブルシューティング
- 6.1 デバッグ
- 6.2 非推奨の BlueZ tools
- 6.3 gnome-bluetooth
- 6.4 Bluetooth USB ドングル
- 6.5 Logitech Bluetooth USB ドングル
- 6.6 hcitool scan: Device not found
- 6.7 bluetoothctl: No default controller available
- 6.8 systemd: Condition check resulted in Bluetooth service being skipped
- 6.9 rfkill unblock: Do not unblock
- 6.10 コンピュータが表示されない
- 6.11 Foxconn / Hon Hai / Lite-On の Broadcom デバイス
- 6.12 Intel の複合 WiFi と Bluetooth カード
- 6.13 デバイスを接続した数秒後に切断してしまう
- 6.14 スキャンしてもデバイスが表示されない
- 6.15 シンボリックリンクのせいで、転送されたファイルを受信できない
- 6.16 ヘッドホンとマウスの干渉
- 6.17 Bluetoothマウスの動きの遅さ
- 6.18 サスペンド/リジューム後にアダプタが消える
- 6.19 カーネル 5.9 以降のすべての BLE デバイスの問題
- 6.20 Bluetooth が suspend-to-idle のデバイスを即座に立ち上げる
- 6.21 tp-link UB400 と Xboxのコントローラが接続/切断を繰り返す
- 6.22 実験的な機能を有効化する
- 7 参照
インストール
- Bluetooth プロトコロスタックを提供する、bluez パッケージをインストールします。
bluetoothctl
ユーティリティを提供する、bluez-utils をインストールします。または bluez-utils-compatAUR をインストールして、非推奨の BlueZ tools を追加します。- 一般的な Bluetooth ドライバは、
btusb
カーネルモジュールです。このモジュールがロードされているかどうかを確認してください。もしロードされていなければ、モジュールをロードしてください。 bluetooth.service
を起動/有効化します。
フロントエンド
コンソール
- bluetoothctl — シェルからデバイスをペアリングすることは、最も単純で信頼性の高いオプションの一つです。
グラフィカル
以下のパッケージでは、Bluetooth をカスタマイズするためのグラフィカルインターフェイスが利用可能です。
- GNOME Bluetooth — GNOME の Bluetooth ツール。
- 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
です)
- Bluedevil — KDE' Bluetooth tool. Dolphin やシステムトレイに Bluetooth のアイコンが表示されていない場合は、システムトレイオプションで有効にするか、ウィジェットを追加してください。アイコンをクリックすることで、Bluedevil の設定や Bluetooth デバイスの検出が可能です。KDE System Settings からもインターフェースが利用できます。
- Blueberry — GNOME Bluetooth から Linux Mint でスピンオフした Blueberry は全てのデスクトップ環境で動作します。Obex Object Push によるファイル受信をサポートしていません。
- Blueman — フル機能の Bluetooth マネージャー
- ObexFTP — OBEX 対応のデバイスとの間でファイルを転送するツール
ペアリング
シェルからデバイスをペアリングするのは最もシンプルで信頼性のある方法の1つです。正確な手順は利用するデバイスとその入力機能によります。以下は /usr/bin/bluetoothctl
を使ってデバイスをペアリングする一般的な説明です:
bluetoothctl
対話コマンドを実行してください。help
と入力することで利用できるコマンドのリストを表示できます。
select MAC Address
と入力してデフォルトのコントローラを選択してください。power on
と入力してコントローラの電源を入れて下さい。デフォルトではオフになっています。devices
と入力してペアリングするデバイスの MAC アドレスを取得してください。- デバイスが表示されないときは
scan on
コマンドでデバイス検出モードにしてください。 agent on
でエージェントをオンにしてください。pair MAC Address
と入力することでペアリングを実行します (タブ補完が使えます)。- PIN がないデバイスを使う場合は、手動でデバイスを信頼する必要があるかもしれません。
trust MAC Address
と入力してこれを行なって下さい。 - 最後に、
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
デュアルブートペアリング
デュアルブートセットアップでデバイスをペアリングするには、Linux インストール時にペアリング・キーを手動で変更し、両方のシステムで一致するようにする必要があります。
設定方法
これを行うには、まず Arch Linux 上でデバイスのペアリングを行います。その後、もう一方の OS を再起動し、デバイスをペアリングします。ここでペアリング・キーを取り出す必要がありますが、まず Bluetooth デバイスの電源を切り、接続を試みないようにします。
Windows の場合
Windows での展開
リンクキーを含むレジストリキーは、SYSTEM アカウント でしかアクセスできないため、ログインすることができません。そのため、regedit.exe
を SYSTEM
として実行するには、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ファイルとしてエクスポートしてください。
LTK
, ERand
, EDIV
の値が存在する場合、これは Bluetooth 5.1 デバイスであり、これらも保存する必要があります。
Linux での展開
Arch をリブートしてください。chntpw をインストールして、Windows システムドライブをマウントします。
$ cd /path/to/windows/system/Windows/System32/config $ chntpw -e SYSTEM
chntpw
環境の中で以下を実行します。
> cd CurrentControlSet\Services\BTHPORT\Parameters\Keys
もしくは
> cd ControlSet00X\Services\BTHPORT\Parameters\Keys
次に、Bluetooth アダプタの MAC アドレスを取得し、そのフォルダを入力します。
> ls > cd your-device's-mac-address
ペアリングしているデバイスにも同じことをします。
> ls
Node has 0 subkeys and 1 values size type value name [value if type DWORD] 16 REG_BINARY <123456789876>
ここで、hex
を通して、デバイスのキーを取得します。
> hex 123456789876
:00000 XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX (some other chars)
”XX" はペアリング・キーです。どのキーがどの MAC アドレスにマッピングされているか、メモしておいてください。
BT5.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]
これらの値のうち、LTK
、ERand
、EDIV
は必ず保存する必要があります。
Bluetooth 5.1キーの準備
もし、目的のデバイスのレジストリに LTK
, ERand
, EDIV
の値があった場合、それらを Linux で使用するために変換する必要があります。LTK
は LongTermKey.Key
に、 ERand
は Rand
に、 EDIV
は EDiv
に対応するものです。また、ERand
の値は反転して10進数に変換されるはずです。
- 例えば、
48 4D AF CD 0F 92 22 88 0A 52 9A F4 76 DA 8B 94
のLongTermKey.Key
は484DAFCD0F9222880A529AF476DA8B94
のようになります。 63 02 84 B8 5D 40 44 DF
のERand
は16088054540146049635
のRand
を生成します。EDIV
が37520
の場合はEDiv
になります。
macOS の場合
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 mm
は MM 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
を実行します。
info
ファイルを編集し、[LinkKey]
以下のキーを変更します。例えば:
info
[LinkKey] Key=XXXXXXXXXXXXXXX
次に、bluetooth.service
と pulseaudio
を 再起動 してください。(pulseaudio -k && pulseaudio --start を使用
)
これで、デバイスに接続できるはずです。
設定
起動後に自動で有効にする
デフォルトでは、再起動後に Bluetooth アダプタが有効になりません。AutoEnable=true
を /etc/bluetooth/main.conf
の [Policy]
セクションの下部に追加するだけです:
/etc/bluetooth/main.conf
[Policy] AutoEnable=true
起動時に発見可能にする
デバイスが常に見えていて、直接接続できる必要がある場合:
/etc/bluetooth/main.conf
[General] DiscoverableTimeout = 0
サスペンドからの復帰
bluetooth キーボードやマウスなどをサスペンドから起動できるようにする。まず、bios の設定を確認し、wake from USB が無効になっていないことを確認します。多くの場合、マザーボードからの 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-keyboardmousewakeup.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 のデフォルトのインストールでは、 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
まず、 Bluetooth オーディオデバイスが正しくペアリングされ、システムに接続されていることを確認します。
次に、 bluez-alsa-gitAUR をインストールし、 bluealsa
サービスを開始 (を有効にします) し、ユーザーを audio
グループに追加します。
次のコマンドを実行して、すべてが意図したとおりに動作しているかどうかを確認します
XX:XX:XX:XX:XX:XX
and FILE.wav
below):
$ 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
トラブルシューティング
デバッグ
デバッグするには、最初に bluetooth.service
を停止します。
そして -d
パラメーターを付けて開始します。
# /usr/lib/bluetooth/bluetoothd -n -d
別のオプションとして、 btmon
ツールが有ります。
非推奨の BlueZ tools
8つの BlueZ ツールは非推奨となり、bluez-utils から削除されましたが、それらのすべてが新しいツールに取って代わられたわけではありません。bluez-utils-compatAUR パッケージは非推奨のツールを含む代替バージョンの bluez-utils を提供します。
Deprecated tool | Most likely replacement |
---|---|
gatttool | btgatt-client, D-Bus Gatt API |
hciattach | btattach |
hciconfig | btmgmt (and bluetoothctl?) |
hcidump | btmon (and btsnoop) |
hcitool | missing, D-Bus Device API available |
rfcomm | missing, implement with D-Bus Profile1 API? |
ciptool | |
sdptool | missing, functionality seems to be scattered over different D-Bus objects: Profile, Advertising, and the UUIDs arrays in device and adapter. |
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
This error may happen if the device is blocked by rfkill.
It might also happen with some intel cards (such as the 8260) to not be picked up correctly by the Bluetooth service. In some cases, using the deprecated bluez-utils-compatAUR in lieu of bluez-utils have reportedly fixed the issue.
This might also be caused by power saving measures, in which case adding the kernel parameter btusb.enable_autosuspend=n
is a potential solution. See also Red Hat Bugzilla – Bug 1573562.
Sometimes unloading and loading btusb
without options helps to get the controller back:
# modprobe -r btusb # modprobe btusb
systemd: Condition check resulted in Bluetooth service being skipped
bluetooth.service
only requires the directory /sys/class/bluetooth
to exist, which should be created by kernel module bluetooth
, which is only autoloaded by systemd-udev
if it actually finds a working Bluetooth hardware device.
If your /sys/class/bluetooth
does not exist, check if your kernel Bluetooth module is loaded by lsmod
. If not, and you believe you have a Bluetooth device, you can try manually starting them by loading the Bluetooth module and restarting bluetooth.service
.
You should also load your corresponding kernel Bluetooth driver when loading the bluetooth
module, most likely btusb
, but can also be btrtl,btintel,btbcm,bnep,btusb
etc.
Check bluetooth.service
's unit status to see whether it started.
See also Debian Bug report logs - #853207.
If bluetooth.service
started successfully, but there is chance that you still cannot use Bluetooth normally (e.g. bluetoothctl
says something like org.Bluez.Error.NotReady
when you scan on
). If this happens, try rebooting your computer, and double-check: whether directory /sys/class/bluetooth
exists; whether lsmod
includes correct Bluetooth modules; log messages in the journal; etc. systemd-udev
should pickup your Bluetooth hardware automatically without manual changes again.
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.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)
あるユーザは、携帯からコンピュータを見られるようにするためにはこうするしか無いと報告しています。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 -v の iProduct
でわかることがあります。
.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
場合によって (おそらく古いカーネルを使っている場合)、brcm_patchram_plus ユーティリティを使って .hcd ファイルを書き込む必要があります (ユーティリティは brcm_patchram_plus-gitAUR[リンク切れ: アーカイブ: aur-mirror] に含まれています)。まず、dmesg でデバイスが btusb によって bluetooth デバイスとして認識されていることを確認してください。そして、以下のコマンドを実行 (04ca 2006 はあなたのデバイスの vendor product コードのペアに置き換えて下さい):
# echo '04ca 2006' > /sys/bus/usb/drivers/btusb/new_id
デバイスを立ち上げます:
# hciconfig hci0 up
ファームウェアを書き込み:
# brcm_patchram_plus_usb --patchram fw-04ca_2006.hcd hci0
これでデバイスが使えるようになるはずです。以上の設定を永続化させる方法は 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 からデバイスが認識されたら通常通りにペアリングできます。
シンボリックリンクのせいで、転送されたファイルを受信できない
If incoming file transfers fail on an an otherwise functional Bluetooth connection, the problem may be due to symlinks in your file transfer path. Logs like this would appear in the journal:
Jun 18 11:18:13 ember obexd[3338969]: open(/home/me/.cache/obexd/MOC740): Operation not permitted (1)
If the path shown in the error message contains a symlink, then obexd by default will not accept it. The behavior can be overridden on initialization using a drop-in file for the obex.service
user service:
~/.config/systemd/user/obex.service.d/10-symlink.conf
[Service] ExecStart= ExecStart=/usr/lib/bluetooth/obexd --symlinks
Then reload the systemd manager configuration of the calling user and restart the obex.service
user unit.
ヘッドホンとマウスの干渉
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 <ベンダーID> -p <プロダクトID>
カーネル 5.9 以降のすべての BLE デバイスの問題
v5.9 以降のカーネルでは BLE 接続でリンク層プライバシーを使用しようとしスタックします。ペアリング後にデバイスが動作しても、リブートまたはサスペンド後にペアリングが解除される場合、おそらくこれが原因です。
この問題を回避 [1] するには、 /var/lib/bluetooth/<アダプターMACアドレス>/<デバイスMACアドレス>/info
を開いて次の行を削除し、bluetooth.service
を再起動します。
[IdentityResolvingKey] Key=...
Archフォーラムの関連する discussion を参照してください。
Bluetooth が suspend-to-idle のデバイスを即座に立ち上げる
On systems capable of suspend-to-idle/S2idle/S0ix/Modern Standby, Bluetooth controllers will stay enabled during sleep. This will usually cause the system to wake up immediately after going to sleep if any Bluetooth device is connected.
To prevent this, you can disable Bluetooth completely before going to sleep - install bluez-utils and create this file:
/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
Enable this service and check if Bluetooth devices disconnect when going to sleep, and whenever Bluetooth goes back up after waking up the system.
If this workaround is in use, waking up the system with a Bluetooth mouse/keyboard will not work.
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 のドライバは必要ありません。
実験的な機能を有効化する
The Bluez stack keeps new, potentially buggy features behind the Experimental option. The functionality included under this by this vary over time, as experimental features are determined to be stable and no longer require the option. To enable this, uncomment the relevant line in the configuration:
/etc/bluetooth/main.conf
# Enables experimental features and interfaces. # Defaults to false. Experimental = true