携帯電話を使用して、Bluetooth Classicを介してシリアルポートプロトコル(SPP)を使用してIoTデバイスに接続したいとします。 IoTデバイスには画面もキーボードもなく、接続電話が秘密のPINを知っている限り自動的に接続を受け入れることになっています(つまり、IoTデバイスにsshを強制して毎回ペアリングを設定したくない新しい携帯電話が接続を試みる)。LinuxでBluetooth自動ペアリングを設定する
これらは私がのIoTデバイス上で、これまでに実行したコマンドです:
# Make the device discoverable:
hciconfig hci0 piscan
# Register SPP:
sdptool add --channel=22 SP
# Start rfcomm:
rfcomm -r watch /dev/rfcomm0 22
残念ながら、私は、PINを設定するにはどのような方法を見つけることができなかった、と私は接続しようとすると、ペアリングが失敗します携帯電話でさらに、デバイスは短い間隔でしか検出できません。
IoTデバイスのBluetoothスタック(最新のBluezを実行中)を設定して、特定のPINを認識している電話機と自動ペア設定するにはどうすればよいですか?また、検出期間を永遠にするにはどうすればよいですか?
は、あなたが "bluetoothctl" ユーティリティを利用することができるのbluezライブラリに付属。エージェントで認証を有効にする必要があります。あなたのシステムはヘッドレスなので、 "NoInputNoOutput"を使うことができます。これにより、認証のためのパスキーの相互作用(bluetoothctl agen NoInputNoOutput)が回避されます。しかし、すべての接続を受け入れる場合は、Dbusインターフェース "org.bluez.AgentManager1"を使用して、 "org.bluez.Agent1"で実装された "RequestAuthorization"の最小メソッドで自分のエージェントを登録してください –
bluetoothctlを起動し、エージェントNoInputNoOutput "、それはまだ接続を受け入れるかどうか私に尋ねるでしょう。あなたはそれがバッチモードで設定されている場合、それは違う振る舞いをしていると私に伝えていますか? AgentManager1の独自の実装を作成する場合、それはホイールの再構築のようです。 Bluezはエージェントマネージャーと一緒に出荷されませんでしたか? –
はい、確認を依頼します(はい/いいえ)。しかし、Agent1インターフェースを使って自分のシンプルなエージェントを書くことで、 "はい"に答えることができます。はい、BlueZはエージェント管理者にこれらの機能を「DisplayOnly」、「DisplayYesNo」、「KeyboardOnly」、「NoInputNoOutput」、「KeyboardDisplay」提供します。介入なしに受け入れる特別なケースが必要なときは、自分のAgent1で "Yes" –