「Bluetooth」の版間の差分
(同期) |
|||
(6人の利用者による、間の94版が非表示) | |||
1行目: | 1行目: | ||
[[Category:Bluetooth]] |
[[Category:Bluetooth]] |
||
− | [[cs:Bluetooth]] |
||
[[de:Bluetooth]] |
[[de:Bluetooth]] |
||
[[en:Bluetooth]] |
[[en:Bluetooth]] |
||
[[es:Bluetooth]] |
[[es:Bluetooth]] |
||
− | [[fr:Bluetooth]] |
||
− | [[it:Bluetooth]] |
||
[[ru:Bluetooth]] |
[[ru:Bluetooth]] |
||
− | [[zh- |
+ | [[zh-hans:Bluetooth]] |
{{Related articles start}} |
{{Related articles start}} |
||
− | {{Related|Bluez4}} |
||
{{Related|Bluetooth マウス}} |
{{Related|Bluetooth マウス}} |
||
+ | {{Related|Bluetooth キーボード}} |
||
{{Related|Bluetooth ヘッドセット}} |
{{Related|Bluetooth ヘッドセット}} |
||
{{Related|Blueman}} |
{{Related|Blueman}} |
||
+ | {{Related|ObexFTP}} |
||
{{Related articles end}} |
{{Related articles end}} |
||
− | [ |
+ | [[Wikipedia:ja:Bluetooth|Bluetooth]] は携帯電話やコンピュータなどの電子デバイス用の近距離無線通信規格です。Linux においては、Bluetooth プロトコルスタックの実装として [http://www.bluez.org/ BlueZ] が標準的に使われています。 |
== インストール == |
== インストール == |
||
− | + | # Bluetooth プロトコロスタックを提供する、{{Pkg|bluez}} パッケージを[[インストール]]します。 |
|
+ | # {{ic|bluetoothctl}} ユーティリティを提供する、{{Pkg|bluez-utils}} を[[インストール]]します。または {{AUR|bluez-utils-compat}} を[[インストール]]して、[[#非推奨の BlueZ tools|非推奨の BlueZ tools]] を追加します。 |
||
+ | # 一般的な Bluetooth ドライバは、{{ic|btusb}} カーネルモジュールです。このモジュールがロードされているかどうかを[[カーネルモジュール#情報を取得|確認]]してください。もしロードされていなければ、[[カーネルモジュール#手動でモジュールを扱う|モジュールをロード]]してください。 |
||
+ | # {{ic|bluetooth.service}} を[[起動/有効化]]します。 |
||
+ | {{Note| |
||
− | 共通の bluetooth ドライバーがロードされていなかったら、ロードしてください: |
||
+ | * デフォルトでは bluetooth デーモンは {{ic|lp}} [[ユーザーとグループ#システムグループ|グループ]]のメンバーのユーザーだけに bnep0 デバイスを提供します。bluetooth テザリングに接続するときはユーザーをグループに追加しておいてください。必要なグループは {{ic|/etc/dbus-1/system.d/bluetooth.conf}} ファイルで変更することができます。 |
||
− | # modprobe btusb |
||
+ | * Bluetooth アダプターには Wi-Fi カードがバンドルされているものもあります (例: [https://www.intel.com/content/www/us/en/wireless-products/centrino-advanced-n-6235.html Intel Centrino]{{Dead link|2023|09|16|status=404}})。これらの Bluetooth アダプターをカーネルから見えるようにするには、まず Wi-Fi カードを有効にする必要があります (大体はラップトップ上のキーボードショートカットを使う)。 |
||
+ | * Bluetooth カードによってはネットワークアダプタと衝突することがあります (例: Broadcom)。したがって、ネットワークサービスを起動する前に Bluetooth デバイスを接続するようにしてください。 |
||
+ | * hcitool や hciconfig などのツールは上流では非推奨となっており、{{Pkg|bluez-utils}} にはもはや含まれていません。アップデートされないことが決まっているため、スクリプトの中で使用している場合は使わないように書き換えることを推奨します。それでも使いたい場合は {{AUR|bluez-utils-compat}} をインストールしてください。詳しい情報は {{Bug|53110}} や [https://lore.kernel.org/linux-bluetooth/20170104133401.3636-1-luiz.dentz@gmail.com/ Bluez メーリングリスト] を参照。}} |
||
+ | === フロントエンド === |
||
− | bluetooth の [[systemd]] サービスを起動するには次のコマンドを使って下さい: |
||
− | # systemctl start bluetooth |
||
+ | ==== コンソール ==== |
||
− | 起動時に bluetooth サービスを有効にするには: |
||
− | # systemctl enable bluetooth |
||
+ | * {{App|bluetoothctl|シェルからデバイスをペアリングすることは、最も単純で信頼性の高いオプションの一つです。|http://www.bluez.org/|{{Pkg|bluez-utils}}}} |
||
− | {{Note| |
||
+ | * {{App|bluetuith|ターミナルユーザインターフェイスによる Bluetooth マネージャを提供します。OBEX ファイル転送とマウスのサポート付きで、デバイス/アダプタを簡単に管理できます。|https://www.github.com/darkhz/bluetuith|{{AUR|bluetuith}}}} |
||
− | * デフォルトでは bluetooth デーモンは {{ic|lp}} グループのメンバーのユーザーだけに bnep0 デバイスを提供します。bluetooth で接続するときはユーザーをグループに追加しておいてください。必要なグループは {{ic|/etc/dbus-1/system.d/bluetooth.conf}} ファイルで変更することができます。 |
||
− | * Bluetooth アダプターには Wi-Fi カードがバンドルされているものもあります (例: [http://www.intel.com/content/www/us/en/wireless-products/centrino-advanced-n-6235.html Intel Centrino])。これらの Bluetooth アダプターをカーネルから見えるようにするには、まず Wi-Fi カードを有効にする必要があります (大体はラップトップ上のキーボードショートカットを使う)。 |
||
− | * Bluetooth カードによってはネットワークアダプタと衝突することがあります (例: Broadcom)。したがって、ネットワークサービスを起動する前に Bluetooth デバイスを接続するようにしてください。}} |
||
+ | {{Tip|bluetoothctl コマンドを自動化するには、{{ic|echo -e "''command1''\n''command2''\n" {{!}} bluetoothctl}} または {{ic|bluetoothctl -- ''command''}} を使用します。}} |
||
− | == CLI による設定 == |
||
+ | |||
− | === Bluetoothctl === |
||
+ | ==== グラフィカル ==== |
||
− | シェルからデバイスをペアリングするのは最もシンプルで信頼性のある方法の1つです。正確な手順は利用するデバイスとその入力機能によります。以下は {{ic|/usr/bin/bluetoothctl}} を使ってデバイスをペアリングする一般的な説明です: |
||
+ | |||
+ | 以下のパッケージでは、Bluetooth をカスタマイズするためのグラフィカルインターフェイスが利用可能です。 |
||
+ | |||
+ | * {{App|GNOME Bluetooth|[[GNOME]] の Bluetooth ツール。 |
||
+ | ** {{Pkg|gnome-bluetooth-3.0}} バックエンドを提供 ({{Pkg|gnome-bluetooth}} はレガシーです) |
||
+ | ** {{Pkg|gnome-shell}} ステータスモニターアプレットを提供 |
||
+ | ** {{Pkg|gnome-control-center}} は設定用のフロントエンド GUI を提供しており、アクティビティ概要で Bluetooth と入力するか、 {{ic|gnome-control-center bluetooth}} コマンドでアクセスすることができます。 |
||
+ | ** また、{{ic|bluetooth-sendto}} コマンドを直接起動して、リモートデバイスにファイルを送信することも可能です。 |
||
+ | ** {{AUR|nautilus-bluetooth}} は Nautilus の右クリックメニューに "Bluetoothで送信" エントリを追加します。 |
||
+ | ** ファイルを受信するには、Bluetooth 設定パネルを開きます。Bluetooth パネルが開いている間のみ受信できます。 |
||
+ | ** Thunar のファイルプロパティメニューの ''送信先'' メニューに Bluetooth エントリを追加するには、説明 [https://docs.xfce.org/xfce/thunar/send-to ここ] を参照してください。(設定が必要なコマンドは {{ic|bluetooth-sendto %F}} です) |
||
+ | |https://wiki.gnome.org/Projects/GnomeBluetooth|}} |
||
+ | * {{App|Bluedevil|[[KDE]] の Bluetooth ツール。 Dolphin やシステムトレイに Bluetooth のアイコンが表示されていない場合は、システムトレイオプションで有効にするか、ウィジェットを追加してください。アイコンをクリックすることで、Bluedevil の設定や Bluetooth デバイスの検出が可能です。KDE システム設定からもインターフェースが利用できます。|https://invent.kde.org/plasma/bluedevil|{{Pkg|bluedevil}}}} |
||
+ | * {{App|Blueberry|GNOME Bluetooth から Linux Mint でスピンオフした ''Blueberry'' は全てのデスクトップ環境で動作します。Obex Object Push によるファイル受信をサポートしていません。|https://github.com/linuxmint/blueberry|{{Pkg|blueberry}}}} |
||
+ | * {{App|[[Blueman]]|フル機能の Bluetooth マネージャー|https://github.com/blueman-project/blueman|{{Pkg|blueman}}}} |
||
+ | * {{App|[[ObexFTP]]|OBEX 対応のデバイスとの間でファイルを転送するツール。|http://dev.zuckschwerdt.org/openobex/wiki/ObexFtp|{{AUR|obexftp}}}} |
||
+ | |||
+ | == ペアリング == |
||
+ | |||
+ | {{Note|Bluetooth デバイスを使用する前に、[[rfkill]] でブロックされていないことを確認してください。}} |
||
+ | |||
+ | このセクションでは、''bluetoothctl'' CLI を使って ''bluez5'' を直接設定する方法を説明しています。これは、代替のフロントエンドツール(例えば GNOME Bluetooth)を使用している場合は必要ないかもしれません。 |
||
+ | |||
+ | 正確な手順は、利用するデバイスとその入力機能によります。以下は {{ic|bluetoothctl}} を使ってデバイスをペアリングする一般的な説明です。 |
||
{{ic|bluetoothctl}} 対話コマンドを実行してください。{{ic|help}} と入力することで利用できるコマンドのリストを表示できます。 |
{{ic|bluetoothctl}} 対話コマンドを実行してください。{{ic|help}} と入力することで利用できるコマンドのリストを表示できます。 |
||
+ | |||
− | * {{ic|power on}} と入力してコントローラの電源を入れて下さい。デフォルトではオフになっています。 |
||
− | + | # (任意) {{ic|select ''MAC Address''}} と入力してデフォルトのコントローラを選択してください。 |
|
− | + | # (任意) デバイスがオフになっている場合、{{ic|power on}} と入力してコントローラへの電源供給をオンにしてください。デバイスはデフォルトでオンになっています ([[#アダプタのデフォルト電源状態]])。 |
|
− | + | # {{ic|devices}} と入力して、ペアリングしたいデバイスの MAC アドレスを取得してください。 |
|
+ | # デバイスが表示されないときは {{ic|scan on}} コマンドでデバイス検出モードにしてください。 |
||
− | * {{ic|pair ''MAC Address''}} と入力することでペアリングを実行します (タブ補完が使えます)。 |
||
+ | # {{ic|agent on}} でエージェントをオンにするか、特定のエージェントを選択してください: {{ic|agent}} の後にタブキーを2回押すと、利用可能なエージェントのリストが表示されるはずです。Bluetooth エージェントとは、Bluetooth の 'ペアリングコード' を管理するもののことです。エージェントは、'ペアリングコード'の受信に応答したり、'ペアリングコード'を送信したりできます。ほとんどの場合、{{ic|default-agent}} を使うのが適切なはずです。[https://askubuntu.com/questions/763939/bluetoothctl-what-is-a-bluetooth-agent] |
||
− | * PIN がないデバイスを使う場合は、手動でデバイスを信頼する必要があるかもしれません。{{ic|trust ''MAC Address''}} と入力してこれを行なって下さい。 |
||
+ | # {{ic|pair ''MAC Address''}} と入力することでペアリングを実行します (タブ補完が使えます)。 |
||
− | * 最後に、{{ic|connect ''MAC_address''}} を使って接続を確立してください。 |
||
+ | # PIN がないデバイスを使う場合は、手動でデバイスを信頼する必要があるかもしれません。{{ic|trust ''MAC Address''}} と入力してこれを行なって下さい。デバイスを信頼するには {{ic|trust ''MAC_address''}} と入力してください。 |
||
+ | # {{ic|connect ''MAC_address''}} を使って接続を確立してください。 |
||
セッションの例は以下のようになります: |
セッションの例は以下のようになります: |
||
− | # bluetoothctl |
||
− | [NEW] Controller 00:10:20:30:40:50 pi [default] |
||
− | [bluetooth]# agent KeyboardOnly |
||
− | Agent registered |
||
− | [bluetooth]# default-agent |
||
− | Default agent request successful |
||
− | [bluetooth]# scan on |
||
− | Discovery started |
||
− | [CHG] Controller 00:10:20:30:40:50 Discovering: yes |
||
− | [NEW] Device 00:12:34:56:78:90 myLino |
||
− | [CHG] Device 00:12:34:56:78:90 LegacyPairing: yes |
||
− | [bluetooth]# pair 00:12:34:56:78:90 |
||
− | Attempting to pair with 00:12:34:56:78:90 |
||
− | [CHG] Device 00:12:34:56:78:90 Connected: yes |
||
− | [CHG] Device 00:12:34:56:78:90 Connected: no |
||
− | [CHG] Device 00:12:34:56:78:90 Connected: yes |
||
− | Request PIN code |
||
− | [agent] Enter PIN code: 1234 |
||
− | [CHG] Device 00:12:34:56:78:90 Paired: yes |
||
− | Pairing successful |
||
− | [CHG] Device 00:12:34:56:78:90 Connected: no |
||
+ | {{hc|$ bluetoothctl| |
||
− | 再起動の後にもデバイスを有効にしておくには、udev ルールが必要です: |
||
+ | [NEW] Controller 00:10:20:30:40:50 ''hostname'' [default] |
||
− | {{hc|/etc/udev/rules.d/10-local.rules|2= |
||
+ | [bluetooth]# agent KeyboardOnly |
||
− | # Set bluetooth power up |
||
+ | Agent registered |
||
− | ACTION=="add", KERNEL=="hci0", RUN+="/usr/bin/hciconfig hci0 up"}} |
||
+ | [bluetooth]# default-agent |
||
− | 以下のような systemd サービスを使うことで、サスペンド・復帰の後にデバイスの電源を自動的にオンにすることが可能です: |
||
+ | Default agent request successful |
||
− | {{hc|/etc/systemd/system/bluetooth-auto-power@.service|<nowiki> |
||
− | [Unit] |
||
− | Description=Bluetooth auto power on |
||
− | After=bluetooth.service sys-subsystem-bluetooth-devices-%i.device suspend.target |
||
+ | [bluetooth]# power on |
||
− | [Service] |
||
+ | Changing power on succeeded |
||
− | Type=oneshot |
||
+ | [CHG] Controller 00:10:20:30:40:50 Powered: yes |
||
− | #We could also do a 200 char long call to bluez via dbus. Except this does not work since bluez does not react to dbus at this point of the resume sequence and I do not know how I get this service to run at a time it does. So we just ignore bluez and force %i up using hciconfig. Welcome to the 21st century. |
||
− | #ExecStart=/usr/bin/dbus-send --system --type=method_call --dest=org.bluez /org/bluez/%I org.freedesktop.DBus.Properties.Set string:org.bluez.Adapter1 string:Powered variant:boolean:true |
||
− | ExecStart=/usr/bin/hciconfig %i up |
||
+ | [bluetooth]# scan on |
||
− | [Install] |
||
+ | Discovery started |
||
− | WantedBy=suspend.target |
||
+ | [CHG] Controller 00:10:20:30:40:50 Discovering: yes |
||
− | </nowiki>}} |
||
+ | [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 |
||
− | 以下のパッケージによって Bluetooth をカスタマイズするのにグラフィカルインターフェイスを使えるようになります。 |
||
+ | Attempting to connect to 00:12:34:56:78:90 |
||
+ | [CHG] Device 00:12:34:56:78:90 Connected: yes |
||
+ | Connection successful |
||
+ | }} |
||
+ | === デュアルブートペアリング === |
||
− | === GNOME Bluetooth === |
||
+ | デュアルブート環境でデバイスをペアリングするには、Linux の方でペアリングキーを変更して Windows または macOS で使用されているペアリングキーと同じにする必要があります。 |
||
− | [https://wiki.gnome.org/Projects/GnomeBluetooth GNOME Bluetooth] は [[GNOME]] の Bluetooth ツールです。{{Pkg|gnome-bluetooth}} パッケージにはバックエンドが含まれており、{{Pkg|gnome-shell}} には状態監視アプレットが、{{Pkg|gnome-control-center}} には設定フロントエンド GUI が入っています。アクティビティに Bluetooth と入力するか、{{ic|gnome-control-center bluetooth}} コマンドを実行することでアクセスできます。また、{{ic|bluetooth-sendto}} コマンドを実行することでリモートデバイスに直接ファイルを送信することが可能です。 |
||
+ | このページでは、これを手動で行う方法のみを説明しています。この手順を自動化するには、[https://github.com/x2es/bt-dualboot bt-dualboot プロジェクト]や関連するリポジトリを参照してください。 |
||
− | ファイルを受信するには、{{Pkg|gnome-user-share}} パッケージをインストールしてください。''Settings -> Sharing'' からペアリングしたデバイスから Bluetooth 経由で送られたファイルを受け取ることができます。 |
||
+ | ==== 設定方法 ==== |
||
− | {{Tip|Bluetooth のエントリを Thunar のファイルプロパティメニューの ''Send To'' に追加するには、[http://docs.xfce.org/xfce/thunar/send-to こちら] の手順を見て下さい (設定する必要があるコマンドは {{ic|bluetooth-sendto %F}} です)。}} |
||
+ | これを行うには、まず Arch Linux 上でデバイスのペアリングを行います。その後、もう一方の OS を再起動し、デバイスをペアリングします。ここでペアリング・キーを取り出す必要がありますが、まず Bluetooth デバイスの電源を切り、接続を試みないようにします。 |
||
− | === Bluedevil === |
||
+ | {{Note|([[Logitech MX Master]] や Logitech 604 Lightspeed などの) 一部の Logitech デバイスは、デバイスが新しいシステムとペアリングするたびに MAC アドレスの値を1つ増加させます。プロセスの最後にこれに対処するために、このケースに該当するかどうかを確認する必要があります。}} |
||
− | [https://projects.kde.org/projects/kde/workspace/bluedevil Bluedevil] は [[KDE]] の Bluetooth ツールです。{{Pkg|bluedevil}} (KDE Plasma 5) または {{Pkg|bluedevil4}} (KDE 4) パッケージで[[インストール]]することができます。 |
||
+ | ==== Windows の場合 ==== |
||
− | Dolphin やシステムトレイには Bluetooth アイコンが表示されないので、手動で追加してください。アイコンをクリックすることで Bluedevil を設定したり Bluetooth デバイスを検出できます。KDE システム設定からインターフェイスにアクセスすることも可能です。 |
||
− | === |
+ | ===== Windows での展開 ===== |
+ | まず、Windows を起動してください。 |
||
− | ''Blueberry'' は全てのデスクトップ環境で動作するフロントエンドです。{{Pkg|blueberry}} パッケージでインストールできます。設定ツール (''blueberry'') とシステムトレイアプレット (''blueberry-tray'') が含まれています。 |
||
+ | リンクキーを含むレジストリキーは、[https://docs.microsoft.com/en-us/windows/security/identity-protection/access-control/local-accounts#system SYSTEM アカウント]でしかアクセスできないため、ログインすることができません。そのため、{{ic|regedit.exe}} を {{ic|SYSTEM}} として実行するには、Windows Sysinternals 公式サイトにある Microsoft の [https://docs.microsoft.com/en-us/sysinternals/downloads/psexec PsExec] ツールが必要になります。 |
||
− | === Blueman === |
||
+ | [https://download.sysinternals.com/files/PSTools.zip PsTools] をダウンロードし、{{ic|PsExec64.exe}} を解凍します。 |
||
− | [[Blueman]] を参照。 |
||
+ | [https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/windows-commands#command-shell-overview コマンドシェル] の管理者インスタンスで、解凍した EXE の場所からレジストリエディタを起動してください: |
||
− | == Obex を使ってファイルの送受信を行う == |
||
+ | .\PsExec64.exe -s -i regedit.exe |
||
− | === ObexFS === |
||
+ | レジストリエディタで、以下のレジストリキーに移動します: |
||
− | KDE や Gnome の Bluetooth パッケージを使うのとは別の選択肢として、ObexFS を使うことで他のファイルシステムと同じように携帯をマウントすることができます。 |
||
− | {{Note|ObexFS を使うには、ObexFTP サービスを提供するデバイスが必要です。}} |
||
+ | HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\BTHPORT\Parameters\Keys |
||
− | {{Pkg|obexfs}} をインストールして、次を実行することでサポートされている携帯をマウントします: |
||
− | $ obexfs -b ''MAC_address_of_device'' /mountpoint |
||
+ | このキーの中に各 Bluetooth アダプターの MAC アドレス別のキーがあります。複数のキーがあり、どれを使えばいいかわからない場合は、[https://www.addictivetips.com/windows-tips/find-bluetooth-mac-address-windows-10/ このガイド]に従って、目的の Bluetooth アダプタの MAC アドレスを検索してください。 |
||
− | 作業が終わったら、デバイスをマウントするために次のコマンドを使って下さい: |
||
− | $ fusermount -u /mountpoint |
||
+ | 目的のデバイスアダプタキーの中に、ペアリングされたデバイスのそれぞれに対してキーが、MAC アドレスと関連付けられて存在しています。 |
||
− | 他のマウントオプションについては http://dev.zuckschwerdt.org/openobex/wiki/ObexFs を見て下さい。 |
||
+ | インストール間で共有したい各ペアデバイスについて、キー全体を右クリックし、''.reg'' ファイルとしてエクスポートしてください。これはテキストファイルで、このファイルからキーをコピーできます。 |
||
− | {{Note|bluetooth デバイスが''読み取り専用''でマウントされるように設定'''されてない'''ことを確認してください。デバイスの設定から確認することができるはずです。デバイスが''読み取り専用''でマウントされているとファイルをデバイスに転送しようとした時にパーミッションエラーが発生します。}} |
||
+ | このファイルにバイナリキーが1つだけ存在する場合、Bluetooth 5.1 デバイスではなく、そのペアリングキーが必要なもの全てであるということになります。 |
||
− | === ObexFTP 転送 === |
||
+ | ペアリングしたデバイスに複数のキー ({{ic|LTK}} や {{ic|IRK}} など) が存在する場合、これは Bluetooth 5.1 デバイスで''ある''ということになります。これらのキーを使う方法は [[#Bluetooth 5.1 キーの準備]] を見てください。 |
||
− | あなたのデバイスが Obex FTP サービスをサポートしている場合、デバイスをマウントしたくないときに obexftp コマンドを使ってデバイスとファイルをやり取りすることが可能です。 |
||
+ | 最後に、キーを Linux 環境にインポートするために、Linux を起動して [[#終わりに]] へ進んでください。 |
||
− | {{Note|{{pkg|obexfs}} をインストールすれば {{pkg|obexftp}} も依存パッケージとしてインストールされます。}} |
||
+ | ===== Linux での展開 ===== |
||
− | デバイスにファイルを送るには次のコマンドを実行してください: |
||
+ | {{Note|Windows パーティションが Bitlocker で暗号化されている場合、Linux から chntpw を使ってアクセスすることはできません。}} |
||
− | $ obexftp -b ''MAC_address_of_device'' -p /path/to/file |
||
+ | Arch をリブートしてください。{{Pkg|chntpw}} をインストールして、Windows システムドライブをマウントします。 |
||
− | デバイスからファイルを受け取るには次のコマンドを実行してください: |
||
+ | $ cd ''/path/to/windows/system''/Windows/System32/config |
||
− | $ obexftp -b ''MAC_address_of_device'' -g filename |
||
+ | $ chntpw -e SYSTEM |
||
+ | {{Note|CurrentControlSet の代わりに ControlSet00X(X は任意の数字)と表示されることがあります。ls コマンドで確認してください。}} |
||
+ | {{ic|chntpw}} 環境の中で以下を実行します。 |
||
+ | > cd CurrentControlSet\Services\BTHPORT\Parameters\Keys |
||
− | {{Note|Ensure that the file you are retrieving is in the device's ''exchange folder''. If the file is in a subfolder of the exchange folder then provide the correct path in the command.}} |
||
+ | もしくは |
||
+ | > cd ControlSet00X\Services\BTHPORT\Parameters\Keys |
||
+ | 次に、Bluetooth アダプタの MAC アドレスを取得し、そのフォルダを入力します。 |
||
− | === Obex Object Push === |
||
+ | > ls |
||
− | Obex FTP サービスをサポートしていないデバイスの場合、Obex Object Push がサポートされていないか確認してください。 |
||
+ | > cd ''your-device's-mac-address'' |
||
+ | ペアリングしているデバイスにも同じことをします。Bluetooth 5.1 デバイスで''ない''場合、ペアリングキーしか表示されません: |
||
− | # sdptool browse ''XX:XX:XX:XX:XX:XX'' |
||
+ | {{hc|> ls| |
||
− | 出力を見て、Obex Object Push を探し、サービスのチャンネルを覚えておいて下さい。サポートされていれば、{{pkg|ussp-push}} を使ってデバイスにファイルを送信できます: |
||
+ | Node has 0 subkeys and 1 values |
||
+ | size type value name [value if type DWORD] |
||
+ | 16 REG_BINARY <123456789876> |
||
+ | }} |
||
+ | Bluetooth 5.1 デバイスである場合、{{ic|hex}} を通して、デバイスのキーを取得します。 |
||
− | # ussp-push ''XX:XX:XX:XX:XX:XX''@''CHANNEL'' ''file'' ''wanted_file_name_on_phone'' |
||
+ | {{hc|> hex 123456789876| |
||
− | == サンプル == |
||
+ | :00000 XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX (いくつかの他の文字) |
||
+ | }} |
||
+ | ”XX" はペアリング・キーです。どのキーがどの MAC アドレスにマッピングされているか、メモしておいてください。 |
||
− | サンプルは全て [[bluez4]] の記事に移動しました。bluez5 で使用するには修正が必要です。 |
||
+ | |||
+ | Bluetooth 5.1 デバイスで''ある''場合、1つのデバイスに対応するキーが複数表示されます。 |
||
+ | |||
+ | {{bc| |
||
+ | Node has 0 subkeys and 8 values |
||
+ | size type value name [value if type DWORD] |
||
+ | 16 3 REG_BINARY <LTK> |
||
+ | 4 4 REG_DWORD <KeyLength> 16 [0x10] |
||
+ | 8 b REG_QWORD <ERand> |
||
+ | 4 4 REG_DWORD <EDIV> 37520 [0x9290] |
||
+ | 16 3 REG_BINARY <IRK> |
||
+ | 8 b REG_QWORD <Address> |
||
+ | 4 4 REG_DWORD <AddressType> 1 [0x1] |
||
+ | 4 4 REG_DWORD <AuthReq> 45 [0x2d] |
||
+ | }} |
||
+ | |||
+ | これらのキーを使う方法は [[#Bluetooth 5.1 キーの準備]] を見てください。必要な値を得るには {{ic|hex ''value_name''}} を使います。 |
||
+ | |||
+ | 最後に、キーを Linux 環境にインポートするために [[#終わりに]] へ進んでください。 |
||
+ | |||
+ | ==== macOS の場合 ==== |
||
+ | |||
+ | macOS を起動し: |
||
+ | |||
+ | * macOS Monterey 及びそれ以降の場合: |
||
+ | *# Keychain Access を開き、Bluetooth と検索してください。 |
||
+ | *# 日付順でソートしてください。 |
||
+ | *# 対象のデバイスを最近取り除いて再接続した場合、キーを変更日時順でソートして、最新のものを選べばよいです。キーはおそらく MobileBluetooth (古い Bluetooth デバイスの場合) という名前か、UUID (Bluetooth 5.1 以降) だけです。 |
||
+ | *# 対象のエントリをダブルクリックしてください。Account フィールドの MAC アドレスが対象デバイスの MAC アドレスと一致することを確認してください。 |
||
+ | *# "Show password" チェックボックスをクリックしてください。ここで、パスワードを2回入力する必要があります。 |
||
+ | *# パスワードフィールド内のテキストをコピーしてください ({{ic|⌘+a}} {{ic|⌘+c}})。これは実際には XML ファイルです。 |
||
+ | #* テキストをホームディレクトリ内の {{ic|bt_keys.txt}} ファイルにペーストしてください。 |
||
+ | * High Sierra 及びそれ以降の場合、次のコマンドをターミナルで実行してください: {{bc|# defaults read /private/var/root/Library/Preferences/com.apple.bluetoothd.plist LinkKeys > ~/bt_keys.txt}} |
||
+ | * Sierra 及びそれ以前の場合、次のコマンドをターミナルで実行してください: {{bc|# defaults read /private/var/root/Library/Preferences/blued.plist LinkKeys > ~/bt_keys.txt}} |
||
+ | |||
+ | すると、{{ic|~/.bt_keys.txt}} ファイルには、確立された Bluetooth キーが含まれています。古いバージョンの macOS (High Sierra 及びそれ以前) では、先に進む前にキーの並びを逆にする必要があります。例えば、{{ic|98 54 2f aa bb cc dd ee ff gg hh ii jj kk ll mm}} は {{ic|MM LL KK JJ GG FF EE DD CC BB AA 2F 54 98}} になります。 |
||
+ | |||
+ | {{Note|キーの並びを逆にするには、以下の [[Python]] コードを使用できます: |
||
+ | {{bc|1= |
||
+ | >>> 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 にインポートする前に特定の変換をかける必要があります。[[#終わりに]] の章で使うために、要求されたファイルを適切に作成してください。この手順は対象デバイスによって異なり、キーの一部を操作する必要があります。これを行うためのユーティリティは以下で挙げられています。 |
||
+ | |||
+ | {| class="wikitable" |
||
+ | ! デバイス !! 元のキー及び変換 (Windows) !! 元のキー及び変換 (macOS) || キーの保存先ファイル |
||
+ | |- |
||
+ | |rowspan="3"| |
||
+ | * Logitech MX Master 3 |
||
+ | * Xbox One S Wireless Controller |
||
+ | | |
||
+ | * {{ic|IRK}} をコピー。 |
||
+ | * 16進数の桁間のスペースを除去。 |
||
+ | | {{Grey|?}} |
||
+ | | {{ic|IdentityResolvingKey.Key}} |
||
+ | |- |
||
+ | | |
||
+ | * {{ic|LTK}} をコピー。 |
||
+ | * 16進数の桁間のスペースを除去。 |
||
+ | | {{Grey|?}} |
||
+ | | {{ic|SlaveLongTermKey.Key}} と {{ic|PeripheralLongTermKey.Key}} |
||
+ | |- |
||
+ | |{{ic|ERand}} と {{ic|EDIV}} は {{ic|0}} にする必要あり。 |
||
+ | |''Random Number'' と ''Encrypted Diversifier'' は {{ic|0}} にする必要あり。 |
||
+ | | {{-}} |
||
+ | |- |
||
+ | |rowspan="4"| |
||
+ | * ThinkPad TrackPoint Keyboard II |
||
+ | * Pebble M350 マウス |
||
+ | * Logitech G604 Lightspeed マウス |
||
+ | | |
||
+ | * {{ic|IRK}} をコピー |
||
+ | * バイトの順番を逆に。 |
||
+ | | |
||
+ | * ''Remote IRK'' をコピー。 |
||
+ | * Base64 から16進数に変換。 |
||
+ | | {{ic|IdentityResolvingKey.Key}} |
||
+ | |- |
||
+ | | |
||
+ | * {{ic|LTK}} をコピー。 |
||
+ | * 16進数の桁間のスペースを除去。 |
||
+ | | |
||
+ | * ''Remote Encryption'' を ''Long-term Key'' にコピー。 |
||
+ | * Base64 から16進数に変換。 |
||
+ | | {{ic|LongTermKey.Key}} |
||
+ | |- |
||
+ | | |
||
+ | * {{ic|ERand}} をコピー。 |
||
+ | * バイトの順番を逆に。 |
||
+ | * 数値全体を10進数に変換。 |
||
+ | | |
||
+ | * ''Remote Encryption'' を ''Random Number'' にコピー |
||
+ | * Base64 をリトルエンディアンの10進数に変換 (以下の Python コードを参照)。 |
||
+ | | {{ic|LongTermKey.Rand}} |
||
+ | |- |
||
+ | | |
||
+ | * {{ic|EDIV}} をコピー。 |
||
+ | * バイトの順番を逆に。 |
||
+ | * 数値全体を10進数に変換。 |
||
+ | | |
||
+ | * ''Remote Encryption'' を ''Encrypted Diversifier'' にコピー。 |
||
+ | * Base64 からリトルエンディアンの10進数に変換 (以下の Python コードを参照)。 |
||
+ | | {{ic|LongTermKey.EDiv}} |
||
+ | |- |
||
+ | |rowspan="3"|他のデバイス |
||
+ | | |
||
+ | * {{ic|LTK}} をコピー。 |
||
+ | * 16進数の桁間のスペースを除去。 |
||
+ | | |
||
+ | * ''Remote IRK'' をコピー。 |
||
+ | * Base64 から16進数に変換。 |
||
+ | | {{ic|LongTermKey.Key}} |
||
+ | |- |
||
+ | | |
||
+ | * {{ic|ERand}} をコピー。 |
||
+ | * バイトの順番を逆に。 |
||
+ | * 数値全体を10進数に変換。 |
||
+ | | |
||
+ | * ''Remote Encryption'' を ''Long-term Key'' にコピー。 |
||
+ | * Base64 から16進数に変換。 |
||
+ | | {{ic|LongTermKey.Rand}} |
||
+ | |- |
||
+ | | |
||
+ | * {{ic|EDIV}} をコピー。 |
||
+ | * 16進数の桁間のスペースを除去。 |
||
+ | | |
||
+ | * ''Remote Encryption'' を ''Encrypted Diversifier'' にコピー。 |
||
+ | * Base64 から16進数に変換。 |
||
+ | * バイトの順番を逆に。 |
||
+ | | {{ic|LongTermKey.EDiv}} |
||
+ | |- |
||
+ | |rowspan="1"|Xbox ワイヤレスコントローラ |
||
+ | | |
||
+ | * {{ic|LTK}} をコピー。 |
||
+ | * 16進数の桁間のスペースを除去。 |
||
+ | | {{Grey|?}} |
||
+ | | {{ic|SlaveLongTermKey.Key}} |
||
+ | |} |
||
+ | |||
+ | {{Note| |
||
+ | * 値からスペースを取り除くには、[https://www.browserling.com/tools/remove-all-whitespace このオンラインツール]や以下の [[Python]] コードを使用できます: |
||
+ | >>> "''key_value''".replace(" ", "") |
||
+ | * 以下の Python コードはバイトの順番を逆にするだけです: |
||
+ | {{bc|1= |
||
+ | >>> ERand=" 63 02 84 B8 5D 40 44 DF " |
||
+ | >>> ERand=list(reversed(ERand.strip().split())) |
||
+ | }} |
||
+ | * 以下の Python コードは、一部で必要となる追加の10進数変換を行います: |
||
+ | {{bc|1= |
||
+ | >>> 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'...')) |
||
+ | }} |
||
+ | |||
+ | 一般的なケースの例としては: |
||
+ | * {{ic|LTK}} の値 {{ic|48 4D AF CD 0F 92 22 88 0A 52 9A F4 76 DA 8B 94}} は、{{ic|LongTermKey.Key}} の値 {{ic|484DAFCD0F9222880A529AF476DA8B94}} となります。 |
||
+ | * {{ic|ERand}} の値 {{ic|63 02 84 B8 5D 40 44 DF}} は、{{ic|Rand}} の値 {{ic|16088054540146049635}} となります。 |
||
+ | * {{ic|EDIV}} の値 {{ic|37520}} は、{{ic|EDiv}} の値 {{ic|37520}} となります。 |
||
+ | |||
+ | ==== 終わりに ==== |
||
+ | |||
+ | キーを手に入れたら、ユーザーを root に変更し、以下を実行してください: |
||
+ | |||
+ | {{bc|# cd /var/lib/bluetooth/''BT-Adapter-MAC-address''}} |
||
+ | |||
+ | ここには、ペアリングした Bluetooth 機器ごとのフォルダがあります。Arch とデュアルブートでペアリングしたい各デバイスについて、以下を実行します: |
||
+ | |||
+ | {{bc|# cd ''device-MAC-address''}} |
||
+ | |||
+ | {{Note|この時点で、ペアリング時に MAC アドレスの値を増加させるデバイスを使用している場合、MAC アドレスのディレクトリを、値を増加させたパスへ移動させる必要があります。Windows から MAC アドレスをコピーするか、あるいは、各オクテットが2桁の[[Wikipedia:Hexadecimal|16進数]]であることに注意しながら自分で値を増加させてください。}} |
||
+ | |||
+ | ペアリングキーを持っている場合 (つまり、これは Bluetooth 5.1 デバイスでない)、{{ic|info}} ファイルを編集し、{{ic|[LinkKey]}} 以下のキーを変更します。例えば: |
||
+ | |||
+ | {{hc|1=info|2= |
||
+ | [LinkKey] |
||
+ | Key=XXXXXXXXXXXXXXX |
||
+ | }} |
||
+ | |||
+ | {{Note|すべての文字が大文字であることを確認する必要があります。スペースはすべて削除してください。}} |
||
+ | |||
+ | 複数のキーが存在する場合 (Bluetooth 5.1 の場合)、以下の {{ic|info}} ファイルを編集して、全てのキーをそれぞれの値で置き換えてください。例えば、Xbox One S Wireless Controller の場合: |
||
+ | |||
+ | {{hc|1=info|2= |
||
+ | [IdentityResolvingKey] |
||
+ | Key=<IdentityResolvingKey.Key> |
||
+ | |||
+ | [PeripheralLongTermKey] |
||
+ | Key=<PeripheralLongTermKey.Key> |
||
+ | |||
+ | [SlaveLongTermKey] |
||
+ | Key=<SlaveLongTermKey.Key> |
||
+ | }} |
||
+ | |||
+ | 次に、{{ic|bluetooth.service}} と {{ic|pulseaudio}} を[[再起動]]してください。({{ic|pulseaudio -k && pulseaudio --start}} を使ってください。) |
||
+ | |||
+ | これで、デバイスに接続できるはずです。 |
||
+ | |||
+ | {{Note|Bluetooth マネージャによっては、デバイスに再接続するために完全な再起動が必要な場合があります。}} |
||
+ | |||
+ | == 設定 == |
||
+ | |||
+ | === アダプタのデフォルト電源状態 === |
||
+ | |||
+ | {{Pkg|bluez}} 5.65 以降、BlueZ はデフォルトで、サービスの起動時やサスペンドからの復帰時にすべての Bluetooth アダプタをオンにします。[https://github.com/bluez/bluez/commit/180cf09933b2d8eb03972c8638063429fe5fece5] |
||
+ | |||
+ | アダプタを自動で有効化させたくない場合(例えば、ポータブルデバイスなどでバッテリを節約したい場合)、{{ic|/etc/bluetooth/main.conf}} の {{ic|[Policy]}} セクションで {{ic|1=AutoEnable=false}} を設定してください: |
||
+ | |||
+ | {{hc|1=/etc/bluetooth/main.conf|2= |
||
+ | [Policy] |
||
+ | AutoEnable=false |
||
+ | }} |
||
+ | |||
+ | この設定を行っても、[[#ペアリング]] で説明されているように {{ic|power on}} を実行すれば、アダプタを手動でオンにできます。 |
||
+ | |||
+ | === 起動時に発見可能にする === |
||
+ | |||
+ | デバイスが常に見えていて、かつ直接接続できる必要がある場合: |
||
+ | |||
+ | {{hc|1=/etc/bluetooth/main.conf|2= |
||
+ | [General] |
||
+ | DiscoverableTimeout = 0 |
||
+ | }} |
||
+ | |||
+ | === サスペンドからの復帰 === |
||
+ | |||
+ | Bluetooth キーボードやマウスなどをサスペンドから起動できるようにする。まず、bios の設定を確認し、サスペンドからの復帰 が無効になっていないことを確認します。多くの場合、マザーボードからの Bluetooth は USB デバイスです。 |
||
+ | |||
+ | bluetooth アダプターのベンダーコードとデバイス ID を確認してください: |
||
+ | |||
+ | {{hc|$ lsusb {{!}} grep bluetooth -i| |
||
+ | Bus 001 Device 002: ID 8087:0039 Intel Corp. AX200 Bluetooth |
||
+ | }} |
||
+ | |||
+ | サスペンドからの復帰を有効にするために、ベンダコードとデバイス ID の新しい udev ルールを追加してください: |
||
+ | |||
+ | {{hc|/etc/udev/rules.d/91-keyboard-mouse-wakeup.rules|2= |
||
+ | SUBSYSTEM=="usb", ATTRS{idVendor}=="8087", ATTRS{idProduct}=="0039" RUN+="/bin/sh -c 'echo enabled > /sys$env{DEVPATH}/../power/wakeup;'" |
||
+ | }} |
||
+ | |||
+ | 復帰後に Bluetooth キーボードを自動的に再設定して、例えば異なるキーマップやキーのリピート速度をもたせたりする(詳細は [[Xorg でのキーボード設定#typematic delay と rate の調整]] と [[xmodmap]])には、[[実行可能属性|実行可能]]なスクリプトを作成してください。 |
||
+ | |||
+ | {{hc|configure_keyboard.sh|2= |
||
+ | #!/bin/sh |
||
+ | export DISPLAY=:0 |
||
+ | xset r rate 220 30 |
||
+ | xmodmap /''your''/''path''/''to''/.Xmodmap |
||
+ | }} |
||
+ | |||
+ | そして、上記のような追加の udev ルールを作成してください。 |
||
+ | |||
+ | {{hc|/etc/udev/rules.d/92-keyboard-reconfiguration-wakeup.rules|2= |
||
+ | SUBSYSTEM=="usb", ATTRS{idVendor}=="8087", ATTRS{idProduct}=="0039" RUN+="/''your''/''path''/''to''/configure_keyboard.sh" |
||
+ | }} |
||
+ | |||
+ | === 実験的な機能を有効化する === |
||
+ | |||
+ | Bluez スタックは、バグがあるかもしれない新しい機能を D-Bus 実験的オプションおよびカーネル実験的オプションに留めます。実験的な機能は最終的に、安定していると判断され、もはやオプションを必要としなくなるので、どのような実験的な機能が存在するかはバージョンによって異なります (例えば、現在 D-Bus の実験的なインターフェイスを有効化すると、古いヘッドセットのバッテリーレベルを報告できるようになります)。実験的な機能を有効化するには、設定の対応する行をアンコメントしてください: |
||
+ | |||
+ | {{hc|/etc/bluetooth/main.conf|2= |
||
+ | ... |
||
+ | |||
+ | # 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''' |
||
+ | }} |
||
+ | |||
+ | あるいは、{{ic|bluetooth.service}} を[[編集]]して、{{ic|--experimental}} フラグあるいは {{ic|--kernel}} フラグを追加してください。例えば、以下の[[ドロップインファイル]]のように: |
||
+ | |||
+ | {{hc|/etc/systemd/system/bluetooth.service.d/override.conf|2= |
||
+ | [Service] |
||
+ | ExecStart= |
||
+ | ExecStart=/usr/lib/bluetooth/bluetoothd --experimental |
||
+ | }} |
||
+ | |||
+ | いずれの場合でも、{{ic|bluetooth.service}} を[[再起動]]する必要があります。 |
||
+ | |||
+ | == オーディオ == |
||
+ | |||
+ | 通常は、オーディオサーバーと Bluetooth を統合するために追加の手順を実行する必要があります。これについては、以下のセクションで説明します。 |
||
+ | |||
+ | Bluetooth オーディオや Bluetooth ヘッドセットなどの情報については [[Bluetooth ヘッドセット]] のページを見てください。 |
||
+ | |||
+ | === PulseAudio === |
||
+ | |||
+ | Bluetooth ヘッドフォンやスピーカーのようなオーディオ機器を使うには {{Pkg|pulseaudio-bluetooth}} パッケージのインストールが必要です。インストールを反映させるために、pulseaudio を再起動してください: {{ic|pulseaudio -k}}。デフォルトの Pulseaudio インストールでは (具体的には、パッケージングされているデフォルトの {{ic|default.pa}} でユーザインスタンスを使用している場合)、即座に Bluetooth デバイスからスピーカーにオーディオをストリーミングできるはずです。[https://gitlab.freedesktop.org/pulseaudio/pulseaudio/-/blob/stable-16.x/src/daemon/default.pa.in#L84-93] |
||
+ | |||
+ | システム全体の PulseAudio 設定がある場合は、デーモンを実行しているユーザー(通常は {{ic|pulse}}) が {{ic|lp}} グループに属しており、PulseAudio 設定に Bluetooth モジュールをロードしていることを確認します: |
||
+ | |||
+ | {{hc|/etc/pulse/system.pa|2= |
||
+ | ... |
||
+ | load-module module-bluetooth-policy |
||
+ | load-module module-bluetooth-discover |
||
+ | ... |
||
+ | }} |
||
+ | |||
+ | これは任意ですが、Bluetooth デバイスの接続時にすべてのオーディオをそのデバイスに自動で切り替えたい場合、{{ic|load-module module-switch-on-connect}} を追加してください。 |
||
+ | |||
+ | === PipeWire === |
||
+ | |||
+ | v0.3.19 以降の PipeWire はデフォルトで Bluetooth をサポートしています。 |
||
+ | |||
+ | === ALSA === |
||
+ | |||
+ | {{Note|Bluez5 は [[ALSA]] の直接統合を中止し、 [[PulseAudio]] のみをサポートします。 PulseAudio を使用できない場合、または使用しない場合は、次の手順に従ってください。}} |
||
+ | |||
+ | まず、 Bluetooth オーディオデバイスが正しくペアリングされ、システムに接続されていることを確認します。 |
||
+ | |||
+ | 次に、 {{AUR|bluez-alsa-git}} をインストールし、 {{ic|bluealsa}} サービスを開始(そして、有効に) し、ユーザーを {{ic|audio}} グループに追加します。 |
||
+ | |||
+ | 次のコマンドを実行して、すべてが意図したとおりに動作しているかどうかを確認します({{ic|''XX:XX:XX:XX:XX:XX''}} と {{ic|''FILE.wav''}} の部分は置き換えてください): |
||
+ | |||
+ | $ aplay -D bluealsa:SRV=org.bluealsa,DEV=''XX:XX:XX:XX:XX:XX'',PROFILE=a2dp ''FILE.wav'' |
||
+ | |||
+ | 最後に、 {{ic|~/.asoundrc}} に次の行を追加します。 |
||
+ | |||
+ | {{hc|~/.asoundrc| |
||
+ | defaults.bluealsa { |
||
+ | service "org.bluealsa" |
||
+ | device "XX:XX:XX:XX:XX:XX" |
||
+ | profile "a2dp" |
||
+ | } |
||
+ | }} |
||
+ | |||
+ | これで、 {{ic|bluealsa}} デバイスを使って Bluetooth オーディオデバイスに接続できるようになります。ボリューム管理は {{ic|alsamixer}} とオプション {{ic|-D bluealsa}} を使って通常行われます。 |
||
+ | |||
+ | == Bluetooth シリアル == |
||
+ | |||
+ | Bluetooth-to-Serial modules (HC-05、HC-06) で Bluetooth シリアル通信が機能するようにするには、次の手順に従います: |
||
+ | |||
+ | [[#ペアリング|上記]]で説明したように、 {{ic|bluetoothctl}} を使って Bluetooth デバイスを'''ペアリング'''します。 |
||
+ | |||
+ | {{AUR|bluez-utils-compat}} をインストールします。新しいツールにはない機能があります。 |
||
+ | |||
+ | ペアになっているデバイスの MAC アドレスを tty 端末にバインドします: |
||
+ | |||
+ | # rfcomm bind rfcomm0 ''MAC_address_of_Bluetooth_device'' |
||
+ | |||
+ | これで、シリアル通信用に {{ic|/dev/rfcomm0}} を開くことができます: |
||
+ | |||
+ | $ picocom /dev/rfcomm0 -b 115200 |
||
== トラブルシューティング == |
== トラブルシューティング == |
||
+ | {{Out of date|Replace hciconfig with newer commands.}} |
||
− | === bluetoothctl === |
||
− | bluetoothctl でコントローラが見つからない場合、bluetooth デバイスがブロックされている可能性があります。rfkill を使ってブロックを解除してみてください: |
||
+ | === 一般的なトラブルシューティング === |
||
− | # rfkill unblock bluetooth |
||
− | === |
+ | ==== デバッグ ==== |
+ | デバッグするには、最初に {{ic|bluetooth.service}} を[[停止]]します。 |
||
− | bluetooth-properties でファイルの受信を有効にしようとしたときに以下のメッセージが表示される場合: |
||
− | Bluetooth OBEX start failed: Invalid path |
||
− | Bluetooth FTP start failed: Invalid path |
||
− | {{Pkg|xdg-user-dirs}} をインストールして次を実行してください: |
||
− | $ xdg-user-dirs-update |
||
− | 次のコマンドでパスを編集できます: |
||
− | $ vi ~/.config/user-dirs.dirs |
||
+ | そして {{ic|-d}} パラメーターを付けて開始します。 |
||
− | === Bluetooth USB ドングル === |
||
+ | # /usr/lib/bluetooth/bluetoothd -n -d |
||
− | USB ドングルを使う場合は、Bluetooth ドングルが認識されているか確認してください。USB ドングルを挿入する時に {{ic|/var/log/messages.log}} を表示する (もしくは systemd で {{ic|journalctl -f}} を実行する) ことで確認できます。以下のような表示があるはずです (hci を探して下さい): |
||
+ | |||
+ | 別のオプションとして、 {{ic|btmon}} ツールが有ります。 |
||
+ | |||
+ | ==== 非推奨の BlueZ ツール ==== |
||
+ | |||
+ | 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" |
||
+ | |- |
||
+ | ! 非推奨のツール |
||
+ | ! あり得る代替 |
||
+ | |- |
||
+ | | [https://manpages.debian.org/latest/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]{{Dead link|2023|10|29|status=404}} |
||
+ | |- |
||
+ | | [https://manpages.debian.org/latest/bluez/hciattach.1.en.html hciattach] || btattach |
||
+ | |- |
||
+ | | [https://manpages.debian.org/latest/bluez/hciconfig.1.en.html hciconfig] || btmgmt (そして bluetoothctl?) |
||
+ | |- |
||
+ | | [https://manpages.debian.org/latest/bluez-hcidump/hcidump.1.en.html hcidump] || btmon (そして btsnoop) |
||
+ | |- |
||
+ | | [https://manpages.debian.org/latest/bluez/hcitool.1.en.html hcitool] || なし、[https://git.kernel.org/cgit/bluetooth/bluez.git/tree/doc/device-api.txt D-Bus Device API]{{Dead link|2023|10|29|status=404}} が利用可能 |
||
+ | |- |
||
+ | | [https://manpages.debian.org/latest/bluez/rfcomm.1.en.html rfcomm] |
||
+ | | rowspan="2" | なし、[https://git.kernel.org/cgit/bluetooth/bluez.git/tree/doc/profile-api.txt D-Bus Profile1 API]{{Dead link|2023|10|29|status=404}} の実装? |
||
+ | |- |
||
+ | | [https://manpages.debian.org/latest/bluez/ciptool.1.en.html ciptool] |
||
+ | |- |
||
+ | |[https://manpages.debian.org/latest/bluez/sdptool.1.en.html sdptool] |
||
+ | | なし、機能が、異なる D-Bus オブジェクトに散らばっている模様: [https://git.kernel.org/cgit/bluetooth/bluez.git/tree/doc/profile-api.txt Profile]{{Dead link|2023|10|29|status=404}}、[https://git.kernel.org/cgit/bluetooth/bluez.git/tree/doc/advertising-api.txt Advertising]{{Dead link|2023|10|29|status=404}}、そして [https://git.kernel.org/cgit/bluetooth/bluez.git/tree/doc/device-api.txt device]{{Dead link|2023|10|29|status=404}} と [https://git.kernel.org/cgit/bluetooth/bluez.git/tree/doc/adapter-api.txt adapter]{{Dead link|2023|10|29|status=404}} の UUID の配列。 |
||
+ | |} |
||
+ | |||
+ | === サービスの問題 === |
||
+ | |||
+ | ==== systemd: Condition check resulted in Bluetooth service being skipped ==== |
||
+ | |||
+ | {{ic|bluetooth.service}} は {{ic|/sys/class/bluetooth}} ディレクトリが存在することのみを要求します。このディレクトリは {{ic|bluetooth}} カーネルモジュールによって作成されるはずです。このカーネルモジュールは、{{ic|systemd-udev}} が動作している Bluetooth ハードウェアデバイスを発見した場合にのみ、{{ic|systemd-udev}} により自動的にロードされます。 |
||
+ | |||
+ | {{ic|/sys/class/bluetooth}} が存在しない場合、{{ic|lsmod}} コマンドを使って、Bluetooth カーネルモジュールがロードされているかどうかを確認してください。Bluetooth デバイスがあるにも関わらずロードされていない場合、[[カーネルモジュール#手動でモジュールを扱う|Bluetooth モジュールをロード]]し、{{ic|bluetooth.service}} を[[再起動]]することで、手動で起動できます。 |
||
+ | |||
+ | また、{{ic|bluetooth}} モジュールをロードする際に、対応するカーネル Bluetooth ドライバもロードする必要があります。{{ic|btusb}} が最も可能性がありますが、{{ic|btrtl,btintel,btbcm,bnep,btusb}} などの可能性もあります。 |
||
+ | |||
+ | {{ic|bluetooth.service}} の[[ユニットステータス]]を確認して、このサービスが起動しているかどうかを確認してください。 |
||
+ | |||
+ | [https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=853207 Debian Bug report logs - #853207] も参照してください。 |
||
+ | |||
+ | {{ic|bluetooth.service}} の起動に成功したが、まだ Bluetooth を使えないことがあります (例: {{ic|scan on}} の時に {{ic|bluetoothctl}} が {{ic|org.Bluez.Error.NotReady}} のようなメッセージを発する)。この場合、コンピュータを再起動し、次のことをダブルチェックしてください: {{ic|/sys/class/bluetooth}} ディレクトリが存在するか; {{ic|lsmod}} の出力に正しい Bluetooth モジュールが含まれているか; [[journal]] のログを確認するなど。{{ic|systemd-udev}} は、また手動の変更をせずとも Bluetooth ハードウェアを自動的に認識するはずです。 |
||
+ | |||
+ | ==== Bluetooth が suspend-to-idle 中のデバイスを即座に立ち上げてしまう ==== |
||
+ | |||
+ | [[サスペンドとハイバネート|suspend-to-idle/S2idle/S0ix/Modern Standby]] する能力のあるシステムにおいては、Bluetooth コントローラがスリープ中も有効化されたままになります。通常、これにより、Bluetooth デバイスが接続されていると、システムが[https://bugzilla.kernel.org/show_bug.cgi?id=200039 スリープに移行した直後にスリープが解除されてしまいます]。 |
||
+ | |||
+ | これを防ぐには、スリープに移行する前に Bluetooth を完全に無効化できます。{{Pkg|bluez-utils}} をインストールし、以下のファイルを作成してください: |
||
+ | |||
+ | {{hc|/etc/systemd/system/bluetooth-disable-before-sleep.service|2= |
||
+ | [Unit] |
||
+ | Description=Disable Bluetooth before going to sleep |
||
+ | Before=sleep.target |
||
+ | Before=suspend.target |
||
+ | Before=hybrid-sleep.target |
||
+ | Before=suspend-then-hibernate.target |
||
+ | StopWhenUnneeded=yes |
||
+ | |||
+ | [Service] |
||
+ | Type=oneshot |
||
+ | RemainAfterExit=yes |
||
+ | |||
+ | ExecStart=/usr/bin/bluetoothctl power off |
||
+ | ExecStop=/usr/bin/bluetoothctl power on |
||
+ | |||
+ | [Install] |
||
+ | WantedBy=sleep.target |
||
+ | WantedBy=suspend.target |
||
+ | WantedBy=hybrid-sleep.target |
||
+ | WantedBy=suspend-then-hibernate.target |
||
+ | }} |
||
+ | |||
+ | このサービスを[[有効化]]し、スリープに移行した時に Bluetooth デバイスが切断されることや、スリープからの復帰時に Bluetooth が再び接続されることを確認してください。 |
||
+ | |||
+ | この回避策を使用すると、[[#サスペンドからの復帰|Bluetooth マウス/キーボードを使ってシステムをスリープから復帰させること]]ができなくなります。 |
||
+ | |||
+ | ==== ヘッドレス/サーバのシステムでログアウト後に Bluetooth がオフになる ==== |
||
+ | |||
+ | 様々な原因が考えられます: |
||
+ | |||
+ | * [[PulseAudio]] と [[PipeWire]] は両方ともデフォルトでユーザサービスとして動作します。よって、最後のセッションが終了するとこれらのサービスは終了されます。この問題を解決するには、対象のユーザに対して [[systemd/ユーザー#systemd のユーザーインスタンスを自動起動|Lingering (残留)]] を有効化してください。 |
||
+ | * さらに、[[WirePlumber]] を [[PipeWire]] と共に実行している場合 (これはよくある環境です)、WirePlumber は "logind-monitor" を実行します。これは、Bluetooth をログイン時に有効化し、ログアウト時に無効化します。問題の解決方法は [[WirePlumber#ログアウト後も Bluetooth を実行し続ける/ヘッドレス Bluetooth]] を見てください。 |
||
+ | |||
+ | === アダプタの問題 === |
||
+ | |||
+ | ==== hcitool scan: Device not found ==== |
||
+ | |||
+ | * 一部のラップトップ (例: Dell Studio 15、Lenovo Thinkpad X1) では、Bluetooth モードを HID から HCI に切り替える必要があります。{{Pkg|bluez-hid2hci}} パッケージをインストールすれば、[[udev]] が自動的に切り替えを行うはずです。また、次のコマンドを実行して手動で HCI に切り替えることもできます: |
||
+ | |||
+ | # /usr/lib/udev/hid2hci |
||
+ | |||
+ | * デバイスが表示されず、かつマシンに Windows オペレーティングシステムがある場合、Windows から bluetooth アダプターを有効にして見てください。 |
||
+ | |||
+ | * 場合によっては次のコマンドで問題が解決するかもしれません: |
||
+ | |||
+ | # bluetoothctl power on |
||
+ | |||
+ | ==== bluetoothctl: No default controller available ==== |
||
+ | |||
+ | 一部のマザーボード Bluetooth コントローラにはバグがあります。バグがこの問題の原因であるか調べるには、{{ic|journalctl {{!}} grep hci}} を実行してください。このコマンドの出力に "command tx timeout" や "Reading Intel version command failed" のようなエントリが存在する場合、PC の電源を切り、電源ケーブルを物理的に外して数秒間放置してください。これにより、コントローラにファームウェアを再ロードさせます (通常の再起動では再ロードしません)。[https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1859592 こちら]のバグレポートを参照してください。 |
||
+ | |||
+ | デバイスが [[rfkill]] によってブロックされていないことを確認してください。 |
||
+ | |||
+ | また、一部の Intel カード (8260 など) は Bluetooth サービスによって正しく認識されないかもしれません。{{Pkg|bluez-utils}} の代わりに非推奨の {{AUR|bluez-utils-compat}} を使うことでこの問題が解決したというケースが報告されています。 |
||
+ | |||
+ | また、これは省電力機能が原因かもしれません。その場合、{{ic|1=btusb.enable_autosuspend=n}} [[カーネルパラメータ#設定|カーネルパラメータ]]により解決できる可能性があります。[https://bugzilla.redhat.com/show_bug.cgi?id=1573562 Red Hat Bugzilla – Bug 1573562] も参照してください。 |
||
+ | |||
+ | 時々、{{ic|btusb}} をオプション無しでアンロード・ロードすればコントローラを元に戻せることがあります: |
||
+ | |||
+ | # modprobe -r btusb |
||
+ | # modprobe btusb |
||
+ | |||
+ | また、ドングルが [[#CSR ドングル 0a12:0001|CSR クローン]]である場合にもこの問題が発生することがあります。 |
||
+ | |||
+ | ==== rfkill unblock: Do not unblock ==== |
||
+ | |||
+ | デバイスがソフトブロックされていて [[ConnMan]] を動作させている場合、次を試してみて下さい: |
||
+ | |||
+ | $ connmanctl enable bluetooth |
||
+ | |||
+ | ==== Bluetooth USB ドングル ==== |
||
+ | |||
+ | USB ドングルを使う場合は、Bluetooth ドングルが認識されているか確認してください。USB ドングルを挿入する時に {{ic|journalctl -f}} を root として実行する(もしくは {{ic|/var/log/messages.log}} を調査する)ことで、そのことを確認できます。以下のような見た目であるはずです(hci を見てください)。 |
||
{{bc| |
{{bc| |
||
193行目: | 699行目: | ||
}} |
}} |
||
− | 最初の2行しか表示されていなかった場合は、デバイスを立ち上げる必要があります。 |
+ | 最初の2行しか表示されていなかった場合、デバイスは見つかっていますが、そのデバイスを立ち上げる必要があります。 |
例: |
例: |
||
− | {{hc| |
+ | {{hc|# btmgmt| |
+ | [mgmt]# info |
||
− | hci0: Type: USB |
||
+ | Index list with 1 item |
||
− | BD Address: 00:00:00:00:00:00 ACL MTU: 0:0 SCO MTU: 0:0 |
||
+ | hci0: Primary controller |
||
− | DOWN |
||
+ | addr 00:1A:7D:DA:71:10 version 6 manufacturer 10 class 0x000000 |
||
− | RX bytes:0 acl:0 sco:0 events:0 errors:0 |
||
+ | supported settings: powered connectable fast-connectable discoverable bondable link-security ssp br/edr hs le advertising secure-conn debug-keys privacy static-addr |
||
− | TX bytes:0 acl:0 sco:0 commands:0 errors: |
||
+ | '''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 |
||
}} |
}} |
||
+ | または |
||
− | # hciconfig hci0 up |
||
+ | |||
+ | {{hc|# 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 |
||
− | {{hc|hciconfig -a hci0| |
||
+ | 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| |
||
238行目: | 775行目: | ||
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 |
||
247行目: | 784行目: | ||
}} |
}} |
||
+ | ===== ドングルから短距離にいるときにオーディオデバイスがおかしくなる ===== |
||
− | === Logitech Bluetooth USB ドングル === |
||
+ | |||
+ | 他のデバイスと同一の USB ホストを共有している場合、[https://bbs.archlinux.org/viewtopic.php?pid=1440161#p1440161 オーディオデバイスとの通信に干渉] する可能性があります。オーディオデバイスがバスに接続されている唯一のデバイスであることを確認してください。例: |
||
+ | |||
+ | {{hc|$ 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 ===== |
||
+ | |||
+ | デバイス {{ic|ID 0a12:0001 Cambridge Silicon Radio, Ltd Bluetooth Dongle (HCI mode)}} にはリグレッションのバグがあり、現在、カーネルバージョン 5.17 及び < 6.0 でしか動作しません。詳細は、[https://bugzilla.kernel.org/show_bug.cgi?id=60824 Kernel Bug 60824] を参照してください。 |
||
+ | |||
+ | ==== Logitech Bluetooth USB ドングル ==== |
||
Logitech のドングルには Embedded と HCI という二つのモードで動作するものがあります (例: Logitech MX5000)。embedded モードではドングルは USB デバイスをエミュレートするので PC は普通の USB マウス・キーボードを使っていると認識します。 |
Logitech のドングルには Embedded と HCI という二つのモードで動作するものがあります (例: Logitech MX5000)。embedded モードではドングルは USB デバイスをエミュレートするので PC は普通の USB マウス・キーボードを使っていると認識します。 |
||
− | USB BT ミニレシーバの小さな赤いボタンを押すと他のモードが有効になります。BT ドングルの赤いボタンを押しながらコンピュータに接続してください。ボタンを押して3-5秒で、Bluetooth アイコンがシステムトレイに表示されます [ |
+ | USB BT ミニレシーバの小さな赤いボタンを押すと他のモードが有効になります。BT ドングルの赤いボタンを押しながらコンピュータに接続してください。ボタンを押して3-5秒で、Bluetooth アイコンがシステムトレイに表示されます ([https://ubuntuforums.org/showthread.php?t=1332197 議論])。 |
また、{{Pkg|bluez-hid2hci}} パッケージをインストールすることもできます。Logitech のドングルを接続すると自動的に切り替えます。 |
また、{{Pkg|bluez-hid2hci}} パッケージをインストールすることもできます。Logitech のドングルを接続すると自動的に切り替えます。 |
||
+ | ==== Foxconn / Hon Hai / Lite-On の Broadcom デバイス ==== |
||
− | === hcitool scan: Device not found === |
||
+ | 一部のデバイスでは、起動時にファームウェアを書き込む必要があります。 |
||
− | * Dell ラップトップ (例: Studio 15) では Bluetooth モードを HID から HCI に切り替える必要があります。{{Pkg|bluez-hid2hci}} パッケージをインストールすれば、[[udev]] が自動的に切り替えを行うはずです。また、次のコマンドを実行して手動で HCI に切り替えることもできます: |
||
− | # /usr/lib/udev/hid2hci |
||
+ | 一部のファームウェアは、[[AUR]] で [https://aur.archlinux.org/packages?K=broadcom broadcom] と検索すると入手できます。特出すべきパッケージは {{AUR|broadcom-bt-firmware}} です。これは、[https://github.com/winterheart/broadcom-bt-firmware/blob/master/DEVICES.md 様々なカード]用のファイルを提供します。 |
||
− | * デバイスが表示されない場合、マシンに Windows オペレーティングシステムがあるときは Windows から bluetooth アダプターを有効にして見て下さい。 |
||
+ | または、[https://github.com/jessesung/hex2hcd hex2hcd] ({{Pkg|bluez-utils}} でインストールされます) を使ってファームウェアを Microsoft Windows の ''.hex'' ファイルから ''.hcd'' ファイルに変換することもできます。 |
||
− | * 場合によっては次のコマンドで有効にできます: |
||
− | # hciconfig hci0 up |
||
+ | 正しい ''.hex'' ファイルを取得するために、''lsusb'' でデバイスの vendor:product コードを検索してください。例: |
||
− | === rfkill unblock: Do not unblock === |
||
+ | Bus 002 Device 004: ID '''04ca:2006''' Lite-On Technology Corp. Broadcom BCM43142A0 Bluetooth Device |
||
− | デバイスがソフトブロックされていて connman を動作させている場合、次を試してみて下さい: |
||
− | $ connmanctl enable bluetooth |
||
+ | または: |
||
− | === コンピュータが表示されない === |
||
+ | Bus 004 Device 004: Id '''0489:e031''' Foxconn / Hon Hai |
||
− | 携帯からコンピュータが表示されないときは、PSCAN と ISCAN を有効にしてください: |
||
+ | |||
− | # enable PSCAN and ISCAN |
||
+ | もしくは、Windows (仮想マシンでもかまいません) を起動して Device Manager ユーティリティからファームウェアの名前を取得してください。デバイスのモデルを知りたいのに ''lsusb'' で表示されない場合、''lsusb -v'' の {{ic|iProduct}} でわかることがあります。 |
||
− | $ hciconfig hci0 piscan |
||
+ | |||
− | # check it worked |
||
+ | ''.hex'' ファイルはダウンロードした Windows ドライバーから抽出することができます。Windows を実行する必要はありません。適切なドライバーをダウンロードしてください (例えば、[http://www.fujitsupc.com/downloads/mobile/BLUETOOTH_WIDCOMM_V6.5.0.3100_WIN7-32_FPC46-1771-01.EXE Bluetooth Widcomm]{{Dead link|2023|09|16|status=domain name not resolved}})。フォーマットにも依りますが、ファイルの展開には{{Pkg|unrar}} か {{Pkg|cabextract}} が必要である場合があります。多数の ''.hex'' ファイルの中から必要なファイルを見つけるには、{{ic|Win32/bcbtums-win7x86-brcm.inf}} ファイルの中身を確認して {{ic|[RAMUSB'''E031'''.CopyList]}} を検索してください。{{ic|E031}} はあなたの使っているデバイスの product コード (大文字) に置き換えて下さい (''lsusb'' で確認できる2番目の16進数)。その下に、必要な ''.hex'' ファイルの名前が書かれているはずです。 |
||
− | {{hc|$ hciconfig| |
||
+ | |||
− | hci0: Type: USB |
||
+ | ''.hcd'' ファイルを手に入れたら、{{ic|/lib/firmware/brcm/BCM.hcd}} にコピーしてください - このファイル名は [[dmesg]] からわかります。あなたのマシンでは異なっている可能性があるため ''dmesg'' の出力で確認してください。そして ''btusb'' モジュールをリロードしてください: |
||
− | BD Address: 00:12:34:56:78:9A ACL MTU: 192:8 SCO MTU: 64:8 |
||
+ | |||
− | '''UP RUNNING PSCAN ISCAN''' |
||
+ | # rmmod btusb |
||
− | RX bytes:20425 acl:115 sco:0 events:526 errors:0 |
||
+ | # modprobe btusb |
||
− | TX bytes:5543 acl:84 sco:0 commands:340 errors:0 |
||
+ | |||
+ | これでデバイスが使えるようになるはずです。以上の設定を永続化させる方法は [https://bbs.archlinux.org/viewtopic.php?id=162688 BBS#162688] を参照。 |
||
+ | |||
+ | ==== Intel の複合 WiFi と Bluetooth カード ==== |
||
+ | |||
+ | [[ネットワーク設定/ワイヤレス#Bluetooth の共存]] を見てください。 |
||
+ | |||
+ | ==== Windows とのデュアルブート環境における Mediatek MT7921 や MT7961 ==== |
||
+ | |||
+ | デュアルブートシステムでは、Bluetooth のファームウェアバージョンが Windows と Linux とで異なる場合、Windows を起動した後に Bluetooth アダプタが動作しなくなります。 |
||
+ | |||
+ | これを防ぐ最も良い方法は、各 OS 用の Bluetooth ドライバ (特にファームウェア) を最新にすることです。 |
||
+ | |||
+ | Windows 用の最新バージョンのドライバ (またはファームウェア) を見つけられない場合、最新のファームウェアファイル {{ic|/usr/lib/firmware/mediatek/BT_RAM_CODE_MT7961_1_2_hdr.bin.xz}} を Arch Linux からコピーし、Windows へ展開することができます (例えば、{{ic|C:\WINDOWS\system32\DRIVERS\}}。Windows でのファームウェアファイルへのパスはデバイスマネージャから確認できます)。 |
||
+ | |||
+ | ==== サスペンド/復帰後にアダプタが消える ==== |
||
+ | |||
+ | まず、アダプタのベンダーと製品 ID を見つけてください。例: |
||
+ | |||
+ | First, find vendor and product ID of the adapter. For example: |
||
+ | |||
+ | {{hc|$ lsusb -tv|<nowiki> |
||
+ | /: 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. |
||
+ | ... |
||
+ | </nowiki>}} |
||
+ | |||
+ | この場合、ベンダー ID は 8087 で、製品 ID は 0025 です。 |
||
+ | |||
+ | 次に、 {{pkg|usb_modeswitch}} を使用してアダプタをリセットします: |
||
+ | |||
+ | # usb_modeswitch -R -v ''vendor_ID'' -p ''product_ID'' |
||
+ | |||
+ | === ペアリングと接続の問題 === |
||
+ | |||
+ | ==== コンピュータが表示されない ==== |
||
+ | |||
+ | 携帯からコンピュータが表示されないときは、discoverable モードを有効にしてください: |
||
+ | |||
+ | # bluetoothctl discoverable on |
||
+ | |||
+ | discoverable モードがオンになっていることを確認してください: |
||
+ | |||
+ | {{hc|# bluetoothctl show| |
||
+ | Powered: yes |
||
+ | Discoverable: yes |
||
+ | Pairable: yes |
||
}} |
}} |
||
− | {{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}} のようにクラスを直接設定してください。}} |
||
− | This was the only solution to make my computer visible for my phone. |
||
+ | あるユーザは、携帯からコンピュータを見られるようにするためにはこうするしか無いと報告しています。LG TV(そして、一部の他の機器)はオーディオデバイスから発見可能です。なので、{{ic|000414}} (soundbar クラス)を使用することでそのようなデバイスを発見できるようにできます。 |
||
− | === Logitech のキーボードがペアリングできない === |
||
+ | Bluetooth デバイス/サービスのクラスを生成するには https://bluetooth-pentest.narod.ru/software/bluetooth_class_of_device-service_generator.html を見てください。 |
||
− | Logitech キーボードとペアリングするときにパスキーがない場合は、次のコマンドを入力してください: |
||
− | # hciconfig hci0 sspmode 0 |
||
+ | ==== デバイスを接続した数秒後に切断してしまう ==== |
||
− | ペアリング後も、キーボードが接続されないときは、{{ic|hcidump -at}} の出力を確認してください。以下のメッセージのように接続・切断が繰り返し表示される場合: |
||
+ | デバイスを接続したすぐ後に切断が発生し、ジャーナルの出力に以下のようなメッセージが確認できる場合: |
||
− | status 0x00 handle 11 reason 0x13 |
||
− | Reason: Remote User Terminated Connection |
||
+ | bluetoothd: Unable to get connect data for Headset Voice gateway: getpeername: Transport endpoint is not connected (107) |
||
− | 今のところの対処方法としては[[bluez4|昔の Bluetooth スタック]]をインストールするしかありません。 |
||
+ | bluetoothd: connect error: Connection refused (111) |
||
+ | |||
+ | おそらく別のオペレーティングシステムで同一の Bluetooth アダプタを使ってデバイスがペアリングされていることが原因です (例: デュアルブート)。一部のデバイスは同一の MAC アドレス (例: Bluetooth アダプタ) に対して複数のペアリングを関連付けた場合に対処できません。この問題を解決するには [[#デュアルブートペアリング]] の指示に従ってください。 |
||
+ | |||
+ | ==== スキャンしてもデバイスが表示されない ==== |
||
+ | |||
+ | Bluetooth Low Energy を使用しているデバイスは bluetoothctl でスキャンしても表示されないことがあります (例: [[Logitech MX Master]])。{{ic|transport le}} を使ってスキャンすることができます。 |
||
+ | |||
+ | {{hc|# bluetoothctl| |
||
+ | [bluetooth]# menu scan |
||
+ | [bluetooth]# transport le |
||
+ | [bluetooth]# back |
||
+ | [bluetooth]# scan on |
||
+ | [bluetooth]# devices |
||
+ | ... |
||
+ | Device XX:XX:XX:XX:XX:XX DA V2 X <---- 低消費電力なデバイス |
||
+ | }} |
||
+ | |||
+ | もう一つの方法は、{{aur|bluez-utils-compat}} をインストールし、{{ic|bluetooth.service}} を[[開始]]し、以下を実行することです: |
||
+ | |||
+ | {{hc|# 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 を {{ic|Ctrl+c}} で閉じてください。bluetoothctl からデバイスが認識されたら通常通りにペアリングできます。 |
||
+ | |||
+ | ==== Intel Corp. AX200 Bluetooth で BLE デバイスが見つからない ==== |
||
+ | |||
+ | どうやら、このデバイスでは BLE のパッシブスキャンが壊れているようです。詳細は[https://community.intel.com/t5/Wireless/AX200-Passive-BLE-scan-linux/m-p/1227456 上流のバグレポート]を見てください。 |
||
+ | |||
+ | ==== スリープ後に再接続できない ==== |
||
+ | |||
+ | スリープ後や、コンピュータがスリープから復帰した後に、デバイスが自動的に再接続されないことがあります。 |
||
+ | |||
+ | この時、ログに以下のエラーが記録されます: |
||
+ | |||
+ | {{bc| |
||
+ | 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 デーモンを開始するには、{{ic|pipewire.service}} [[ユーザーユニット]]を[[開始]]するか、何らかの音声を再生してください。その後、オーディオデバイスをもう一度接続してみてください。 |
||
+ | |||
+ | ==== ヘッドホンとマウスの干渉 ==== |
||
+ | |||
+ | Bluetooth マウスとキーボードを同時に使用しているときに音声が途切れる場合は #23 https://bugs.launchpad.net/ubuntu/+source/bluez/+bug/424215 で参照されているように、次を試してくみてださい: |
||
+ | |||
+ | # hciconfig hci0 lm ACCEPT,MASTER |
||
+ | # hciconfig hci0 lp HOLD,SNIFF,PARK |
||
+ | |||
+ | ==== TP-LINK UB400 と Xbox のコントローラが接続/切断を繰り返す ==== |
||
+ | |||
+ | 以下の設定を使用してください: |
||
+ | |||
+ | {{hc|/etc/bluetooth/main.conf|2= |
||
+ | ... |
||
+ | [General] |
||
+ | JustWorksRepairing = always |
||
+ | FastConnectable = true |
||
+ | Class = 0x000100 |
||
+ | ... |
||
+ | [GATT] |
||
+ | ReconnectIntervals=1,1,2,3,5,8,13,21,34,55 |
||
+ | AutoEnable=true |
||
+ | ... |
||
+ | }} |
||
+ | |||
+ | そして、{{ic|bluetooth.service}} を[[再起動]]してください。 |
||
+ | |||
+ | 関連する [https://github.com/atar-axis/xpadneo/issues/166 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 はデフォルトで[https://git.kernel.org/pub/scm/bluetooth/bluez.git/tree/obexd/plugins/filesystem.c#n90 それを拒否します]。この挙動は、[[ドロップインファイル]]を {{ic|obex.service}} [[systemd/ユーザー|ユーザサービス]]に対して使うことにより初期化時に上書きできます: |
||
+ | |||
+ | {{hc|~/.config/systemd/user/obex.service.d/10-symlink.conf|2= |
||
+ | [Service] |
||
+ | ExecStart= |
||
+ | ExecStart=/usr/lib/bluetooth/obexd --symlinks |
||
+ | }} |
||
+ | その後、ユーザの ''systemd'' マネージャの設定を[[リロード]]し、{{ic|obex.service}} ユーザユニットを[[再起動]]してください。 |
||
− | === HSP/HFP プロファイル === |
||
+ | == 参照 == |
||
− | bluez5 では HSP/HFP プロファイル ([[TeamSpeak]], [[Skype]] などのための通信ヘッドセット) のサポートが削除されています。[[PulseAudio]] (バージョン6以上) などの HSP/HFP を自力で実装しているアプリケーションをインストールする必要があります。 |
||
+ | * [https://averylarsen.com/2019/12/20/keeping-bluetooth-devices-paired-between-linux-and-windows/ Keeping Bluetooth devices paired between Linux and Windows] |
||
− | === Thinkpad Bluetooth レーザーマウス === |
||
+ | * [https://nullroute.eu.org/~grawity/bluetooth-key-sharing.html Bluetooth link keys on dual-boot systems] |
||
+ | {{TranslationStatus|Bluetooth|2023-11-03|791392}} |
||
− | Thinkpad Bluetooth レーザーマウスが数秒の間に (マウスを動かしたりボタンを押したときに) 何度も接続と切断を繰り返す場合、コード {{ic|0000}} を使ってペアリングしてみてください。 |
2023年11月3日 (金) 12:41時点における最新版
Bluetooth は携帯電話やコンピュータなどの電子デバイス用の近距離無線通信規格です。Linux においては、Bluetooth プロトコルスタックの実装として BlueZ が標準的に使われています。
目次
- 1 インストール
- 2 ペアリング
- 3 設定
- 4 オーディオ
- 5 Bluetooth シリアル
- 6 トラブルシューティング
- 6.1 一般的なトラブルシューティング
- 6.2 サービスの問題
- 6.3 アダプタの問題
- 6.3.1 hcitool scan: Device not found
- 6.3.2 bluetoothctl: No default controller available
- 6.3.3 rfkill unblock: Do not unblock
- 6.3.4 Bluetooth USB ドングル
- 6.3.5 Logitech Bluetooth USB ドングル
- 6.3.6 Foxconn / Hon Hai / Lite-On の Broadcom デバイス
- 6.3.7 Intel の複合 WiFi と Bluetooth カード
- 6.3.8 Windows とのデュアルブート環境における Mediatek MT7921 や MT7961
- 6.3.9 サスペンド/復帰後にアダプタが消える
- 6.4 ペアリングと接続の問題
- 6.5 デバイス固有の問題
- 6.6 ファイル転送の問題
- 7 参照
インストール
- Bluetooth プロトコロスタックを提供する、bluez パッケージをインストールします。
bluetoothctl
ユーティリティを提供する、bluez-utils をインストールします。または bluez-utils-compatAUR をインストールして、非推奨の BlueZ tools を追加します。- 一般的な Bluetooth ドライバは、
btusb
カーネルモジュールです。このモジュールがロードされているかどうかを確認してください。もしロードされていなければ、モジュールをロードしてください。 bluetooth.service
を起動/有効化します。
フロントエンド
コンソール
- bluetoothctl — シェルからデバイスをペアリングすることは、最も単純で信頼性の高いオプションの一つです。
- bluetuith — ターミナルユーザインターフェイスによる Bluetooth マネージャを提供します。OBEX ファイル転送とマウスのサポート付きで、デバイス/アダプタを簡単に管理できます。
グラフィカル
以下のパッケージでは、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
です)
- Bluedevil — KDE の Bluetooth ツール。 Dolphin やシステムトレイに Bluetooth のアイコンが表示されていない場合は、システムトレイオプションで有効にするか、ウィジェットを追加してください。アイコンをクリックすることで、Bluedevil の設定や Bluetooth デバイスの検出が可能です。KDE システム設定からもインターフェースが利用できます。
- Blueberry — GNOME Bluetooth から Linux Mint でスピンオフした Blueberry は全てのデスクトップ環境で動作します。Obex Object Push によるファイル受信をサポートしていません。
- Blueman — フル機能の Bluetooth マネージャー
- ObexFTP — OBEX 対応のデバイスとの間でファイルを転送するツール。
ペアリング
このセクションでは、bluetoothctl CLI を使って bluez5 を直接設定する方法を説明しています。これは、代替のフロントエンドツール(例えば GNOME Bluetooth)を使用している場合は必要ないかもしれません。
正確な手順は、利用するデバイスとその入力機能によります。以下は bluetoothctl
を使ってデバイスをペアリングする一般的な説明です。
bluetoothctl
対話コマンドを実行してください。help
と入力することで利用できるコマンドのリストを表示できます。
- (任意)
select MAC Address
と入力してデフォルトのコントローラを選択してください。 - (任意) デバイスがオフになっている場合、
power on
と入力してコントローラへの電源供給をオンにしてください。デバイスはデフォルトでオンになっています (#アダプタのデフォルト電源状態)。 devices
と入力して、ペアリングしたいデバイスの MAC アドレスを取得してください。- デバイスが表示されないときは
scan on
コマンドでデバイス検出モードにしてください。 agent on
でエージェントをオンにするか、特定のエージェントを選択してください:agent
の後にタブキーを2回押すと、利用可能なエージェントのリストが表示されるはずです。Bluetooth エージェントとは、Bluetooth の 'ペアリングコード' を管理するもののことです。エージェントは、'ペアリングコード'の受信に応答したり、'ペアリングコード'を送信したりできます。ほとんどの場合、default-agent
を使うのが適切なはずです。[1]pair MAC Address
と入力することでペアリングを実行します (タブ補完が使えます)。- PIN がないデバイスを使う場合は、手動でデバイスを信頼する必要があるかもしれません。
trust MAC Address
と入力してこれを行なって下さい。デバイスを信頼するにはtrust MAC_address
と入力してください。 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 デバイスの電源を切り、接続を試みないようにします。
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 での展開
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
ペアリングしているデバイスにも同じことをします。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 及びそれ以降の場合:
- Keychain Access を開き、Bluetooth と検索してください。
- 日付順でソートしてください。
- 対象のデバイスを最近取り除いて再接続した場合、キーを変更日時順でソートして、最新のものを選べばよいです。キーはおそらく MobileBluetooth (古い Bluetooth デバイスの場合) という名前か、UUID (Bluetooth 5.1 以降) だけです。
- 対象のエントリをダブルクリックしてください。Account フィールドの MAC アドレスが対象デバイスの MAC アドレスと一致することを確認してください。
- "Show password" チェックボックスをクリックしてください。ここで、パスワードを2回入力する必要があります。
- パスワードフィールド内のテキストをコピーしてください (
⌘+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
になります。
Bluetooth 5.1 デバイスの場合、1つのデバイスに対して複数のキーが関連付けられています。それらのキーを使用する方法については #Bluetooth 5.1 キーの準備 を見てください。
最後に、キーを Linux 環境にインポートするために、Linux を起動し、#終わりに へ進んでください。
Bluetooth 5.1 キーの準備
#Windows の場合 や #macOS の場合 の章に従っていて Bluetooth 5.1 キーが存在していた場合、それらのキーを Linux にインポートする前に特定の変換をかける必要があります。#終わりに の章で使うために、要求されたファイルを適切に作成してください。この手順は対象デバイスによって異なり、キーの一部を操作する必要があります。これを行うためのユーティリティは以下で挙げられています。
デバイス | 元のキー及び変換 (Windows) | 元のキー及び変換 (macOS) | キーの保存先ファイル |
---|---|---|---|
|
|
? | IdentityResolvingKey.Key
|
|
? | SlaveLongTermKey.Key と PeripheralLongTermKey.Key
| |
ERand と EDIV は 0 にする必要あり。
|
Random Number と Encrypted Diversifier は 0 にする必要あり。
|
– | |
|
|
|
IdentityResolvingKey.Key
|
|
|
LongTermKey.Key
| |
|
|
LongTermKey.Rand
| |
|
|
LongTermKey.EDiv
| |
他のデバイス |
|
|
LongTermKey.Key
|
|
|
LongTermKey.Rand
| |
|
|
LongTermKey.EDiv
| |
Xbox ワイヤレスコントローラ |
|
? | SlaveLongTermKey.Key
|
一般的なケースの例としては:
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
ペアリングキーを持っている場合 (つまり、これは 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
を使ってください。)
これで、デバイスに接続できるはずです。
設定
アダプタのデフォルト電源状態
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
まず、 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-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 ツール
8つの BlueZ ツールは非推奨となり、bluez-utils から削除されましたが、それらのすべてが新しいツールに取って代わられたわけではありません。bluez-utils-compatAUR パッケージは非推奨のツールを含む代替バージョンの bluez-utils を提供します。
非推奨のツール | あり得る代替 |
---|---|
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-utils-compatAUR を使うことでこの問題が解決したというケースが報告されています。
また、これは省電力機能が原因かもしれません。その場合、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
内のデバイスクラスを変更してみて下さい:
# 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 を見てください。
デバイスを接続した数秒後に切断してしまう
デバイスを接続したすぐ後に切断が発生し、ジャーナルの出力に以下のようなメッセージが確認できる場合:
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 マウス#トラブルシューティング を参照してください。
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
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 のドライバは必要ありません。
ファイル転送の問題
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
ユーザユニットを再起動してください。