如何设置 Bluez 5 以在配对期间询问密码

How to setup Bluez 5 to ask pin code during pairing

我使用 QDbus 实现了 org.bluez.Agent1 接口,我想设置一个固定的 pin(我将提供给用户)以验证所有配对请求并在 pin 时拒绝它们是错的。 agent capabilities 应该是 "NoInputNoOutput" 因为项目将部署在没有键盘和显示器的 RaspberryPi 3 上。有办法解决这个问题吗?谢谢

您不应将功能初始化为 "NoInputOutput" 以进行固定密钥配对。 NoInputOutput 表示没有显示,并且此设备没有 keyboard/UI 可能。在向 BlueZ 注册时为您的代理提及此功能意味着指示 BlueZ (bluetoothd) 不要调用任何代理 API 进行身份验证。

这通常适用于无需任何手动干预的自动配对。你可以看到这个 sample code,它使用 NoInputOutput 功能无需任何干预即可连接设备。

根据您设备的 SSP 支持,您需要的是“DisplayOnly" capability to instruct BlueZ to call "DisplayPinCode" or "DisplayPasskey”。

您可以在代理中实施 DisplayPinCode/DisplayPasskey 以始终回复 常量 PIN。因此尝试连接的蓝牙设备可以使用相同的固定 PIN 码进行配对。

这里的Display Pin /Passkey只是命名约定或提示给Agent开发者编写wizard/UI或任何形式的显示操作。但是你可以完全忽略显示操作,回复static/constant 6位配对密钥

通常,当设备(iPhone/Android mobile/any 支持蓝牙的设备)尝试配对调用“RequestPasskey" or "RequestPinCode”时,Bluez(在树莓派中)调用此代理 API从设备端。

我们在一个项目中遇到了同样的问题,我转向了 LE 设备,因为苹果设备由于 "safety" 原因只能连接到 LE 设备。

我没有那么多参考资料,但如果这对您的研究有帮助的话。