ゲームパッドがボンディング後に切断を繰り返し、PIN or Key Missing (0x06) が出る
エラー
Encryption Change: PIN or Key Missing (0x06)
症状
パッドのペアリング自体は成功するのに、その直後から切断と再接続を繰り返します。dmesg や Bluetooth のログには Encryption Change: PIN or Key Missing (0x06) が何度も現れ、入力デバイスがいつまで経っても作られません。つまり padd はスティックのデータを一度も受け取れません。
見た目にはパッドの故障か、ボードの Bluetooth チップの不良にしか見えません。
原因
これは通常、ハードウェア故障ではなく設定のやりすぎです。
Microduck には、aic8800 無線チップのボンディング問題に対して 2 段階の対処があります。
| オプション | 何をするか | 対象 |
|---|---|---|
--pause-btd-on-pair |
ペアリング中に btd を止め、アダプタを電源から入れ直す |
影響を受けるボードの大半 |
--weird-ble |
上記の一時停止に加えて Privacy = device を設定する |
一時停止だけでは足りない少数のボード |
公式ドキュメントはこのエラーについて明確に述べています。
一時停止だけで足りるボードに
Privacy = deviceを設定すると、何もしない場合より悪い失敗が起きます。パッドはボンディングされたあと切断を繰り返してEncryption Change: PIN or Key Missing (0x06)を出し、入力デバイスは決して作られません。
つまり、このエラーが出ているということは、一時停止だけで足りるボードに --weird-ble を使ってしまったということです。
対処
--weird-ble を外し、--pause-btd-on-pair で provision をやり直します。
./scripts/provision-board.sh --pause-btd-on-pair [email protected]
これは /var/lib/robot/weird-ble にマーカーファイルを 1 つ残すだけで、他は何も変更しません。このマーカーがあるボードでは、sudo robotctl pad pair が残りの手順——btd の停止、アダプタの電源入れ直し、ペアリング、btd の再起動——を自分で進め、何をしているかを都度表示します。
2 つの設定の間でボードを移動させるためのコマンド一覧は、公式の install-dev.md にあります。
切り分けの順番
パッドがボンディングできないときは、軽い対処から順に試してください。
- まずパッドが本当にペアリングモードに入っているか確認します。Xbox パッドは上部の Sync ボタンを押してランプが速く点滅する状態にします。ゆっくりした点滅は電源が入っているだけです。
- パッドのボンディング枠が埋まっていないか確認します。Xbox パッドはホストとのボンディングを 1 つしか保持できず、一度失敗したペアリングによって、このボードにはもう存在しない鍵を抱えたままになります。ノート PC にペアリングしてからそちらで削除すると、この枠を消費して解放できます。ペアリングモードに入れるだけでは解放されません。
--pause-btd-on-pairを試します。- 一時停止でも解決しない場合にだけ
--weird-bleに進みます。
補足
実際にこの問題に当たって再現した場合は、ボードのロットと BlueZ のバージョンを補足していただけると助かります。最も説得力があるのは、
pad-stack-report.sh
の --fingerprint 出力を 2 枚のボードで比較したものです。