【问题标题】:How to setup Bluez 5 to ask pin code during pairing如何设置 Bluez 5 在配对期间询问密码
【发布时间】:2019-01-02 13:01:30
【问题描述】:

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

【问题讨论】:

    标签: bluetooth raspberry-pi3 bluez pairing


    【解决方案1】:

    我们在一个项目中遇到了同样的问题,我转向了 LE 设备,因为 Apple 设备只能出于“安全”原因连接到 LE 设备。

    我对此没有太多参考,但如果这可以帮助您进行研究。

    【讨论】:

      【解决方案2】:

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

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

      您需要的是“DisplayOnly”功能,以根据您设备的 SSP 支持指示 BlueZ 调用“DisplayPinCode”或“DisplayPasskey”。

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

      这里的 Display Pin /Passkey 只是命名约定或提示代理开发人员编写向导/UI 或任何形式的显示操作。但是你可以完全忽略显示操作,回复静态/常量6位密钥进行配对。

      通常,当设备(iPhone/Android 移动设备/任何支持蓝牙的设备)尝试配对从设备端调用“RequestPasskey”或“RequestPinCode”时,Bluez(在 rasperry pi 中)调用此代理 API。

      【讨论】:

      • 我按照您的建议将代理功能更改为 DisplayOnly,但从 Android 设备配对时,我注意到只调用了 RequestConfirmation。我正在使用 Android createBond 方法
      • @Cristiano:对不起。 RequestConfirmation 也在展示中。所以Android可能会默认使用它。你能试试“KeyboardOnly”吗,这会让Android在UI中输入键。
      • 已解决,我错过了树莓派上的 hciconfig hci0 sspmode 0。我能够在 RequestPin 中返回一个固定字符串并插入以与之配对。谢谢!但是,我在 iOS 设备上看不到树莓,你知道吗?
      • @Cristiano 您是否已经设置了“可发现”属性?
      • 是的,这只是一个 iOS 问题。我可以从 Android、Linux 和 Windows 中看到 Raspberry
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-02-08
      • 1970-01-01
      • 2019-02-08
      • 1970-01-01
      • 2012-05-22
      • 2016-01-05
      • 1970-01-01
      相关资源
      最近更新 更多