コンテンツにスキップ

Bluetooth

提供: ArchWiki

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

インストール

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

フロントエンド

コンソール

  • 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 Bluetooth — GNOME の 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 ||
  • Bluedevil — KDE の 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
  • Bluetooth Manager Sidebar — GTK4/libadwaita を使用した Wayland セッション向けの Bluetooth マネージャー。サイドバーとして開き、デバイスのペアリング、OBEX ファイル転送、オーディオプロファイルの切り替えに対応しています。
https://github.com/Relz/bluetooth-manager-sidebar || bm-sidebarAUR
  • 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 の方でペアリングキーを変更して Windows または macOS で使用されているペアリングキーと同じにする必要があります。

このページでは、これを手動で行う方法のみを説明しています。この手順を自動化するには、bt-dualboot プロジェクトや関連するリポジトリを参照してください。

設定方法

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

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

Windows の場合

Windows での展開

まず、Windows を起動してください。

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

PsTools をダウンロードし、PsExec64.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 デバイスではなく、そのペアリングキーが必要なもの全てであるということになります。

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

最後に、キーを Linux 環境にインポートするために、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 環境にインポートするために #終わりに へ進んでください。

macOS の場合

macOS を起動し:

  • macOS Monterey 及びそれ以降の場合:
    1. Keychain Access を開き、Bluetooth と検索してください。
    2. 日付順でソートしてください。
    3. 対象のデバイスを最近取り除いて再接続した場合、キーを変更日時順でソートして、最新のものを選べばよいです。キーはおそらく MobileBluetooth (古い Bluetooth デバイスの場合) という名前か、UUID (Bluetooth 5.1 以降) だけです。
    4. 対象のエントリをダブルクリックしてください。Account フィールドの MAC アドレスが対象デバイスの MAC アドレスと一致することを確認してください。
    5. "Show password" チェックボックスをクリックしてください。ここで、パスワードを2回入力する必要があります。
    6. パスワードフィールド内のテキストをコピーしてください (⌘+a ⌘+c)。これは実際には XML ファイルです。
    • テキストをホームディレクトリ内の bt_keys.txt ファイルにペーストしてください。
  • High Sierra 及びそれ以降の場合、次のコマンドをターミナルで実行してください:
    # defaults read /private/var/root/Library/Preferences/com.apple.bluetoothd.plist LinkKeys > ~/bt_keys.txt
  • Sierra 及びそれ以前の場合、次のコマンドをターミナルで実行してください:
    # defaults read /private/var/root/Library/Preferences/blued.plist LinkKeys > ~/bt_keys.txt

すると、~/.bt_keys.txt ファイルには、確立された Bluetooth キーが含まれています。古いバージョンの 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 AA 2F 54 98 になります。

ノート キーの並びを逆にするには、以下の Python コードを使用できます:
>>> key = "98 54 2f aa bb cc dd ee ff gg hh ii jj kk ll mm"
>>> " ".join(reversed(key.strip().split()))

Bluetooth 5.1 デバイスの場合、1つのデバイスに対して複数のキーが関連付けられています。それらのキーを使用する方法については #Bluetooth 5.1 キーの準備 を見てください。

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

Bluetooth 5.1 キーの準備

#Windows の場合 や #macOS の場合 の章に従っていて Bluetooth 5.1 キーが存在していた場合、それらのキーを Linux にインポートする前に特定の変換をかける必要があります。#終わりに の章で使うために、要求されたファイルを適切に作成してください。この手順は対象デバイスによって異なり、キーの一部を操作する必要があります。これを行うためのユーティリティは以下で挙げられています。

デバイス 元のキー及び変換 (Windows) 元のキー及び変換 (macOS) キーの保存先ファイル
  • Logitech MX Master 3
  • Xbox One S Wireless Controller
  • IRK をコピー。
  • 16進数の桁間のスペースを除去。
? IdentityResolvingKey.Key
  • LTK をコピー。
  • 16進数の桁間のスペースを除去。
? SlaveLongTermKey.Key と PeripheralLongTermKey.Key
ERand と EDIV は 0 にする必要あり。 Random Number と Encrypted Diversifier は 0 にする必要あり。 –
  • ThinkPad TrackPoint Keyboard II
  • Pebble M350 マウス
  • Logitech G604 Lightspeed マウス
  • IRK をコピー
  • バイトの順番を逆に。
  • Remote IRK をコピー。
  • Base64 から16進数に変換。
IdentityResolvingKey.Key
  • LTK をコピー。
  • 16進数の桁間のスペースを除去。
  • Remote Encryption を Long-term Key にコピー。
  • Base64 から16進数に変換。
LongTermKey.Key
  • ERand をコピー。
  • バイトの順番を逆に。
  • 数値全体を10進数に変換。
  • Remote Encryption を Random Number にコピー
  • Base64 をリトルエンディアンの10進数に変換 (以下の Python コードを参照)。
LongTermKey.Rand
  • EDIV をコピー。
  • バイトの順番を逆に。
  • 数値全体を10進数に変換。
  • Remote Encryption を Encrypted Diversifier にコピー。
  • Base64 からリトルエンディアンの10進数に変換 (以下の Python コードを参照)。
LongTermKey.EDiv
他のデバイス
  • LTK をコピー。
  • 16進数の桁間のスペースを除去。
  • Remote IRK をコピー。
  • Base64 から16進数に変換。
LongTermKey.Key
  • ERand をコピー。
  • バイトの順番を逆に。
  • 数値全体を10進数に変換。
  • Remote Encryption を Long-term Key にコピー。
  • Base64 から16進数に変換。
LongTermKey.Rand
  • EDIV をコピー。
  • 16進数の桁間のスペースを除去。
  • Remote Encryption を Encrypted Diversifier にコピー。
  • Base64 から16進数に変換。
  • バイトの順番を逆に。
LongTermKey.EDiv
Xbox ワイヤレスコントローラ
  • LTK をコピー。
  • 16進数の桁間のスペースを除去。
? SlaveLongTermKey.Key
ノート
>>> "key_value".replace(" ", "")
  • 以下の Python コードはバイトの順番を逆にするだけです:
>>> ERand=" 63 02 84 B8 5D 40 44 DF   "
>>> ERand=list(reversed(ERand.strip().split()))
  • 以下の Python コードは、一部で必要となる追加の10進数変換を行います:
>>> int("".join(ERand), 16)
16088054540146049635
  • 以下の Python コードは base64 から16進数への変換を行います:
binascii.hexlify(base64.decodebytes(b'...')).upper()
  • 以下の Python コードは完全な macOS Encrypted Diversifier の変換を行います:
struct.unpack('<H', base64.decodebytes(b'...'))
  • 以下の Python コードは完全な macOS Random Number の変換を行います:
struct.unpack('<Q', base64.decodebytes(b'...'))

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

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

設定の保存

キーを手に入れたら、ユーザーを 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 の場合)、以下の info ファイルを編集して、全てのキーをそれぞれの値で置き換えてください。例えば、Xbox One S Wireless Controller の場合:

info
[IdentityResolvingKey]
Key=<IdentityResolvingKey.Key>

[PeripheralLongTermKey]
Key=<PeripheralLongTermKey.Key>

[SlaveLongTermKey]
Key=<SlaveLongTermKey.Key>

次に、bluetooth.service と pulseaudio を再起動してください。(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"

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

Bluez スタックは、バグがあるかもしれない新しい機能を D-Bus 実験的オプションおよびカーネル実験的オプションに留めます。実験的な機能は最終的に、安定していると判断され、もはやオプションを必要としなくなるので、どのような実験的な機能が存在するかはバージョンによって異なります (例えば、現在 D-Bus の実験的なインターフェイスを有効化すると、古いヘッドセットのバッテリーレベルを報告できるようになります)。実験的な機能を有効化するには、設定の対応する行をアンコメントしてください:

/etc/bluetooth/main.conf
...

# Enables D-Bus experimental interfaces
# Possible values: true or false
#Experimental = true

# Enables kernel experimental features, alternatively a list of UUIDs
# can be given.
# Possible values: true,false,<UUID List>
# Possible UUIDS:
...
# Defaults to false.
#KernelExperimental = true

あるいは、bluetooth.service を編集して、--experimental フラグあるいは --kernel フラグを追加してください。例えば、以下のドロップインファイルのように:

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

いずれの場合でも、bluetooth.service を再起動する必要があります。

オーディオ

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

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

PulseAudio

Bluetooth ヘッドフォンやスピーカーのようなオーディオ機器を使うには pulseaudio-bluetooth パッケージのインストールが必要です。インストールを反映させるために、pulseaudio を再起動してください: pulseaudio -k。デフォルトの Pulseaudio インストールでは (具体的には、パッケージングされているデフォルトの default.pa でユーザインスタンスを使用している場合)、即座に Bluetooth デバイスからスピーカーにオーディオをストリーミングできるはずです。[3]

システム全体の 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:XX と FILE.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-deprecated-tools をインストールします。新しいツールにはない機能があります。

ペアになっているデバイスの 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 ツール

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

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

サービスの問題

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

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 マウス/キーボードを使ってシステムをスリープから復帰させることができなくなります。

ヘッドレス/サーバのシステムでログアウト後に Bluetooth がオフになる

様々な原因が考えられます:

  • PulseAudio と PipeWire は両方ともデフォルトでユーザサービスとして動作します。よって、最後のセッションが終了するとこれらのサービスは終了されます。この問題を解決するには、対象のユーザに対して Lingering (残留) を有効化してください。
  • さらに、WirePlumber を PipeWire と共に実行している場合 (これはよくある環境です)、WirePlumber は "logind-monitor" を実行します。これは、Bluetooth をログイン時に有効化し、ログアウト時に無効化します。問題の解決方法は WirePlumber#ログアウト後も Bluetooth を実行し続ける/ヘッドレス Bluetooth を見てください。

アダプタの問題

hcitool scan: Device not found

  • 一部のラップトップ (例: Dell Studio 15、Lenovo Thinkpad X1) では、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-deprecated-tools を使うことでこの問題が解決したというケースが報告されています。

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

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

# modprobe -r btusb
# modprobe btusb

また、ドングルが CSR クローンである場合にもこの問題が発生することがあります。

rfkill unblock: Do not unblock

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

$ connmanctl enable bluetooth

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) にはリグレッションのバグがあり、現在、カーネルバージョン 5.17 及び < 6.0 でしか動作しません。詳細は、Kernel Bug 60824 を参照してください。

Logitech Bluetooth USB ドングル

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

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

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

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

一部のデバイスでは、起動時にファームウェアを書き込む必要があります。

一部のファームウェアは、AUR で broadcom と検索すると入手できます。特出すべきパッケージは broadcom-bt-firmwareAUR です。これは、様々なカード用のファイルを提供します。

または、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[リンク切れ 2023-09-16])。フォーマットにも依りますが、ファイルの展開にはunrar か cabextract が必要である場合があります。多数の .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 の共存 を見てください。

Windows とのデュアルブート環境における Mediatek MT7921 や MT7961

デュアルブートシステムでは、Bluetooth のファームウェアバージョンが Windows と Linux とで異なる場合、Windows を起動した後に Bluetooth アダプタが動作しなくなります。

これを防ぐ最も良い方法は、各 OS 用の Bluetooth ドライバ (特にファームウェア) を最新にすることです。

Windows 用の最新バージョンのドライバ (またはファームウェア) を見つけられない場合、最新のファームウェアファイル /usr/lib/firmware/mediatek/BT_RAM_CODE_MT7961_1_2_hdr.bin.xz を Arch Linux からコピーし、Windows へ展開することができます (例えば、C:\WINDOWS\system32\DRIVERS\。Windows でのファームウェアファイルへのパスはデバイスマネージャから確認できます)。

サスペンド/復帰後にアダプタが消える

まず、アダプタのベンダーと製品 ID を見つけてください。例:

First, find vendor and product ID of the adapter. For example:

$ 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

ペアリングと接続の問題

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

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

# bluetoothctl discoverable on

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

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

まだコンピュータが表示されない場合、以下のように /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 を見てください。

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

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

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)。transport le を使ってスキャンすることができます。

# bluetoothctl
[bluetooth]# menu scan
[bluetooth]# transport le
[bluetooth]# back
[bluetooth]# scan on
[bluetooth]# devices
...
Device XX:XX:XX:XX:XX:XX DA V2 X <---- 低消費電力なデバイス

もう一つの方法は、bluez-utils-compatAUR をインストールし、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 からデバイスが認識されたら通常通りにペアリングできます。

Intel Corp. AX200 Bluetooth で BLE デバイスが見つからない

どうやら、このデバイスでは BLE のパッシブスキャンが壊れているようです。詳細は上流のバグレポートを見てください。

スリープ後に再接続できない

スリープ後や、コンピュータがスリープから復帰した後に、デバイスが自動的に再接続されないことがあります。

この時、ログに以下のエラーが記録されます:

bluetoothd[487]: Authentication attempt without agent
bluetoothd[487]: Access denied: org.bluez.Error.Rejected

これは、デバイスが trusted としてマークされていないことが原因です。#ペアリング を参照してください。

デバイス固有の問題

Bluetooth マウスのラグ / 接続断 / 応答なし

Bluetooth マウス#トラブルシューティング を参照してください。

オーディオデバイスが br-connection-profile-unavailable で接続に失敗する

PipeWire (pulseaudio-bluetooth ではない) が使用されているが、PipeWire のインスタンスが実行されていない場合、bluetooth オーディオデバイスは接続に失敗します。PipeWire デーモンを開始するには、pipewire.service ユーザーユニットを開始するか、何らかの音声を再生してください。その後、オーディオデバイスをもう一度接続してみてください。

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

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

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

以下の設定を使用してください:

/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 のドライバは必要ありません。

ファイル転送の問題

gnome-bluetooth

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

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

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

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

有効な 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 ユーザユニットを再起動してください。

参照

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