C++ linux 蓝牙 sdp_connect 只有root权限才能成功

C++ linux bluetooth sdp_connect only succeed with root privilege

我正在尝试 运行 Linux
上的蓝牙服务器程序 为了让我的客户端设备找到服务器,我需要在 sdp
上注册我的服务配置文件 我的代码与 this page

上的代码基本相似

问题是我需要获得 root 权限才能使 sdp_connect 成功
当运行ning作为普通用户时,sdp_connect总是returnsNULL

因为我的代码的另一部分需要普通用户(不是 root)环境,我想知道我是否可以在没有 root 访问权限的情况下使 sdp_connect 和以下 sdp_record_register 成功

更新

刚刚找到可能的解决方案here
我正在使用 Bluez5 并且 sdp_connect 似乎已弃用 Bluez4 功能,因此我需要 运行 兼容模式下的服务
现在它可以工作了,它允许所有
访问 /var/run/sdp 只是不确定授予这种永久访问权限是否安全

您正确地注意到,已经有 8 个工具 marked as deprecated,因为它们不再维护或已被其他工具取代。

运行 --compat 似乎是一个快速解决方案,而不是长期解决方案。

支持的 API 是 Bluetooth Management API,它侧重于系统级功能。

应用程序级别通过 D-Bus 访问,分布在 https://git.kernel.org/pub/scm/bluetooth/bluez.git/tree/doc

中的多个文档中

Adapter, Device, GATT, and profile 是一些常见的,具体取决于您要执行的操作。

查看 bluetoothctl source code 可以给出一些如何将这些 API 与 C 一起使用的示例。

测试目录中有更多示例,但它们在 Python:

https://git.kernel.org/pub/scm/bluetooth/bluez.git/tree/test