Bluetooth
Bluetooth は携帯電話やコンピュータなどの電子デバイス用の近距離無線通信規格です。Linux においては、Bluetooth プロトコルスタックの実装として BlueZ が標準的に使われています。
目次
- 1 インストール
- 2 CLI による設定
- 3 設定
- 4 グラフィカルフロントエンドによる設定
- 5 Obex を使ってファイルの送受信を行う
- 6 オーディオ
- 7 Bluetooth シリアル
- 8 トラブルシューティング
- 8.1 デバッグ
- 8.2 bluez-utils にシェルコマンドが入っていない
- 8.3 bluetoothctl
- 8.4 gnome-bluetooth
- 8.5 Bluetooth USB ドングル
- 8.6 Logitech Bluetooth USB ドングル
- 8.7 hcitool scan: Device not found
- 8.8 rfkill unblock: Do not unblock
- 8.9 コンピュータが表示されない
- 8.10 Logitech のキーボードがペアリングできない
- 8.11 HSP/HFP プロファイル
- 8.12 Thinkpad Bluetooth レーザーマウス
- 8.13 Foxconn / Hon Hai / Lite-On の Broadcom デバイス
- 8.14 デバイスを接続した数秒後に切断してしまう
- 8.15 エラーによってデバイスが接続できない
- 8.16 スキャンしてもデバイスが表示されない
- 8.17 ヘッドホンとマウスの干渉
- 8.18 Bluetoothマウスの動きの遅さ
- 8.19 サスペンド/リジューム後にアダプタが消える
- 8.20 カーネル 5.9 以降のすべての BLE デバイスの問題
- 8.21 カーネル 5.10 の一部の Bluetooth ドライバの問題
インストール
公式リポジトリから Bluetooth プロトコルスタックの bluez と、bluetoothctl
ユーティリティが入っている bluez-utils パッケージをインストールしてください。systemd によって自動的に起動される dbus
デーモンが PIN ペアリングや設定の読み込みを行いますが、Bluetooth プロトコルを使うには bluetooth
デーモンが必要です。
共通の bluetooth ドライバーがロードされていなかったら、ロードしてください:
# modprobe btusb
bluetooth の systemd サービスを起動するには次のコマンドを使って下さい:
# systemctl start bluetooth
起動時に bluetooth サービスを有効にするには:
# systemctl enable bluetooth
CLI による設定
Bluetoothctl
シェルからデバイスをペアリングするのは最もシンプルで信頼性のある方法の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
設定
起動後に自動で有効にする
デフォルトでは、再起動後に Bluetooth アダプタが有効になりません。hciconfig hci0 up
を使用する以前の方法は非推奨となりました。詳しくは リリースノート を見てください。現在では、AutoEnable=true
を /etc/bluetooth/main.conf
の [Policy]
セクションの下部に追加するだけです:
/etc/bluetooth/main.conf
[Policy] AutoEnable=true
起動時に発見可能にする
デバイスが常に見えていて、直接接続できる必要がある場合:
/etc/bluetooth/main.conf
[General] DiscoverableTimeout = 0
グラフィカルフロントエンドによる設定
以下のパッケージによって Bluetooth をカスタマイズするのにグラフィカルインターフェイスを使えるようになります。
GNOME Bluetooth
GNOME Bluetooth は GNOME の Bluetooth ツールです。gnome-bluetooth パッケージにはバックエンドが含まれており、gnome-shell には状態監視アプレットが、gnome-control-center には設定フロントエンド GUI が入っています。アクティビティに Bluetooth と入力するか、gnome-control-center bluetooth
コマンドを実行することでアクセスできます。また、bluetooth-sendto
コマンドを実行することでリモートデバイスに直接ファイルを送信することが可能です。
ファイルを受信するには、gnome-user-share パッケージをインストールしてください。Settings -> Sharing からペアリングしたデバイスから Bluetooth 経由で送られたファイルを受け取ることができます。
Bluedevil
Bluedevil は KDE の Bluetooth ツールです。bluedevil (KDE Plasma 5) パッケージでインストールすることができます。
Dolphin やシステムトレイには Bluetooth アイコンが表示されないので、手動で追加してください。アイコンをクリックすることで Bluedevil を設定したり Bluetooth デバイスを検出できます。KDE システム設定からインターフェイスにアクセスすることも可能です。
Blueberry
Blueberry は全てのデスクトップ環境で動作するフロントエンドです。blueberry パッケージでインストールできます。設定ツール (blueberry) とシステムトレイアプレット (blueberry-tray) が含まれています。
Blueman
Blueman を参照。
Obex を使ってファイルの送受信を行う
ObexFS
KDE や Gnome の Bluetooth パッケージを使うのとは別の選択肢として、ObexFS を使うことで他のファイルシステムと同じように携帯をマウントすることができます。
obexfsAUR[リンク切れ: パッケージが存在しません] をインストールして、次を実行することでサポートされている携帯をマウントします:
$ obexfs -b MAC_address_of_device /mountpoint
作業が終わったら、デバイスをマウントするために次のコマンドを使って下さい:
$ fusermount -u /mountpoint
他のマウントオプションについては http://dev.zuckschwerdt.org/openobex/wiki/ObexFs を見て下さい。
ObexFTP 転送
あなたのデバイスが Obex FTP サービスをサポートしている場合、デバイスをマウントしたくないときに obexftp コマンドを使ってデバイスとファイルをやり取りすることが可能です。
デバイスにファイルを送るには次のコマンドを実行してください:
$ obexftp -b MAC_address_of_device -p /path/to/file
デバイスからファイルを受け取るには次のコマンドを実行してください:
$ obexftp -b MAC_address_of_device -g filename
Obex Object Push
Obex FTP サービスをサポートしていないデバイスの場合、Obex Object Push がサポートされていないか確認してください。
# sdptool browse XX:XX:XX:XX:XX:XX
出力を見て、Obex Object Push を探し、サービスのチャンネルを覚えておいて下さい。サポートされていれば、ussp-pushAUR を使ってデバイスにファイルを送信できます:
# ussp-push XX:XX:XX:XX:XX:XX@CHANNEL file wanted_file_name_on_phone
コンピュータのスピーカーを bluetooth ヘッドセットとして使う
設定によってコンピュータのスピーカーを通して携帯電話の音声を再生することなどができます。
以下を /etc/bluetooth/audio.conf
ファイルに追加 (ファイルが存在しない場合は作成してください):
[General] Enable=Source
詳細:
- Bluetooth ヘッドセット
- https://gist.github.com/joergschiller/1673341
- http://www.lightofdawn.org/blog/?viewDetailed=00031
オーディオ
通常は、オーディオサーバーと 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 ...
PipeWire
v0.3.19 以降の PipeWire はデフォルトで Bluetooth をサポートしています。 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-rfcommAUR と bluez-utils-compatAUR をインストールします。新しいツールにはない機能があります。
ペアになっているデバイスの MAC アドレスを tty 端末にバインドします。
# rfcomm bind rfcomm0 <MAC address of bluetooth device>
これで、シリアル通信用に /dev/rfcomm0
を開くことができます。
picocom/dev/rfcomm 0-b 115200
トラブルシューティング
デバッグ
デバッグするには、最初に bluetooth.service
を stop します。
そして -d
パラメーターを付けて開始します。
# /usr/lib/bluetooth/bluetoothd -n -d
別のオプションとして、 btmon
ツールが有ります。
bluez-utils にシェルコマンドが入っていない
一部のツールは廃止されパッケージから削除されました。現時点ではまだ AUR パッケージの bluez-utils-compatAUR でインストールすることは可能です。新しいツールによって概ね同じ機能が使えますが、一部の機能はまだ新しい D-Bus API で実装されていません:
廃止されたツール | 代わりとなるツール |
---|---|
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 | 存在しません。D-Bus Device API から利用できます。 |
rfcomm | 存在しません。D-Bus Profile1 API で実装できます。 |
ciptool | |
sdptool | 存在しません。複数の D-Bus オブジェクトに機能が分散されています: Profile, Advertising, device と adapter の UUID 配列。 |
bluetoothctl
bluetoothctl でコントローラが見つからない場合、bluetooth デバイスがブロックされている可能性があります。rfkill[リンク切れ: 置換パッケージ: util-linux] を使ってブロックを解除してみてください:
# rfkill unblock bluetooth
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 参照してください。
カーネル 5.10 の一部の Bluetooth ドライバの問題
v5.10 以降、一部の Qualcomm Atheros bluetooth チップセットドライバーが動作しなくなり、次のエラーが表示される場合:
journalctl | grep hci0
Feb 22 18:40:24 user kernel: Bluetooth: hci0: don't support firmware rome 0x31010000
Linux.org Bugzilla で関連する バグレポート を参照してください。
パッチを当ててモジュールを再構築するか (btusb-210681-fix)、古い (5.9.x) カーネルを使うことができます。このバグは linux 5.11.arch2-1 で修正されました。