「インストール - Bluetoothドライバ」の版間の差分

📢 Webサイト閉鎖と移転のお知らせ
このWebサイトは2026年9月に閉鎖いたします。
新しい記事は移転先で追加しております。(旧サイトでは記事を追加しておりません)

 
(同じ利用者による、間の15版が非表示)
1行目: 1行目:
== 概要 ==
== 概要 ==
LinuxでBluetoothデバイスを制御する場合、専用ドライバをインストールする必要がある可能性が高い。<br>
LinuxでBluetoothデバイスを制御する場合、Realtek社等のBluetoothドライバを手動でのインストールが必要な可能性がある。<br>
<br>
<br>
ここでは、Bluetoothデバイスの各チップにおいて、専用ドライバのインストール手順を記載する。<br>
ここでは、Bluetoothデバイスの各チップにおいて、各チップベンダの専用ドライバのインストール手順を記載する。<br>
<br><br>
<br><br>


8行目: 8行目:
==== パッケージ管理システムからインストール ====
==== パッケージ管理システムからインストール ====
BlueZをインストールする。<br>
BlueZをインストールする。<br>
  sudo zypper install bluez
  sudo zypper install bluez bluez-util
<br>
<br>
BlueZサービスを開始する。<br>
BlueZサービスを開始する。<br>
106行目: 106行目:
  # モジュール群のデプロイ
  # モジュール群のデプロイ
  sudo depmod -a $(uname -r)
  sudo depmod -a $(uname -r)
<br>
Bluetoothドングルと機器が正常に接続されている場合、ジャーナルを確認すると、以下に示すようなメッセージが出力される。<br>
sudo journalctl --unit=bluetooth -f
# 出力例
# Xの箇所には、任意の数字またはアルファベットが入ることに注意する
<タイムスタンプ> <ホスト名> bluetoothd[<プロセス番号>]: Endpoint registered: sender=:X.XX path=/MediaEndpoint/A2DPSource/sbc
<タイムスタンプ> <ホスト名> bluetoothd[<プロセス番号>]: Endpoint registered: sender=:X.XX path=/MediaEndpoint/A2DPSink/sbc_xq
<タイムスタンプ> <ホスト名> bluetoothd[<プロセス番号>]: Endpoint registered: sender=:X.XX path=/MediaEndpoint/A2DPSource/sbc_xq
<タイムスタンプ> <ホスト名> bluetoothd[<プロセス番号>]: Endpoint registered: sender=:X.XX path=/MediaEndpoint/A2DPSource/faststream
<タイムスタンプ> <ホスト名> bluetoothd[<プロセス番号>]: Endpoint registered: sender=:X.XX path=/MediaEndpoint/A2DPSource/faststream_duplex
<タイムスタンプ> <ホスト名> bluetoothd[<プロセス番号>]: Endpoint registered: sender=:X.XX path=/MediaEndpoint/A2DPSink/opus_05
<タイムスタンプ> <ホスト名> bluetoothd[<プロセス番号>]: Endpoint registered: sender=:X.XX path=/MediaEndpoint/A2DPSource/opus_05
<タイムスタンプ> <ホスト名> bluetoothd[<プロセス番号>]: Endpoint registered: sender=:X.XX path=/MediaEndpoint/A2DPSink/opus_05_duplex
<タイムスタンプ> <ホスト名> bluetoothd[<プロセス番号>]: Endpoint registered: sender=:X.XX path=/MediaEndpoint/A2DPSource/opus_05_duplex
<タイムスタンプ> <ホスト名> bluetoothd[<プロセス番号>]: /org/bluez/hciX/dev_XX_XX_XX_XX_XX_XX/sepX/fdX: fd(XX) ready
<br>
<br>


120行目: 136行目:
<br><br>
<br><br>


== Realtek BT8761BUモジュールの署名 (セキュアブートが有効の場合) ==
== Realtek RTL8761BUモジュールの署名 (セキュアブートが有効の場合) ==
セキュアブートが有効の場合、Realtek BT8761BUモジュールの署名を登録する必要がある。<br>
セキュアブートが有効の場合、Realtek RTL8761BUモジュールの署名を登録する必要がある。<br>
<u>また、ユーザが勝手にモジュールファイルをXZ形式等へ圧縮してはならない。(モジュールの署名に失敗するため)</u><br>
<br>
<br>
==== Realtek RTL8761BUモジュールの署名 (初めて署名する場合) ====
署名を登録する手順を以下に示す。<br>
署名を登録する手順を以下に示す。<br>
# キーペアを作成する。
#: <code>sudo openssl req -new -x509 -newkey rsa:2048 -keyout RTK_8761BU.priv -outform DER -out RTK_8761BU.der -nodes -days 36500 -subj "/CN=Realtek_8761BU/" \</code>
#: <code>-addext "extendedKeyUsage=codeSigning"</code>
#: <br>
# Realtek BT8761BUモジュール(rtk_btusb)を署名する。
#: <code>sudo /lib/modules/$(uname -r)/build/scripts/sign-file sha256 ./RTK_8761BU.priv ./RTK_8761BU.der $(/sbin/modinfo -n rtk_btusb)</code>
#: <code>sudo /lib/modules/$(uname -r)/build/scripts/sign-file sha256 ./RTK_8761BU.priv ./RTK_8761BU.der /lib/firmware/rtl8761bu_fw</code>
#: <code>sudo /lib/modules/$(uname -r)/build/scripts/sign-file sha256 ./RTK_8761BU.priv ./RTK_8761BU.der /lib/firmware/rtl8761bu_config</code>
#: <br>
# MOK(Module owned Key)にキーをインポートする。<br><code>--root-pw</code>オプションを付加することにより、再起動時のRealtek BT8761BUモジュールの署名において、rootパスワードが必要となる。
#: <code>sudo mokutil --import ./RTK_8761BU.der --root-pw</code>
#: <br>
# PCを再起動して、Realtek BT8761BUモジュールの署名を登録する。
#: <code>sudo systemctl reboot</code>
#: <br>
# Realtek BT8761BUモジュールが正しく読み込まれているかどうかを確認する。<br>正常に読み込まれている場合は、<u>"RTK_8761BU.der is already enrolled"</u>と表示される。
#: <code>cd <Realtek BT8761BUモジュールの署名ファイルが存在するディレクトリ></code>
#: <code>sudo mokutil --test-key ./RTK_8761BU.der</code>
<br>
<br>
この作業は1度だけ必要となることに注意する。<br>
まず、署名に必要な設定ファイルを作成する。<br>
mkdir -p ~/.MOK/RTL8761BU && cd ~/.MOK/RTL8761BU
vi RTL8761BU.config
<br>
# ~/.MOK/RTL8761BU/RTL8761BU.configファイル
[ req ]
default_bits = 4096
distinguished_name = req_distinguished_name
prompt = no
string_mask = utf8only
x509_extensions = myexts
[ req_distinguished_name ]
O = SUSE Linux Products GmbH (User Add RTL8761BU)            # 任意の名前
CN = SUSE Linux Enterprise Secure Boot (User Add RTL8761BU)  # 任意の名前
emailAddress = suse@localhost                                # 任意のメールアドレス
[ myexts ]
basicConstraints=critical,CA:FALSE
keyUsage=digitalSignature
subjectKeyIdentifier=hash
authorityKeyIdentifier=keyid
<br>
キーペアを作成する。<br>
openssl req -x509 -new -nodes -utf8 -sha256 -days 36500 -batch -config ./RTL8761BU.config \
-outform DER -out ./RTL8761BU.der -keyout ./RTL8761BU.priv \
-addext "extendedKeyUsage=codeSigning"
<br>
次に、MOK(Module owned Key)にキーをインポートする。<br>
<code>--root-pw</code>オプションを付加することにより、再起動時のRealtek RTL8761BUモジュールの署名において、rootパスワードが必要となる。<br>
sudo mokutil --import ./RTL8761BU.der --root-pw
<br>
PCを再起動して、上記のキーの署名する。<br>
sudo systemctl reboot
<br>
Realtek RTL8761BUモジュール(rtk_btusb.ko)を署名する。<br>
sudo /lib/modules/$(uname -r)/build/scripts/sign-file sha256 ./RTL8761BU.priv ./RTL8761BU.der /lib/modules/$(uname -r)/kernel/drivers/bluetooth/rtk_btusb.ko
<br>
必要であれば、Realtek RTL8761BUモジュールをXZ形式またはZstandard形式に圧縮する。(任意)<br>
# XZ形式の場合
cd /lib/modules/$(uname -r)/kernel/drivers/bluetooth
xz -f f2fs.ko
# Zstandard形式の場合
cd /lib/modules/$(uname -r)/kernel/drivers/bluetooth
zstd --rm rtk_btusb.ko
<br>
Realtek RTL8761BUモジュールを読み込む。<br>
sudo depmod -a $(uname -r)  # モジュール依存リストを更新する
sudo modprobe -v rtk_btusb  # RTL8761BUモジュールをロードする
<br>
Realtek RTL8761BUモジュールが正常に読み込まれているかどうかを確認する。<br>
lsmod | grep rtk_btusb      # 正常に読み込まれたかどうかを確認する
<br>
Realtek RTL8761BUモジュールが正しく署名されているかどうかを確認する。<br>
正常に読み込まれている場合は、<u>"RTK_8761BU.der is already enrolled"</u>と表示される。<br>
cd <Realtek RTL8761BUモジュールの署名ファイルが存在するディレクトリ>
sudo mokutil --test-key ./RTL8761BU.der
<br>
上記の署名は、カーネルがアップデートされた場合、再度、署名が必要となることに注意する。<br>
<br>
作成したキーは信頼されるため、キーを適切に保存する必要がある。<br>
作成したキーは信頼されるため、キーを適切に保存する必要がある。<br>
このキーで署名されたものはシステムから信頼されるため、セキュリティリスクとなる可能性があることに注意する。<br>
このキーで署名されたものはシステムから信頼されるため、セキュリティリスクとなる可能性があることに注意する。<br>
<br>
==== Realtek RTL8761BUモジュールの署名の削除 ====
Realtek RTL8761BUモジュールの署名を削除する場合、以下のコマンドを実行して再起動する。<br>
<code>--root-pw</code>オプションを付加することにより、再起動時のRealtek RTL8761BUモジュールの署名の削除において、rootパスワードが必要となる。<br>
cd <Realtek RTL8761BUモジュールの署名ファイルが存在するディレクトリ>
sudo mokutil --delete ./RTL8761BU.der --root-pw
sudo systemctl reboot
<br>
==== Realtek RTL8761BUモジュールの再署名 ====
Linuxカーネルをアップデートした場合、Realtek RTL8761BUモジュールを再署名する必要がある。<br>
<br>
Realtek RTL8761BUモジュールの署名を削除する。
cd <Realtek RTL8761BUモジュールの署名ファイルが存在するディレクトリ>
sudo mokutil --delete ./RTL8761BU.der --root-pw
<br>
PCを再起動する。<br>
sudo systemctl reboot
<br>
Realtek RTL8761BUモジュール(rtk_btusb)を署名する。<br>
sudo /lib/modules/$(uname -r)/build/scripts/sign-file sha256 ./RTL8761BU.priv ./RTL8761BU.der /lib/modules/$(uname -r)/kernel/drivers/bluetooth/rtk_btusb.ko
<br>
MOK(Module owned Key)にキーをインポートする。<br>
cd <Realtek RTL8761BUモジュールの署名ファイルが存在するディレクトリ>
sudo mokutil --import ./RTL8761BU.der --root-pw
<br>
PCを再起動する。<br>
sudo systemctl reboot
<br>
必要であれば、Realtek RTL8761BUモジュールをXZ形式またはZstandard形式に圧縮する。(任意)<br>
# XZ形式の場合
cd /lib/modules/$(uname -r)/kernel/drivers/bluetooth
sudo xz -f rtk_btusb.ko
# Zstandard形式の場合
cd /lib/modules/$(uname -r)/kernel/drivers/bluetooth
sudo zstd --rm rtk_btusb.ko
<br>
Realtek RTL8761BUモジュールを読み込む。<br>
sudo depmod -a $(uname -r)  # モジュール依存リストを更新する
sudo modprobe -v rtk_btusb  # RTL8761BUモジュールをロードする
<br>
Realtek RTL8761BUモジュールが正常に読み込まれているかどうかを確認する。<br>
lsmod | grep rtk_btusb      # 正常に読み込まれたかどうかを確認する
<br>
Realtek RTL8761BUモジュールが正しく読み込まれているかどうかを確認する。<br>
正常に読み込まれている場合は、<u>"RTL8761BU.der is already enrolled"</u>と表示される。<br>
cd <Realtek RTL8761BUモジュールの署名ファイルが存在するディレクトリ>
sudo mokutil --test-key ./RTL8761BU.der
<br><br>
<br><br>


172行目: 282行目:
BluetoothデバイスのUSBドングルをPCに再接続して、リモートウェイクアップ機能が有効になっているかどうかを確認する。<br>
BluetoothデバイスのUSBドングルをPCに再接続して、リモートウェイクアップ機能が有効になっているかどうかを確認する。<br>
<br><br>
<br><br>
== エラー ==
==== 送受信エラー ====
Bluetoothを通してファイルを送受信する場合、以下に示すようなエラーが出力される場合がある。<br>
Failed to start org.bluez.obex service: Unit dbus-org.bluez.obex.service not found.
<br>
まず、Bluetooth向けObexライブラリをインストールする。<br>
sudo zypper install bluez-obexd
<br>
次に、Bluetooth向けObexを有効にする。<br>
sudo systemctl --global enable obex
# 出力
Created symlink /etc/systemd/user/dbus-org.bluez.obex.service → /usr/lib/systemd/user/obex.service.
<br>
最後に、Bluetooth向けObexを開始する。<br>
systemctl --user start obex
<br>
もし、上記の手順を実行してもデータの送受信が出来ない場合は、ジャーナルを確認する。<br>
sudo journalctl --unit=bluetooth -f
<br><br>


__FORCETOC__
__FORCETOC__
[[カテゴリ:CentOS]][[カテゴリ:SUSE]][[カテゴリ:Raspberry_Pi]][[カテゴリ:PinePhone]]
[[カテゴリ:RHEL]][[カテゴリ:SUSE]][[カテゴリ:Raspberry_Pi]][[カテゴリ:PinePhone]]