「インストール - Bluetoothドライバ」の版間の差分
(→概要) |
|||
(同じ利用者による、間の21版が非表示) | |||
1行目: | 1行目: | ||
== 概要 == | == 概要 == | ||
LinuxでBluetoothデバイスを制御する場合、Realtek社等のBluetoothドライバを手動でのインストールが必要な可能性がある。<br> | |||
<br> | <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> | ||
52行目: | 52行目: | ||
競合するBluetoothモジュールをブラックリストに入れるため、/etc/modprobe.dディレクトリに.confファイル作成して、以下の内容を記述する。<br> | 競合するBluetoothモジュールをブラックリストに入れるため、/etc/modprobe.dディレクトリに.confファイル作成して、以下の内容を記述する。<br> | ||
以下の例では、/etc/modprobe.d/50-bluetooth-blacklist.confファイルを作成している。<br> | 以下の例では、/etc/modprobe.d/50-bluetooth-blacklist.confファイルを作成している。<br> | ||
<u>※以下の/etc/modprobe.d/50-bluetooth-blacklist.confファイルの作成において、環境によっては不要の可能性があることに注意する。</u><br> | |||
sudo vi /etc/modprobe.d/50-bluetooth-blacklist.conf | sudo vi /etc/modprobe.d/50-bluetooth-blacklist.conf | ||
<br> | <br> | ||
63行目: | 64行目: | ||
BluetoothのUSBドングルをPCに接続して、デバイスが認識されているかどうかを確認する。<br> | BluetoothのUSBドングルをPCに接続して、デバイスが認識されているかどうかを確認する。<br> | ||
sudo hwinfo --bluetooth | sudo hwinfo --bluetooth | ||
<br> | <br> | ||
RTL8761BUドライバのソースコードをダウンロードする。<br> | RTL8761BUドライバのソースコードをダウンロードする。<br> | ||
git clone https://github.com/Elif-dot/RTL8761BU.git | |||
# または | |||
git clone https://github.com/mohclips/realtek_bt_kernel_driver.git | git clone https://github.com/mohclips/realtek_bt_kernel_driver.git | ||
# または | # または | ||
wget https://mpow.s3-us-west-1.amazonaws.com/mpow_BH519A_driver+for+Linux.7z | wget https://mpow.s3-us-west-1.amazonaws.com/mpow_BH519A_driver+for+Linux.7z | ||
88行目: | 85行目: | ||
もし、インストールに失敗する場合は、Linuxカーネルを修復する。<br> | もし、インストールに失敗する場合は、Linuxカーネルを修復する。<br> | ||
cd /usr/src/linux | cd /usr/src/linux | ||
sudo make oldconfig | sudo make -j $(nproc) oldconfig | ||
sudo make prepare | sudo make -j $(nproc) prepare | ||
<br> | <br> | ||
RTL8761BUドライバのソースディレクトリは、任意のディレクトリに保存する。<br> | RTL8761BUドライバのソースディレクトリは、任意のディレクトリに保存する。<br> | ||
100行目: | 97行目: | ||
<u>※注意</u><br> | <u>※注意</u><br> | ||
<u>Linuxカーネルをアップデートした場合は自動的にRTL8761BUドライバが削除されるため、再度、RTL8761BUドライバをインストールする必要がある。</u> | <u>Linuxカーネルをアップデートした場合は自動的にRTL8761BUドライバが削除されるため、再度、RTL8761BUドライバをインストールする必要がある。</u> | ||
<br> | |||
もし、既にRTL8761BUモジュールのバックアップが存在する場合、<br> | |||
rtk_btusbモジュール、rtl8761bu_fwファイル、rtl8761bu_configファイルを以下のディレクトリにコピーして、モジュール群をデプロイすることもできる。<br> | |||
# RTL8761BUモジュールのコピー | |||
sudo cp rtk_btusb.ko /lib/modules/$(uname -r)/kernel/drivers/bluetooth/ | |||
sudo cp rtl8761bu_fw rtl8761bu_config /lib/firmware/ | |||
# モジュール群のデプロイ | |||
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> | ||
112行目: | 134行目: | ||
RTL8761BUドライバのファームウェアファイルおよびその設定ファイルを削除する。<br> | RTL8761BUドライバのファームウェアファイルおよびその設定ファイルを削除する。<br> | ||
sudo rm /lib/firmware/rtl8761bu_fw /lib/firmware/rtl8761bu_config | sudo rm /lib/firmware/rtl8761bu_fw /lib/firmware/rtl8761bu_config | ||
<br><br> | |||
== Realtek RTL8761BUモジュールの署名 (セキュアブートが有効の場合) == | |||
セキュアブートが有効の場合、Realtek RTL8761BUモジュールの署名を登録する必要がある。<br> | |||
<u>また、ユーザが勝手にモジュールファイルをXZ形式等へ圧縮してはならない。(モジュールの署名に失敗するため)</u><br> | |||
<br> | |||
==== Realtek RTL8761BUモジュールの署名 (初めて署名する場合) ==== | |||
署名を登録する手順を以下に示す。<br> | |||
<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> | |||
==== 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> | ||
138行目: | 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__ | ||
[[カテゴリ: | [[カテゴリ:RHEL]][[カテゴリ:SUSE]][[カテゴリ:Raspberry_Pi]][[カテゴリ:PinePhone]] |
2024年12月24日 (火) 02:46時点における最新版
概要
LinuxでBluetoothデバイスを制御する場合、Realtek社等のBluetoothドライバを手動でのインストールが必要な可能性がある。
ここでは、Bluetoothデバイスの各チップにおいて、各チップベンダの専用ドライバのインストール手順を記載する。
BlueZのインストール
パッケージ管理システムからインストール
BlueZをインストールする。
sudo zypper install bluez bluez-util
BlueZサービスを開始する。
sudo systemctl start bluetooth
BlueZサービスを自動起動に設定する。
sudo systemctl enable bluetooth
ソースコードからインストール
BlueZのビルドに必要なライブラリをインストールする。
sudo zypper install dbus-1-devel glib2-devel libudev-devel libical-devel rst2html5
BlueZの公式Webサイトにアクセスして、BlueZのソースコードをダウンロードする。
ダウンロードしたファイルを解凍する。
tar xf bluez-<バージョン>.tar.xz cd bluez-<バージョン>
BlueZをビルドおよびインストールする。
mkdir build && cd build ../configure --prefix=<BlueZのインストールディレクトリ> \ --mandir=/<BlueZのインストールディレクトリ>/share/man \ --sysconfdir=/<BlueZのインストールディレクトリ>/etc \ --localstatedir=/<BlueZのインストールディレクトリ>/var \ --libexecdir=/<BlueZのインストールディレクトリ>/lib make -j $(nproc) make install
~/.profileファイル等に、環境変数の設定を記述する。
vi ~/.profile
# ~/.profileファイル export PATH="/<BlueZのインストールディレクトリ>/bin:$PATH" export LD_LIBRARY_PATH="/<BlueZのインストールディレクトリ>/lib64:/<BlueZのインストールディレクトリ>/lib:$LD_LIBRARY_PATH"
RTL8761BUドライバ
RTL8761BUドライバのインストール
Realtek社のRTL8761B(RTL8761BUV)チップを搭載したUSBドングルは、Linuxカーネル 2.6.32以降に対応している。
競合するBluetoothモジュールをブラックリストに入れるため、/etc/modprobe.dディレクトリに.confファイル作成して、以下の内容を記述する。
以下の例では、/etc/modprobe.d/50-bluetooth-blacklist.confファイルを作成している。
※以下の/etc/modprobe.d/50-bluetooth-blacklist.confファイルの作成において、環境によっては不要の可能性があることに注意する。
sudo vi /etc/modprobe.d/50-bluetooth-blacklist.conf
# /etc/modprobe.d/50-bluetooth-blacklist.confファイル blacklist btrtl blacklist btusb blacklist btintel blacklist btbcm
BluetoothのUSBドングルをPCに接続して、デバイスが認識されているかどうかを確認する。
sudo hwinfo --bluetooth
RTL8761BUドライバのソースコードをダウンロードする。
git clone https://github.com/Elif-dot/RTL8761BU.git # または git clone https://github.com/mohclips/realtek_bt_kernel_driver.git # または wget https://mpow.s3-us-west-1.amazonaws.com/mpow_BH519A_driver+for+Linux.7z # または https://drive.google.com/file/d/1FkzIOuNAc1HErqbhkmbkwEisviAQP2IC/view にアクセスしてダウンロードする。
ダウンロードしたファイルのディレクトリに移して、RTL8761BUドライバをビルドおよびインストールする。
cd <RTL8761BUドライバのソースディレクトリ> sudo make install INTERFACE=usb sudo cp rtkbt-firmware/lib/firmware/rtl8761bu_fw rtkbt-firmware/lib/firmware/rtl8761bu_config \ /lib/firmware/ # または sudo cp 8761BU/rtl8761bu_fw 8761BU/rtl8761bu_config /lib/firmware/
もし、インストールに失敗する場合は、Linuxカーネルを修復する。
cd /usr/src/linux sudo make -j $(nproc) oldconfig sudo make -j $(nproc) prepare
RTL8761BUドライバのソースディレクトリは、任意のディレクトリに保存する。
以下のコマンドは不要の可能性が高いが、記載しておく。
sudo modprobe rtk_btusb # 不要の可能性あり
PCを再起動する。
※注意
Linuxカーネルをアップデートした場合は自動的にRTL8761BUドライバが削除されるため、再度、RTL8761BUドライバをインストールする必要がある。
もし、既にRTL8761BUモジュールのバックアップが存在する場合、
rtk_btusbモジュール、rtl8761bu_fwファイル、rtl8761bu_configファイルを以下のディレクトリにコピーして、モジュール群をデプロイすることもできる。
# RTL8761BUモジュールのコピー sudo cp rtk_btusb.ko /lib/modules/$(uname -r)/kernel/drivers/bluetooth/ sudo cp rtl8761bu_fw rtl8761bu_config /lib/firmware/ # モジュール群のデプロイ sudo depmod -a $(uname -r)
Bluetoothドングルと機器が正常に接続されている場合、ジャーナルを確認すると、以下に示すようなメッセージが出力される。
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
RTL8761BUドライバのアンインストール
RTL8761BUドライバをアンインストールする。
cd /<RTL8761BUドライバのソースディレクトリ>/rtkbt-firmware/lib/firmware sudo make uninstall
標準のBluetoothドライバを有効にする。
sudo rm /etc/modprobe.d/50-bluetooth-blacklist.conf
RTL8761BUドライバのファームウェアファイルおよびその設定ファイルを削除する。
sudo rm /lib/firmware/rtl8761bu_fw /lib/firmware/rtl8761bu_config
Realtek RTL8761BUモジュールの署名 (セキュアブートが有効の場合)
セキュアブートが有効の場合、Realtek RTL8761BUモジュールの署名を登録する必要がある。
また、ユーザが勝手にモジュールファイルをXZ形式等へ圧縮してはならない。(モジュールの署名に失敗するため)
Realtek RTL8761BUモジュールの署名 (初めて署名する場合)
署名を登録する手順を以下に示す。
まず、署名に必要な設定ファイルを作成する。
mkdir -p ~/.MOK/RTL8761BU && cd ~/.MOK/RTL8761BU vi RTL8761BU.config
# ~/.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
キーペアを作成する。
openssl req -x509 -new -nodes -utf8 -sha256 -days 36500 -batch -config ./RTL8761BU.config \ -outform DER -out ./RTL8761BU.der -keyout ./RTL8761BU.priv \ -addext "extendedKeyUsage=codeSigning"
次に、MOK(Module owned Key)にキーをインポートする。
--root-pw
オプションを付加することにより、再起動時のRealtek RTL8761BUモジュールの署名において、rootパスワードが必要となる。
sudo mokutil --import ./RTL8761BU.der --root-pw
PCを再起動して、上記のキーの署名する。
sudo systemctl reboot
Realtek RTL8761BUモジュール(rtk_btusb.ko)を署名する。
sudo /lib/modules/$(uname -r)/build/scripts/sign-file sha256 ./RTL8761BU.priv ./RTL8761BU.der /lib/modules/$(uname -r)/kernel/drivers/bluetooth/rtk_btusb.ko
必要であれば、Realtek RTL8761BUモジュールをXZ形式またはZstandard形式に圧縮する。(任意)
# 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
Realtek RTL8761BUモジュールを読み込む。
sudo depmod -a $(uname -r) # モジュール依存リストを更新する sudo modprobe -v rtk_btusb # RTL8761BUモジュールをロードする
Realtek RTL8761BUモジュールが正常に読み込まれているかどうかを確認する。
lsmod | grep rtk_btusb # 正常に読み込まれたかどうかを確認する
Realtek RTL8761BUモジュールが正しく署名されているかどうかを確認する。
正常に読み込まれている場合は、"RTK_8761BU.der is already enrolled"と表示される。
cd <Realtek RTL8761BUモジュールの署名ファイルが存在するディレクトリ> sudo mokutil --test-key ./RTL8761BU.der
上記の署名は、カーネルがアップデートされた場合、再度、署名が必要となることに注意する。
作成したキーは信頼されるため、キーを適切に保存する必要がある。
このキーで署名されたものはシステムから信頼されるため、セキュリティリスクとなる可能性があることに注意する。
Realtek RTL8761BUモジュールの署名の削除
Realtek RTL8761BUモジュールの署名を削除する場合、以下のコマンドを実行して再起動する。
--root-pw
オプションを付加することにより、再起動時のRealtek RTL8761BUモジュールの署名の削除において、rootパスワードが必要となる。
cd <Realtek RTL8761BUモジュールの署名ファイルが存在するディレクトリ> sudo mokutil --delete ./RTL8761BU.der --root-pw sudo systemctl reboot
Realtek RTL8761BUモジュールの再署名
Linuxカーネルをアップデートした場合、Realtek RTL8761BUモジュールを再署名する必要がある。
Realtek RTL8761BUモジュールの署名を削除する。
cd <Realtek RTL8761BUモジュールの署名ファイルが存在するディレクトリ> sudo mokutil --delete ./RTL8761BU.der --root-pw
PCを再起動する。
sudo systemctl reboot
Realtek RTL8761BUモジュール(rtk_btusb)を署名する。
sudo /lib/modules/$(uname -r)/build/scripts/sign-file sha256 ./RTL8761BU.priv ./RTL8761BU.der /lib/modules/$(uname -r)/kernel/drivers/bluetooth/rtk_btusb.ko
MOK(Module owned Key)にキーをインポートする。
cd <Realtek RTL8761BUモジュールの署名ファイルが存在するディレクトリ> sudo mokutil --import ./RTL8761BU.der --root-pw
PCを再起動する。
sudo systemctl reboot
必要であれば、Realtek RTL8761BUモジュールをXZ形式またはZstandard形式に圧縮する。(任意)
# 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
Realtek RTL8761BUモジュールを読み込む。
sudo depmod -a $(uname -r) # モジュール依存リストを更新する sudo modprobe -v rtk_btusb # RTL8761BUモジュールをロードする
Realtek RTL8761BUモジュールが正常に読み込まれているかどうかを確認する。
lsmod | grep rtk_btusb # 正常に読み込まれたかどうかを確認する
Realtek RTL8761BUモジュールが正しく読み込まれているかどうかを確認する。
正常に読み込まれている場合は、"RTL8761BU.der is already enrolled"と表示される。
cd <Realtek RTL8761BUモジュールの署名ファイルが存在するディレクトリ> sudo mokutil --test-key ./RTL8761BU.der
リモートウェイクアップ機能
リモートウェイクアップ機能とは、ペアリングした端末からデータを受信をした場合、自動的にスリープ / サスペンド状態から復帰する機能である。
lsusb
コマンドを実行して、Bluetoothデバイスのベンダ名と製品IDを確認する。
以下の例では、ベンダ名(idVendor)は0bda、製品ID(idProduct)は1724である。
lsusb # 出力例 Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub Bus 001 Device 003: ID 062a:4102 MosArt Semiconductor Corp. Wireless Mouse Bus 001 Device 002: ID 0bda:1724 Realtek Semiconductor Corp. Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
/etc/udev/rules.dディレクトリに、新しいルールファイル(ファイル名は任意)を作成して、以下の内容を記述する。
echo enabled
およびecho disabled
を記述することにより、リモートウェイクアップ機能の有効 / 無効を設定する。
sudo vi /etc/udev/rules.d/90-BluetoothWakeUp.rules
# /etc/udev/rules.d/90-BluetoothWakeUp.rulesファイル SUBSYSTEM=="usb", ATTRS{idVendor}=="<ベンダ名>", ATTRS{idProduct}=="<製品ID>" RUN+="/bin/sh -c 'echo enabled > /sys$env{DEVPATH}/../power/wakeup'"
BluetoothデバイスのUSBドングルをPCに再接続して、リモートウェイクアップ機能が有効になっているかどうかを確認する。
エラー
送受信エラー
Bluetoothを通してファイルを送受信する場合、以下に示すようなエラーが出力される場合がある。
Failed to start org.bluez.obex service: Unit dbus-org.bluez.obex.service not found.
まず、Bluetooth向けObexライブラリをインストールする。
sudo zypper install bluez-obexd
次に、Bluetooth向けObexを有効にする。
sudo systemctl --global enable obex # 出力 Created symlink /etc/systemd/user/dbus-org.bluez.obex.service → /usr/lib/systemd/user/obex.service.
最後に、Bluetooth向けObexを開始する。
systemctl --user start obex
もし、上記の手順を実行してもデータの送受信が出来ない場合は、ジャーナルを確認する。
sudo journalctl --unit=bluetooth -f