ひこぽんのーと

覚書と雑記です。

Arch Linux ARMでBluetoothを有効にするのこと(Raspberry pi 3 B)

Raspberry pi 3 Bで動いているArch Linux ARMで
bluetoothを有効にしようとしたら、存外ハマったのでメモを残しておく。
以前にも少し触ったことがあったけど、こんなに苦労した記憶はないのだが、どうなってるんだ。

パッケージ

  1. bluez
  2. pi-bluetooth (AUR)
  3. bluez-utils-compat (AUR)

この内、3は2 が依存しているので必要となる。

bluez

bluetooth関連のパッケージで公式リポジトリにあるので、
pacmanでインストールする。

bluez-utils-compat

https://aur.archlinux.org/packages/bluez-utils-compat/

公式リポジトリにあるbluez-utilsから削除された機能を含んでいるので、
これをインストールするとbluez-utilsと衝突する。

ダウンロード

git clone urlはリンクが切れているので、cloneできない。
download snapshotのリンクからソースをダウンロードすること。

make

ソースファイルに署名がついているので、
署名サーバから署名を取得する必要がある。
パッケージビルドでビルドする前の署名チェックでキー値がわかる。
署名が確認できないとビルドが中断するため、
中断した場合は、以下のコマンドで署名をインポートする。

gpg --recv-keys 06CA9F5D1DCF2659()

pi-bluetooth

https://aur.archlinux.org/packages/pi-bluetooth/

こっちはcloneができるので 問題ない。
パッケージビルドすればインストールできる。

起動

brcm43438.service

pi-bluetoothに含まれるサービスbrcm43438.serviceを有効化する。
このまま起動すると問題があるのだが、それは後ほど。

sudo systemctl enable brcm43438.service 

bluetooth.service

bluezに含まれるサービスbluetooth.serviceを有効化する。

sudo systemctl enable bluetooth

再起動後、bluetoothが有効になっているはず。

確認

bluetoothctlを起動してbluetoothdに接続できれば成功。

[alarm@alarm ~]$ bluetoothctl 
Agent registered
[CHG] Controller B8:27:EB:EC:98:C8 Pairable: yes
[bluetooth]# 

ControllerのMACアドレスAA:AA:AA:AA:AA:AAになる場合

brcm43438.serviceの項で書いた問題がコレ。
/lib/systemd/system/brcm43438.serviceを下記のように書き換えてやる。*1
再起動してMACアドレスAA:AA:AA:AA:AA:AAでなければOK・・・でしょう。

() ExecStart=/usr/bin/hciattach -n /dev/ttyAMA0 bcm43xx 921600 noflow -
↓
() ExecStart=/usr/bin/btattach -B /dev/ttyAMA0 -P bcm -S 3000000

ペアリング

bluetoothctl起動後にscan onbluetooth機器のscanができる。

[bluetooth]# scan on

Failed to start discovery: org.bluez.Error.NotReady

こんなエラーが出た場合は、bluetoothアダプタが有効になっていない。
/etc/bluetooth/main.confを編集して自動的に有効になるように設定する。

/etc/bluetooth/main.conf
--
[Policy]
AutoEnable=true

下記のコマンドを実行してアダプタを起動する方法もあるが
現在は非推奨のこと。

sudo hciconfig hci0 up

というわけでおしまい。