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

提供:MochiuWiki : SUSE, EC, PCB
ナビゲーションに移動 検索に移動
118行目: 118行目:
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 BT8761BUモジュールの署名 (セキュアブートが有効の場合) ==
セキュアブートが有効の場合、Realtek BT8761BUモジュールの署名を登録する必要がある。<br>
<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>
この作業は1度だけ必要となることに注意する。<br>
作成したキーは信頼されるため、キーを適切に保存する必要がある。<br>
このキーで署名されたものはシステムから信頼されるため、セキュリティリスクとなる可能性があることに注意する。<br>
<br><br>
<br><br>



2022年4月22日 (金) 11:26時点における版

概要

LinuxでBluetoothデバイスを制御する場合、専用ドライバをインストールする必要がある可能性が高い。

ここでは、Bluetoothデバイスの各チップにおいて、専用ドライバのインストール手順を記載する。


BlueZのインストール

パッケージ管理システムからインストール

BlueZをインストールする。

sudo zypper install bluez


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ファイルを作成している。
※以下のファイルの作成は不要の可能性があるが、念のため、記載しておく。

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)


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 BT8761BUモジュールの署名 (セキュアブートが有効の場合)

セキュアブートが有効の場合、Realtek BT8761BUモジュールの署名を登録する必要がある。

署名を登録する手順を以下に示す。

  1. キーペアを作成する。
    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/" \
    -addext "extendedKeyUsage=codeSigning"

  2. Realtek BT8761BUモジュール(rtk_btusb)を署名する。
    sudo /lib/modules/$(uname -r)/build/scripts/sign-file sha256 ./RTK_8761BU.priv ./RTK_8761BU.der $(/sbin/modinfo -n rtk_btusb)
    sudo /lib/modules/$(uname -r)/build/scripts/sign-file sha256 ./RTK_8761BU.priv ./RTK_8761BU.der /lib/firmware/rtl8761bu_fw
    sudo /lib/modules/$(uname -r)/build/scripts/sign-file sha256 ./RTK_8761BU.priv ./RTK_8761BU.der /lib/firmware/rtl8761bu_config

  3. MOK(Module owned Key)にキーをインポートする。
    --root-pwオプションを付加することにより、再起動時のRealtek BT8761BUモジュールの署名において、rootパスワードが必要となる。
    sudo mokutil --import ./RTK_8761BU.der --root-pw

  4. PCを再起動して、Realtek BT8761BUモジュールの署名を登録する。
    sudo systemctl reboot

  5. Realtek BT8761BUモジュールが正しく読み込まれているかどうかを確認する。
    正常に読み込まれている場合は、"RTK_8761BU.der is already enrolled"と表示される。
    cd <Realtek BT8761BUモジュールの署名ファイルが存在するディレクトリ>
    sudo mokutil --test-key ./RTK_8761BU.der


この作業は1度だけ必要となることに注意する。
作成したキーは信頼されるため、キーを適切に保存する必要がある。
このキーで署名されたものはシステムから信頼されるため、セキュリティリスクとなる可能性があることに注意する。


リモートウェイクアップ機能

リモートウェイクアップ機能とは、ペアリングした端末からデータを受信をした場合、自動的にスリープ / サスペンド状態から復帰する機能である。

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に再接続して、リモートウェイクアップ機能が有効になっているかどうかを確認する。