Bluetoothctl 设置密码

Posted

技术标签:

【中文标题】Bluetoothctl 设置密码【英文标题】:Bluetoothctl set passkey 【发布时间】:2016-04-15 01:21:21 【问题描述】:

我有一个运行 Raspbian 内核 4.1.15 和 Bluez 版本 5.23 的 Raspberry Pi 2。

我希望能够将设备(如 android 手机)连接到 rapsberry,它应该接受连接而无需用户交互。

使用 bluetoothct 我可以使设备可被发现,将其与另一台设备配对,但我还没有找到像使用 bluetooth-agent 那样设置 pin 的方法

bluetooth-agent PIN

Bluetooth-agent 在我的系统上不再可用,有没有办法使用 bluetoothctl 来做到这一点?

【问题讨论】:

为什么要设置 PIN?引脚应该在配对过程中自动生成。所以你可以开始bluetoothctl。然后输入agent on。然后从任一端启动配对。该引脚应由两端自动生成/协商(根据蓝牙规范)。如果需要密码,bluetoothctl 将提供正确的密码提示。如果您出于某种原因确实需要固定销,请说明您需要它的原因,如果这样做有意义,我可能会提供。 @kaylum 感谢您的回复。我需要设置一个 PIN,因为我无法在覆盆子上输入一个 PIN,因为没有人连接到它。我想从手机或其他输入固定引脚的设备启动配对。所以我需要在树莓上设置大头针。 这由代理 IO 功能处理(同样由蓝牙规范定义)。所以在你的情况下,你应该运行agent NoInputNoOutput。这将导致不需要用户交互的“Just Works”配对。所以我仍然认为您不需要固定引脚(固定引脚用于传统配对,并且不如新配对模式安全)。 @kaylum 谢谢,我会试试的。 如果您解决了您的问题,请不要更改您的标题或问题;这不会在 UI 中将问题标记为已解决。 Edit您的帖子从问题中删除答案并将您的解决方案放在下面标题为“您的答案”的字段中。大约一天后,您可以单击答案左侧的复选标记;这将在 UI 中将您的问题标记为已解决,并且您还将获得一个闪亮的新参与徽章。 【参考方案1】:

感谢 kaylum 的帮助:

$bluetoothctl
[bluetooth]# power on
Changing power on succeeded
[bluetooth]# discoverable on
Changing discoverable on succeeded
[bluetooth]# pairable on
Changing pairable on succeeded
[bluetooth]# agent NoInputNoOutput
Agent registered
[bluetooth]# default-agent 
Default agent request successful

然后我通过手机将覆盆子与手机配对。

[NEW] Device XX:XX:XX:XX:XX:XX nameofthedevice
[CHG] Device XX:XX:XX:XX:XX:XX UUIDS:
      --UUIDS--
[CHG] Device XX:XX:XX:XX:XX:XX Paired: yes

【讨论】:

我也有同样的问题。我想在覆盆子端设置一个固定的密码以避免“匿名”连接。这个答案并没有指出这一点,不是吗? 我做了完全相同的步骤,但我所有的手机仍然要求我输入 PIN,然后 bluetoothctl 仍然要求输入相同的 PIN?!代理 NoInputNoOutput 似乎不起作用还是我遗漏了什么?【参考方案2】:

我也遇到了同样的问题。如果您在agent 之后按两次 Tab,您应该会看到可用代理列表; KeyboardOnly 无需通知即可正常工作:

[bluetooth]# agent on          # accidentally used wrong agent
Agent registered
[bluetooth]# agent 
DisplayOnly      DisplayYesNo     KeyboardDisplay  KeyboardOnly     NoInputNoOutput  off              on               
[bluetooth]# agent KeyboardOnly 
Agent is already registered    # can't use two agents at one
[bluetooth]# agent off         # unregister agent
Agent unregistered
[bluetooth]# agent KeyboardOnly   # register proper agent
Agent registered
[bluetooth]# pair XX:XX:XX:04:F5:7C 
Attempting to pair with XX:XX:XX:04:F5:7C 
[CHG] Device XX:XX:XX:04:F5:7C Connected: yes
Request passkey
[agent] Enter passkey (number in 0-999999): 722504
[MoarBacon]# pair XX:XX:XX:04:F5:7C 
Attempting to pair with XX:XX:XX:04:F5:7C 
[CHG] Device XX:XX:XX:04:F5:7C Paired: yes
Pairing successful

【讨论】:

好收获。 +1 为仅键盘代理。【参考方案3】:

首先您必须配置 sspmode 0,用于 pin 请求: hciconfig hci0 sspmode 0

并使用 bt-agent 应用程序(您也可以作为守护程序运行):

bt-agent -c NoInputNoOutput -p /root/bluethooth.cfg

编辑文件配置,可以输入mac地址和pin: 例如:

XX:XX:XX:XX:XX:XX 1234

或者,如果您希望所有设备的 pin 码具有相同的 pin 码,例如 1234,请按如下方式编辑文件: * 1234

这对我有用!

【讨论】:

我试过了,但它似乎只是忽略了 pinfile 并允许在没有 pin 的情况下配对。【参考方案4】:

我已经安装了 bluez-5.43。这是如何在树莓派上自动化配对过程。

(1) 首先测试这样一行以确保蓝牙代理正常工作:

 bluez-5.43/test/simple-agent -c NoInputNoOutput

(2) 要自动配对,请将这段代码放入一个 shell 文件(我命名为 pairbot.sh):

if [ "$(id -un)" != "pi" ]; then
        exec sudo -u pi $0 "$@"
    fi

    export XAUTHORITY=/home/pi/.Xauthority
    export DISPLAY=:0

     lxterminal --command="/bin/bash -c '/home/pi/bluez-5.43/test/simple-agent -c NoInputNoOutput &; read'"

(3) 进入crontab:

sudo cronetab -e

(4) 在底部添加:

@reboot sleep 20 &&  /home/pi/pairbot.sh > /home/pi/blelog.txt 2>&1

(5) 重启并测试是否正常。

我对面临相同问题的其他人的建议是查看您的 bluez 文件夹(或者如果您没有安装最新版本的 bluez)并搜索“简单代理”的“test”文件夹找到文件路径。从这里,您应该能够构建如上所示的命令行 (1)。希望它也对你有用。

【讨论】:

【参考方案5】:

https://github.com/nokia/rcm-bluez/blob/master/client/bluez-5.43/test/simple-agent

https://raw.githubusercontent.com/pauloborges/bluez/master/test/bluezutils.py

@Ion Flare 的想法非常适合为树莓派设置自动配对蓝牙。在我的回答中,我得到了一个错误import bluezutils,所以为了绕过它,我只想说下载上面的文件simple-agentbluezutils.py。放入相同的位置,对我来说是/home/pi。只需运行提到的命令@Ion Flare python simple-agent -c NoInputNoOutput

在我的用例中,我更改了一个简单代理文件以接受每个连接和服务,以使事情变得简单。

【讨论】:

【参考方案6】:

这对我有用:

bluetoothctl
agent off
power on
discoverable on
pairable on
agent NoInputNoOutput
default-agent
pair
exit

【讨论】:

以上是关于Bluetoothctl 设置密码的主要内容,如果未能解决你的问题,请参考以下文章

MySQL 设置简单密码

安卓手机怎么设置锁屏密码

安卓如何设置超长密码

安卓手机怎么设置锁屏密码?

安卓手机怎么设置锁屏密码?

git 永久性设置密码,解决git sourceTree等需要频繁输入密码的问题