首页 > 解决方案 > 如何在 Linux/Ubuntu 上关闭蓝牙配对?

问题描述

我已经根据https://people.csail.mit.edu/albert/bluez-intro/x502.html的示例编写了一个蓝牙客户端应用程序和一个蓝牙服务器应用程序。

服务器应用程序在 Raspberry Pi 上运行,客户端在 Ubuntu 18.04 机器上运行。

通信按预期工作。

我注意到,客户端第一次连接时,会弹出一个系统窗口(在客户端 Ubuntu 框上)询问配对请求。

我的客户端代码最终将在没有显示器的设备上运行。我无法为客户端/服务器通信进行任何用户交互。

Q1。客户端正在进行套接字调用:

s = socket(AF_BLUETOOTH, SOCK_STREAM, BTPROTO_RFCOMM);

是否有一个我可以传递的标志可以用来抑制配对?在我的客户端中,客户端和服务器都不真正关心安全连接。

Q2。当我在两台设备上运行工具“bluetoothctl”时,我看到客户端框中列出了配对设备,但在服务器设备上根本看不到任何配对设备。这怎么可能?我认为配对始终是一种双向信任关系。通信如何仍然有效?

Q3。配对是否需要简单的蓝牙客户端/服务器通信?

标签: bluetooth

解决方案


bluetoothctl客户端上时,值得检查一些事情。

除了查看设备配对状态外,还要检查服务器设备是否受信任以及是否列出了串行端口配置文件。

[bluetooth]# info B8:27:EB:22:57:E0 
Device B8:27:EB:22:57:E0 (public)
        Name: SeeMe
        Alias: SeeMe
        Class: 0x00480000
        Paired: yes
        Trusted: no
        Blocked: no
        Connected: no
        LegacyPairing: no
        UUID: Serial Port               (00001101-0000-1000-8000-00805f9b34fb)

您可以使用 bluetoothctl 信任设备trust <dev_addr>

如果您在配对时服务器正在运行,则串行端口配置文件将出现在列表中。

您还可以告诉 BlueZ 您的客户端设备没有可用于配对的输入或输出设备。在 bluetoothctl.

[bluetooth]# agent off
Agent unregistered
[bluetooth]# agent NoInputNoOutput
Agent registered
[bluetooth]# 

我希望这已经足够了,但除此之外,大多数配置文件都在服务器上使用 Profile API 注册,可以在服务器上指定 RequireAuthentication 和 RequireAuthorization 选项。不确定如何在您的设置中进行设置。 https://git.kernel.org/pub/scm/bluetooth/bluez.git/tree/doc/profile-api.txt#n85


推荐阅读