蓝牙服务发现协议(SDP)守护程序在哪里?
我尝试使用bluez在Debian V8.0上注册蓝牙服务。我在https://people.csail.mit.edu/albert/bluez-intro/使用示例代码。一切顺利,直到我尝试
sdp_connect( BDADDR_ANY, BDADDR_LOCAL, 0 );
失败了。经过一番挖掘,我发现sdp守护进程(sdpd)(它需要连接的)没有运行,实际上甚至不存在于我的系统上。
我尝试过的事情:
我的目标:
我正在尝试在我的Debian系统上注册我的服务,以便我可以从另一个蓝牙设备(特别是我的Android)连接到它。服务运行得很好,没有SDP注册就找不到它。
我很满意使用它(已知)频道号直接连接到它,但Android只能通过注册服务UUID连接(即使用BluetoothDevice.createRfcommSocketToServiceRecord(uuid)
),但是我看不到连接到频道的API 。
有趣的是,我可以通过频道号 连接Android上的服务,但不是相反。我认为sdpd可能已经过时 - 所有对它的引用都已有几年了。
答案 0 :(得分:1)
不确定这是否会对您有所帮助,但可能值得一试。我也遇到了Debian 8蓝牙的一些问题;我通过启用Debian backport并下载blueman
的最新backport版本解决了我的问题。为此,请首先卸载当前的蓝牙程序包(主要程序包,例如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版本进行更新,您的稳定软件包将使用最新的稳定版本进行更新。
编辑:编辑此答案以添加一些增强功能和信息。
答案 1 :(得分:1)
[求助]显然,sdpd早已不复存在。它的功能已被bluetoothd所包含。要使其工作,请使用--compat标志,例如
bluetoothd --compat
这应该添加到" /etc/init.d/bluetooth"。 有了这个,我可以成功连接并注册我的服务。
我在博文中发现了一个提示。为什么地球上的发行说明或其他任何内容都没有宣布这一点,我不知道。
答案 2 :(得分:1)
来自官方bluez project site:
与BlueZ相比,BlueZ 5 D-Bus API包含重大更改 4.大部分更改归因于BlueZ 5中的以下功能:
- 进行转换以使用标准的D-Bus属性和ObjectManager接口(在D-Bus规范文档中可用)
- 接口版本简介(例如org.bluez.Adapter1)。引入新版本后,我们将尝试至少继续支持 同时提供两个最新版本。
- 简化或删除每个配置文件的接口,并添加常规的org.bluez.Device1.Connect方法进行连接 个人资料。
- 删除org.bluez.Service接口(用于注册SDP记录和授权),并引入新的 org.bluez.Profile1接口
- 在设备发现期间动态创建设备对象
- AgentManager1接口介绍
- 基本路径移至“ / org / bluez”。尽管应该没什么大不同,但通过D-Bus进行交互的主要入口是 调用ObjectManager.GetManagedObjects。
简而言之,从Bluez5开始,您不能使用 sdp_connect()之类的函数。 您必须使用D-Bus 。在上面链接的页面中,您还可以找到以下内容:
BlueZ 5引入了用于实现的新通用D-Bus接口 外部配置文件。配置文件(位于单独的过程中) 实现org.bluez.Profile1接口并注册一个对象 通过BlueZ上的新ProfileManager1接口实现它 侧。在RegisterProfile方法中(在ProfileManager1接口上) 该配置文件至少需要提供该配置文件的UUID 注册。 BlueZ在内部具有通用默认值表 配置文件,因此不需要其他信息。但是,如果 配置文件希望它可以提供信息,例如完整的SDP 记录(XML编码),所需的安全级别,启用/禁用 授权,版本,功能,角色,名称等。
...以及许多宝贵的信息。
请不要使用兼容模式(我的意思是“ --compat”选项)。您应该仅将其用于测试和开发:
commit 83b21cc152186f12f8bc76b7aec3107e220d5219
Author: Marcel Holtmann <marcel@holtmann.org>
Date: Mon Dec 17 14:02:59 2012 +0100
core: Hide /var/run/sdp support behind command line option
By default /var/run/sdp support has been disabled from now on. It is not
the preferred way of handling SDP records. For testing and development
purposes it can be switched back on via --compat command line option.
最后但并非最不重要的是,这里有一些有用的链接,它们可以帮助使用Bluez5的新用户/开发人员: