【问题标题】:How do I get bluez 5 to accept a fixed pin?如何让 bluez 5 接受固定密码?
【发布时间】:2014-11-15 19:50:58
【问题描述】:

我找不到有关如何执行此操作的任何信息。我正在用 C 语言编写 Intel Edison 和用 Java 编写 Android 手机。我想从 Android 手机配对 Edison。我认为简单的配对(sspmode 1)会起作用,但我在电话上收到一条错误消息,提示错误的引脚没有请求引脚。使用 sspmode 0 时,我被要求输入密码,但不知道它是什么,因为它是在我的 NoInputNoOutput Edison 中随机生成的。我们有其他一切工作。如果我们手动从 Edison 配对,其余代码可以连接并从 Edison 到手机来回发送蓝牙消息。但是从爱迪生与任何路过的随机手机配对是不可接受的。我认为它被称为 Bluejacking。

我看过一些关于使用 simple-agent 的帖子,但坦率地说,我的理解是 BlueZ 安全性在 4 到 5 之间发生了很大变化,以至于我看到的大多数都不起作用。我还看到从 4 到 5 的切换破坏了很多系统,所以我并不感到孤单。我会尝试它,但爱迪生上没有 simple-agent,我还没有找到安装它的程序。而且我不知道我能找到的一点点是否适用于第 5 版,因为它都引用了第 4 版,我感到有点失落。

谁能为我指出适用于 BlueZ 5 的正确方向?我在 5.18。

【问题讨论】:

    标签: c linux bluetooth intel-edison


    【解决方案1】:

    本文最后一篇文章中提出的解决方案确实有效 http://www.linuxquestions.org/questions/linux-wireless-networking-41/setting-up-bluez-with-a-passkey-pin-to-be-used-as-headset-for-iphone-816003/

    编辑simple-agent,把它放在某个地方,让它可执行,把丢失的文件放在同一个目录下并运行它。它必须保持运行才能处于活动状态。

    在我的例子中,丢失的文件是 bluezutils.py。

    先运行 hciconfig hci0 sspmode 0

    【讨论】:

      【解决方案2】:

      请使用 Bluz5.30。 最初使用 Bluez 5 启动蓝牙真的很困难。Bluez 4 似乎没问题。我在 LFS 版本上尝试了不同版本的 Bluez 5。即使到 Bluez 5.28 也不能令人满意。现在是 Bluz5.30,有了这个,LFS 文档和很多线索,我可以管理。我觉得 Bluez 是记录最差的对用户不友好的软件之一。我也觉得它非常有问题。它可以挂起强制硬启动系统的机器。我已经看到蓝牙强制 Android 手机也重新启动。因此,获取最新版本的软件很重要。但要使蓝牙扬声器正常工作,需要 Pulseaudio。最好获取最新版本;这里 LFS 文档也很好。 所以使用bluetoothctl连接音箱的过程如下;

      >> power on
      >> scan on
      >> pairable on
      >> pair <device>
      
      >> agent on
      >> default-agent
      

      现在是实际的声音。这里 pactl 和 pacmd 很有用。 paplay -d 可以测试设备。 使用带有命令“list-sinks”的 pacmd 可以显示设备。

      pacmd ->list-modules 可以显示加载的模块。

      如何在连接时自动更改音频输出到蓝牙扬声器?

      对我来说,在一台机器上运行良好,但在另一台机器上使用相同的 LFS 却无法正常运行。最后被认定为 缺少带有 arg do_routing=1 的模块 module-device-manager。

      加载后一切正常。此特定模块未显示在脉冲配置中。所以我必须找到并加载, pacmd

      加载模块模块设备管理器 do_routing=1 可以在 /etc/pulse 中的默认配置文件中添加一行。或者也可以在用户配置文件中添加一行。现在让新的蓝牙扬声器用于播放声音。对于该问题,使用 pacmd 命令“move-sink-input”。您可以在我发出命令“list-sinks”时找到接收器名称。 如果您的扬声器没有连接,可能是它已经连接到其他地方。如果不是这样,请删除设备;扫描;一对;并使用 bluetoothctl 连接。我担心如何使用蓝牙(Bluez5)进行文件传输。实际上,LFS 文档或 NET 中的信息很少。总的来说,这对 Bluez 来说是非常真实和不幸的。他们不提供任何真实的用户文档,或者网络中没有任何可用的文档。所以步骤如下: 您需要安装 OBEX 库。然后您构建 Bluez5(如果尚未完成)。它将安装 obexd。安装后,您可以在 $PREFIX/libexec/bluetooth/obexd 中找到 obexd。这也是您可以找到 bluetoothd 的地方。通常在 /usr/sbin 中为 bluetoothd 创建一个链接。 obexd 也可以建立一个类似的链接。启动 bluetoothd 和 obexd 后,您可以在 bluetoothctl->show 中找到对象传输配置文件。如果需要手机将对象推送到计算机,则需要使用选项“-a”和“-r”运行 obexd。如果没有给出“-a”,手机将无法发送文件。现在如何将文件从计算机推送到手机。为此你需要 obexctl,我不认为它是一个成品工具,并且在我们构建 Bluez 5 时不会安装它。我在源代码树中看到它并复制到 /usr/bin/。它应该用于连接电话,当连接建立后,您可以“发送”,您必须接受电话中的请求。

      将 obexd 作为守护程序启动是一个问题。当在文本终端(init 3)上尝试 obexd 时,它无法启动,因为它需要一个 dbus 会话,而后者又需要 X 显示。这意味着在开始 obexd 之前需要登录一个 X 会话。如果您在构建 DBUS(--without-x)时禁用 X,则窗口管理器将不起作用。但是有'dus-run-session [args]'的解决方案。这意味着您可以在系统启动时启动服务 obexd(如蓝牙)。因此,只需打开计算机(如果之前已完成配对、信任等),就可以将文件从手机推送到计算机。

      >> connect <device>
      

      第二次以后连接就好了。或许您可以信任该设备。

      >> trust <device>
      

      【讨论】:

        猜你喜欢
        • 2019-01-02
        • 1970-01-01
        • 2023-04-09
        • 1970-01-01
        • 2018-03-22
        • 2015-05-08
        • 2014-01-30
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多