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
我正在尝试 运行 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