c++ - C++ Linux蓝牙sdp_connect仅以root特权成功

标签 c++ linux bluetooth sdp

我正在尝试在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中的多个文档中
AdapterDeviceGATTprofile是一些常见的选项,具体取决于您要执行的操作。
查看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/

相关文章:

iOS 将 WIFI 设置传递给蓝牙(BLE)设备?

c++ - 使用可变参数函数的初始化列表

c++ - 如何避免转换运算符调用复制构造函数?

linux - 列出内核模块

linux - com.sun.tools.attach.AttachNotSupportedException : Unable to open socket file: target process not responding or HotSpot VM not loaded

Qt 如何在 Linux 中以编程方式正确连接到手机(蓝牙 A2DP、AVRCP、HSP、HFP)

Android蓝牙连接检查mac地址

c++ - 不静态链接到 VC CRT 的原因有哪些?

c++ - 使用 C++ 和 WinAPI 在 Windows 8 上登录用户名或电子邮件

c - recv() 阻止第二次调用