我正在尝试在Linux上运行蓝牙服务器程序
为了让我的客户端设备找到服务器,我需要在sdp上注册我的服务配置文件
我的代码基本上类似于this page上的代码
问题是我需要获得root特权才能使sdp_connect
成功
以普通用户身份运行时,sdp_connect
始终返回NULL
因为我的代码的另一部分需要普通用户(而非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和profile是一些常见的选项,具体取决于您要执行的操作。
查看bluetoothctl
source code可以提供一些示例,说明如何将这些API与C结合使用。
测试目录中有更多示例,但它们在Python中:
https://git.kernel.org/pub/scm/bluetooth/bluez.git/tree/test
关于c++ - C++ Linux蓝牙sdp_connect仅以root特权成功,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63607541/