RTL8761B搭載Bluetooth 5.0 USBドングルをUbuntuで動かす

Amazonで1,000円ほどで売られているRTL8761B搭載Bluetooth 5.0 USB ドングル(技適印付き)を現行のUbuntu(Ubuntu Server 20.04.3 LTS)で動かしました。あまり情報がなくて試行錯誤したので、一部の方にはお役に立てるかと思って紹介します。Ubuntu以外のLinuxディストリビューションでも動くと思います。

結論

結論から書いておきます。Ver. 5.8以降のカーネルならば、配布されている2個のファイルを取り寄せて、適切なディレクトリに置くだけで、Bluetooth 5用USBドングルが動くようです。

RTL8710とLinuxというキーワードで検索したところ、色々な方法が紹介されていました。ただ少し古い内容も多いようです。今回は新しそうな、以下のサイトの方法にしたがって対応しました。

それによると、Linuxカーネルが5.8以上ならば、このチップに対応したドライバーが含まれているそうです。5.8未満の場合は、アップデートしてくださいとのことです。手元のマシンのバージョンをuname -rコマンドで確認したところ5.11でした。なのでドライバは対応しているはずです。でも、Bluetoothドンルグは認識されず動作しません。対応したファームウェアファイルと、設定ファイルが足りないそうです。これらのファイルをcurlコマンドで取り寄せるならば、以下のようにすれば良いです。

curl -O https://raw.githubusercontent.com/Realtek-OpenSource/android_hardware_realtek/rtk1395/bt/rtkbt/Firmware/BT/rtl8761b_fw
curl -O https://raw.githubusercontent.com/Realtek-OpenSource/android_hardware_realtek/rtk1395/bt/rtkbt/Firmware/BT/rtl8761b_config

次に、この2個のファイル

  • rtl8761b_fw
  • rtl8761b_config

の末尾に.binという拡張子を付加して、/lib/firmware/rtl_bt/以下、もしくは/usr/lib/firmware/rtl_bt/以下にコピーします。ちなみに/libは/usr/libへのシンボリックリンクなので、どちらにコピーしても同じです。コピーする前に、/lib/firmware/rtl_bt/にあるファイルを見ると、rtl1876a_fw.binというファイルはありますが、RTL1876Bに対応した名前のファイルは見つかりません。そこで、ダウンロードしたファイルを以下のように改名してコピーします。

sudo cp rtl8761b_fw /lib/firmware/rtl_bt/rtl8761b_fw.bin
sudo cp rtl8761b_config /lib/firmware/rtl_bt/rtl8761b_config.bin

これでドングルが動くようになりました。少し経てば、このファイルがディストリビューションに含まれるようになり、何もしなくても動くようになるのではと思います。動作しないようでしたら、上記のファイルが存在するかどうかを確認して、ダウンロードするのが良いと思います。

動作環境

この先はおまけです。お暇な方は読んでください。

使ったドングルはAmazonで1,000円程度で売っているBluetooth LE 5.0 (BLE 5.0) USBドングルです。技適マークも刻印されていて、立派なブリスターパックで届きますが、メーカー名はどこにも書いてなくて不詳です。AliExpressなら似た製品が300円程度で売られてますが、それらに技適マークは無いので、1,000円の価値はあると思います。

これを、初代Intel NUCにインストールしたUbuntu 20.04 LTS で動かそうとしました。こちらで紹介した機種です。

このIntel NUCでmacOSが問題なく動くのですが、CPUが古いので最新のmacOSへアップデートはできません。そういう事情もあって、ほとんど使っていなかったので、Homebridgeサーバにすべく、Ubuntuサーバをインストールしました。

このマシンのBluetoothとして、上記のBLE 5.0ドングルを使おうと考えました。SwitchBotのデバイス(有名なスイッチを押す箱の他に、カーテン開閉器、コンセント、温度計などがあります)をHomebridgeから使うためです。SwitchBotデバイスはBLEで通信しているようです。SwitchBot製品には、LANへ接続するゲートウェイもあります。しかし、HomeKitには対応していないので、いずれにしてもHomebridgeを使う必要があります。BLEが届く範囲なら、BLE通信で接続する方が構成が簡単です。

LinuxでBluetoothを使う場合、こなれた古い仕様のドングルを使えば苦労なく動くと思います。でもBLE対応になった4.0以降である必要があります。さらには5.0ではメッシュ通信もできるらしいので、将来はZigbeeみたいに使えるのかもと期待しました。今まで使っていたRaspberry pi 4も5.0でした。ということで、新しいBluetooth 5.0に挑戦しました。Raspberry piは、配布されているOSイメージにBluetooth環境がすでに設定済みだったので、何もしなくて動いていました。でも一般的なUbuntuマシンでは、前述のように設定に手間がかかりました。

動作確認

色々検索して、LinuxではbluetoothctlコマンドなどでBluetoothの設定をするようです。bluetoothctlは、標準のUbuntu Serverのインストール内容に含まれないので、aptやapt-getでインストールします。また同じパッケージに入っているhciconfig -aコマンドでも確認できます。

まずは標準のlsusbコマンドで、ドングルがUSBに接続していることを確認できます。IDが0x8771でRealtekのBluetooth無線と書いてあるので、USBデバイスとしては認識されていることが確認できます。

$ lsusb
Bus 002 Device 006: ID 0bda:8771 Realtek Semiconductor Corp. Bluetooth Radio
(他に見えているデバイスは除外しました)

さらに、Bluetoothドライバが動いていれば、hciconfig -aコマンドで確認できます。

$ hciconfig -a
hci0: Type: Primary Bus: USB
(省略)
Manufacturer: Realtek Semiconductor Corporation (93)

ちゃんと動作していれば、bluetoothctlコマンドの中で、scan onなどすると他のデバイスを探してくれます。

$ bluetoothctl
[bluetooth]# scan on
Discovery started
[CHG] Controller XX:XX:XX:XX:XX:xX Discovering: yes
[NEW] Device XX:XX:XX:XX:XX:XX iPhone

こんな感じで動作を確認できます。もしBluetoothドライバが機能していない状態だと、

No Default controller available

のようなメッセージで止まってしまいます。