2024年10月14日月曜日

FMV mobile keyboardはbluezを最新にしたらubuntu22.04でも使える


背景

FMV mobile keyboardを買ったもののubuntu22.04にbluetooth接続しても無反応だったので試行錯誤したところ、linuxのbluetooth処理プログラムであるbluezを最新版にしたら動かせました。
対応内容を共有します。

使ったもの

  • ubuntu22.04のPC
  • bluetoothモジュール
    ノートパソコン(Thinkpad S1 Yoga)に内蔵されたモジュールを使いました。
    BLE5ではなく4.0対応のモジュールでしたが、キーボードと通信できました。
    hciconfig -a
    hci0:	Type: Primary  Bus: USB
    BD Address: 80:86:F2:42:74:20 ACL MTU: 1021:5 SCO MTU: 96:5
    UP RUNNING PSCAN
    RX bytes:5981608 acl:306943 sco:0 events:38435 errors:0
    TX bytes:104627 acl:1149 sco:0 commands:1421 errors:0
    Features: 0xff 0xfe 0x0f 0xfe 0xdb 0xff 0x7b 0x87
    Packet type: DM1 DM3 DM5 DH1 DH3 DH5 HV1 HV2 HV3
    Link policy: RSWITCH HOLD SNIFF
    Link mode: PERIPHERAL ACCEPT
    Name: 'asuki-ThinkPad-S1-Yoga'
    Class: 0x7c010c
    Service Classes: Rendering, Capturing, Object Transfer, Audio, Telephony
    Device Class: Computer, Laptop
    HCI Version: 4.0 (0x6) Revision: 0x500
    LMP Version: 4.0 (0x6) Subversion: 0x500
    Manufacturer: Intel Corp. (2)
  • FMV mobile keyboard
    今回扱うキーボードです。

bluezをコードからビルドしてインストール

bluezとはlinuxのbluetooth処理を行うプログラム群です。
このbluezの最新版(記事を書いている時点で5.78)のbluetoothd(bluetoothに関するデーモン(常時起動)処理)コマンドを使えばFMV mobile keyboardをubuntu22.04で使えました。
自分が実行したインストールコマンドと関連リンクを共有します。

コードを取得するためのgitとbluez関連プログラムをインストールします。
sudo apt install -y git bluez automake libtool libglib2.0-dev libgtk2.0-dev libdbus-1-dev libudev-dev libical-dev libcups2-dev libreadline-dev python3-docutils

bluezのgitリポジトリ(ソースコード)をgit clone(ダウンロード)します。
この記事では~/gitprojectsにbluezをダウンロードしてビルドとインストールを行います。
mkdir -p ~/gitprojects
cd ~/gitprojects
git clone https://github.com/bluez/bluez.git

cloneできたらbluezのリポジトリに入り、バージョンを選択します。
記事を書いている時点で最新版の5.78を今回は使います。
ubuntu22.04にインストールされる5.64では使えないのは把握したのですが、5.64~5.78のどのバージョンが境目かは把握していません。
cd ~/gitprojects/bluez
git checkout 5.78

READMEに従い、bootstrapとconfigureコマンドを実行します。
この記事ではconfigureで生成されるファイルをbuildフォルダに置く方式にしています。
コマンド実行時に何かが足りないと言われたら、検索してそれを含むライブラリを探してインストールしてください。
cd ~/gitprojects/bluez
./bootstrap
mkdir -p build
cd build
../cofigure --prefix=/usr --mandir=/usr/share/man --sysconfdir=/etc --localstatedir=/var

エラーの例外としてcops関係の警告は解消方法が分かりませんが無視してもビルド可能な状態になったので無視しています。
解決方法をご存知でしたらコメントなどで教えていただけると嬉しいです。
checking cups directory... Package cups was not found in the pkg-config search path.
Perhaps you should add the directory containing `cups.pc'
to the PKG_CONFIG_PATH environment variable
No package 'cups' found

configureが成功したらビルドします。
cd ~/gitprojects/bluez/build
make

インストール前に試す場合hは、bluetooth.serviceを止めてビルドしたbluetoothdを実行します。
sudo systemctl stop bluetooth.service
cd ~/gitprojects/bluez/build
sudo src/bluetoothd

上記のコマンド実行後にFMV mobile keyboardをubuntu22.04にbluetooth接続すれば、自分の環境ではマウスとキーボードの操作ができました。
期待通りに動作するならインストールします。
cd ~/gitprojects/bluez/build
make install

インストールしたら更新されたbluetooth.serviceとbluetoothdでbluetoothの処理を再起動します。
sudo systemctl daemon-reload
sudo systemctl bluetooth.service

btmonで受信内容を確認可能

BLEのnotificatinoの受信内容は下記のコマンドでbtmonを起動すると確認可能です。
bluez5.64のときはこれを受信できてなかったので、notification受信までの処理に問題があったようです。
sudo btmon
> ACL Data RX: H.. flags 0x02 dlen 14  #2880 [hci0] 254.002151
ATT: Handle Value Notification (0x1b) len 9
Handle: 0x0069
Data[7]: 00010000000000
> ACL Data RX: H.. flags 0x02 dlen 14 #2881 [hci0] 254.392142
ATT: Handle Value Notification (0x1b) len 9
Handle: 0x0069
Data[7]: 01000000000000
> ACL Data RX: H.. flags 0x02 dlen 14 #2882 [hci0] 254.407144
ATT: Handle Value Notification (0x1b) len 9
Handle: 0x0069
Data[7]: 00000000000000
> ACL Data RX: H.. flags 0x02 dlen 15 #2883 [hci0] 255.539156
ATT: Handle Value Notification (0x1b) len 10
Handle: 0x005a
Data[8]: 0100000000000000
> ACL Data RX: H.. flags 0x02 dlen 15 #2884 [hci0] 255.929150
ATT: Handle Value Notification (0x1b) len 10
Handle: 0x005a
Data[8]: 0100060000000000

ubuntu24.04はbluez5.77なので多分そのまま使える

bluezのlaunchpadを見るとubuntu24.04(Oracular Oride)向けのbluezは5.77なので、この記事のような最新版への更新をしなくても多分そのまま使えます。
5.77でもFMV mobile keyboardと通信できるのを確認しました。

おわり

2万円近くしたFMV mobile keyboardがubuntu22.04で使えなくて落胆しましたが、何とか使おうとbluezの実装確認のためソースコードからビルドして動かしたところ最新版なら使えると分かって良かったです。

参考

bluez- github
FMV mobile keyboard

0 件のコメント :