「Bluetooth」の版間の差分
(→bluetoothctl: 削除) |
|||
402行目: | 402行目: | ||
| 不明, 欠落している機能は、さまざまな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], およびデバイスとアダプタのUUID アレイ [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]. |
| 不明, 欠落している機能は、さまざまな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], およびデバイスとアダプタのUUID アレイ [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]. |
||
|} |
|} |
||
− | |||
− | === bluetoothctl === |
||
− | bluetoothctl でコントローラが見つからない場合、bluetooth デバイスがブロックされている可能性があります。{{Pkg|rfkill}}{{Broken package link|置換パッケージ: {{Pkg|util-linux}}}} を使ってブロックを解除してみてください: |
||
− | |||
− | # rfkill unblock bluetooth |
||
=== gnome-bluetooth === |
=== gnome-bluetooth === |
2022年6月18日 (土) 16:52時点における版
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 rfkill unblock: Do not unblock
- 6.8 コンピュータが表示されない
- 6.9 Logitech のキーボードがペアリングできない
- 6.10 HSP/HFP プロファイル
- 6.11 Thinkpad Bluetooth レーザーマウス
- 6.12 Foxconn / Hon Hai / Lite-On の Broadcom デバイス
- 6.13 デバイスを接続した数秒後に切断してしまう
- 6.14 エラーによってデバイスが接続できない
- 6.15 スキャンしてもデバイスが表示されない
- 6.16 ヘッドホンとマウスの干渉
- 6.17 Bluetoothマウスの動きの遅さ
- 6.18 サスペンド/リジューム後にアダプタが消える
- 6.19 カーネル 5.9 以降のすべての BLE デバイスの問題
- 6.20 tp-link UB400 と Xboxのコントローラが接続/切断を繰り返す
- 6.21 Bluetooth アダプタが見つからない - (bluetooth-mesh.service コマンドラインが原因)
- 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
を stop します。
そして -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 (and bluetoothctl?) |
hcidump | btmon (and btsnoop) |
hcitool | 不明, D-Bus Device API が利用可能 |
rfcomm | 不明, こちらで実装 D-Bus Profile1 API? |
ciptool | |
sdptool | 不明, 欠落している機能は、さまざまなD-Busオブジェクトに散在しているようです: Profile, Advertising, およびデバイスとアダプタのUUID アレイ device と adapter. |
gnome-bluetooth
bluetooth-properties でファイルの受信を有効にしようとしたときに以下のメッセージが表示される場合:
Bluetooth OBEX start failed: Invalid path Bluetooth FTP start failed: Invalid path
xdg-user-dirs をインストールして次を実行してください:
$ xdg-user-dirs-update
次のコマンドでパスを編集できます:
$ vi ~/.config/user-dirs.dirs
Bluetooth USB ドングル
USB ドングルを使う場合は、Bluetooth ドングルが認識されているか確認してください。USB ドングルを挿入する時に /var/log/messages.log
を表示する (もしくは systemd で journalctl -f
を実行する) ことで確認できます。以下のような表示があるはずです (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行しか表示されていなかった場合は、デバイスを立ち上げる必要があります。 例:
hciconfig -a hci0
hci0: Type: USB BD Address: 00:00:00:00:00:00 ACL MTU: 0:0 SCO MTU: 0:0 DOWN RX bytes:0 acl:0 sco:0 events:0 errors:0 TX bytes:0 acl:0 sco:0 commands:0 errors:
# hciconfig hci0 up
hciconfig -a hci0
hci0: Type: USB BD Address: 00:02:72:C4:7C:06 ACL MTU: 377:10 SCO MTU: 64:8 UP RUNNING RX bytes:348 acl:0 sco:0 events:11 errors:0 TX bytes:38 acl:0 sco:0 commands:11 errors:0
これが以下のようなエラーで失敗する場合:
Operation not possible due to RF-kill
おそらくコンピュータのハードウェアスイッチか、rfkill
ユーティリティが原因です。ユーティリティが原因の場合は次のコマンドで解決できます:
# rfkill unblock all
(場合によって) bluetooth のハードウェアスイッチは USB の bluetooth ドングルへのアクセスも操作します。スイッチを押したり動かしてもう一度デバイスを立ち上げてみてください。
デバイスが検出されているか確認するために bluez-utils
に含まれている hcitool
を使うことができます。次のコマンドで利用可能なデバイスとその ID・MAC アドレスのリストを表示することが可能です:
$ hcitool dev
Devices: hci0 00:1B:DC:0F:DB:40
デバイスに関するもっと詳細な情報は hciconfig
を使うことで取得できます。
$ 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 モード)
にはリグレッションのバグがあり、現在のところカーネルのバージョンが3.9.11以下でしか動作しません。新しいバージョン用のパッチがあります。詳細は、 Kernel Bug 60824 を参照してください。
Logitech Bluetooth USB ドングル
Logitech のドングルには Embedded と HCI という二つのモードで動作するものがあります (例: Logitech MX5000)。embedded モードではドングルは USB デバイスをエミュレートするので PC は普通の USB マウス・キーボードを使っていると認識します。
USB BT ミニレシーバの小さな赤いボタンを押すと他のモードが有効になります。BT ドングルの赤いボタンを押しながらコンピュータに接続してください。ボタンを押して3-5秒で、Bluetooth アイコンがシステムトレイに表示されます [1]。
また、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 アダプターを有効にして見て下さい。
- 場合によっては次のコマンドで有効にできます:
# hciconfig hci0 up
rfkill unblock: Do not unblock
デバイスがソフトブロックされていて connman を動作させている場合、次を試してみて下さい:
$ connmanctl enable bluetooth
コンピュータが表示されない
携帯からコンピュータが表示されないときは、PSCAN と ISCAN を有効にしてください:
# enable PSCAN and ISCAN $ hciconfig hci0 piscan # check it worked
$ 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
以下のように /etc/bluetooth/main.conf
内のデバイスクラスを変更してみて下さい:
# Default device class. Only the major and minor device class bits are # considered. #Class = 0x000100 (from default config) Class = 0x100100
上記のように設定することでコンピュータが認識されます。
Logitech のキーボードがペアリングできない
Logitech キーボードとペアリングするときにパスキーがない場合は、次のコマンドを入力してください:
# hciconfig hci0 sspmode 0
ペアリング後も、キーボードが接続されないときは、hcidump -at
の出力を確認してください。以下のメッセージのように接続・切断が繰り返し表示される場合:
status 0x00 handle 11 reason 0x13 Reason: Remote User Terminated Connection
今のところの対処方法としては昔の Bluetooth スタックをインストールするしかありません。
HSP/HFP プロファイル
bluez5 では HSP/HFP プロファイル (TeamSpeak, Skype などのための通信ヘッドセット) のサポートが削除されています。PulseAudio (バージョン6以上) などの HSP/HFP を自力で実装しているアプリケーションをインストールする必要があります。
Thinkpad Bluetooth レーザーマウス
Thinkpad Bluetooth レーザーマウスが数秒の間に (マウスを動かしたりボタンを押したときに) 何度も接続と切断を繰り返す場合、コード 0000
を使ってペアリングしてみてください。
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 を参照。
デバイスを接続した数秒後に切断してしまう
デバイスを接続したすぐ後に切断が発生し journalctl
の出力に以下のようなメッセージが確認できる場合:
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 アダプタ) に対して複数のペアリングを関連付けた場合に対処できません。デバイスをペアリングしなおすことで解決します。まずデバイスを削除してください:
$ bluetoothctl [bluetooth]# devices Device XX:XX:XX:XX:XX:XX My Device [bluetooth]# remove XX:XX:XX:XX:XX:XX
そして bluetooth.service
を再起動して Bluetooth アダプタをオンにし、デバイスをスキャンしてからペアリングしてください。Bluetooth マネージャによっては、デバイスを探知するために再起動が必要なこともあります。
エラーによってデバイスが接続できない
journalctl
の出力に以下のようなメッセージが確認できる場合:
a2dp-source profile connect failed for 9C:64:40:22:E1:3F: Protocol not available
pulseaudio-bluetooth をインストールして PulseAudio を再起動してみてください。ファイル転送しか使っていない場合でも上記のエラーが発生することがあります。
スキャンしてもデバイスが表示されない
Bluetooth Low Energy を使用しているデバイスは bluetoothctl でスキャンしても表示されないことがあります (例: Logitech MX Master)。bluez-utils-compatAUR をインストールしてから以下を実行してみてください:
# 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
他のターミナルで以下を実行:
# hcitool lescan
デバイスが表示されるまで待機してから hcitool を Ctrl+C で閉じてください。bluetoothctl からデバイスが認識されたら通常通りにペアリングできます。
ヘッドホンとマウスの干渉
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 接続でリンク層プライバシーを使用しようとしスタックします。ペアリング後にデバイスが動作しても、リブートまたはサスペンド後にペアリングが解除される場合、おそらくこれが原因です。
この問題を回避するには、 /var/lib/bluetooth/<アダプターMACアドレス>/<デバイスMACアドレス>/info
を開いて次の行を削除し、bluetooth.service
を再起動します。
[IdentityResolvingKey] Key=...
Archフォーラムを discussion 参照してください。
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 のドライバは必要ありません。
Bluetooth アダプタが見つからない - (bluetooth-mesh.service コマンドラインが原因)
間違って bluetooth-mesh.service を直接コマンドラインで有効にしてしまうと(bluetoothctl コマンドと混同して)bluetooth コントローラが消えてしまいます。
bluetooth コマンドラインは、"no bluetooth adapter found" のようなものを返します。)
その後
- ペアリングされたデバイスを Bluetooth がスキャンしますが、接続機能が消えます。
以下のいずれの試みもうまくいきません。
- bluetoothctl" のようなコマンド (bluetoothctl enable bluetooth.service, bluetoothctl start bluetooth.service...) では、この状況を解決することはできません。
- "lsmod" のようなコマンドでは修正できません。
- bluetooth パッケージの再インストールでも解決しません。
Bluetooth の機能を再び確認する唯一の方法は、無効化 bluetooth-mesh.service を実行することです。
=> 再起動すると自動的にブルートゥースが復活します。
詳しくは Arch Linux forum の関連したディスカッションを参照してください。