蓝牙服务发现协议(SDP)守护进程在哪里?
我正在尝试使用bluez在debian v8.0上注册蓝牙服务。我在https://people.csail.mit.edu/albert/bluez-intro/使用示例代码。一切顺利,直到我尝试

sdp_connect( BDADDR_ANY, BDADDR_LOCAL, 0 );

失败了。在挖掘之后,我发现SDP守护进程(SDPd)(它需要连接)不运行,事实上甚至不存在于我的系统中。
我试过的:
我已经安装了(apt-get)每一个蓝牙或bluez软件包,这些软件包看起来与远程相关,但仍然没有sdpd。
我试着用我的android手机的地址连接(使用相同的代码)。那很好,但是,当然,没用。
对这个问题做了详尽的谷歌搜索,但没有找到明确的答案。很多人都在谈论hcid、pand等,但没有明确的答案说明它们之间的关系。
我的目标:
我正在尝试在我的debian系统上注册我的服务,以便我可以从另一个蓝牙设备(特别是我的android)连接到它。服务运行得很好,没有SDP注册就找不到它。
我很满意直接连接到它,使用它的(已知)通道号,但android只能通过注册的服务uuid(即使用BluetoothDevice.createRfcommSocketToServiceRecord(uuid))连接,但我看不到连接到通道的api。
有趣的是,我可以通过频道号连接到android上的一个服务,但不能反过来。我认为SDPD可能已经过时了——所有关于它的引用都已经有好几年的历史了。

最佳答案

不确定这是否对你有帮助,但可能值得一试。我在使用Debian8Bluetooth时也遇到了一些问题;我通过启用DebianBackports和下载最新版本的blueman来解决我的问题。为此,首先卸载当前的蓝牙软件包(主要的软件包,如bluez),然后将这几行(或类似的)添加到您的/etc/apt/sources.list

deb http://ftp.debian.org/debian jessie-backports main contrib non-free
deb-src http://ftp.debian.org/debian jessie-backports main contrib non-free

然后运行apt-get update并安装backport版本。我建议使用以下代码确保配置文件已更新到最新版本:
apt-get update && DEBIAN_FRONTEND=noninteractive apt-get -qy -o DPkg::options::="--force-confnew" -t jessie-backports install blueman

重新启动你的电脑,看看它是否正在工作。注意:在debian上启用backport不会安装所有可用软件的backport版本(您也不希望如此)。只有当您特别要求backport版本(如我们上面所做的)时,才会安装它。所有其他包裹将保持原状(稳定)。更新时,您的backport包将使用最新的backport版本进行更新,而稳定包将使用最新的稳定版本进行更新。
编辑:编辑此答案是为了添加一些增强功能和信息。

10-05 23:56