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-agent
和bluezutils.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 设置密码的主要内容,如果未能解决你的问题,请参考以下文章