如何在Ubuntu Linux上通过D-Bus的busctl introspect命令查看本地运行的BLE GATT服务与特征
如何在Ubuntu Linux上通过D-Bus的busctl introspect命令查看本地运行的BLE GATT服务与特征
别担心,完全可以用busctl工具查看本地注册的BLE GATT服务和特征!我会结合你用到的example-gatt-server例子,一步步给你讲清楚操作方法:
前提准备
首先确保你已经启动了example-gatt-server,并且BlueZ的D-Bus服务正常运行。可以先执行下面的命令确认BlueZ服务状态:
busctl list | grep bluez
如果能看到org.bluez相关的条目,说明服务正常。
步骤1:找到GATT服务的D-Bus对象树
BlueZ的所有BLE相关对象都挂在org.bluez总线名称下,我们先列出完整的对象树来定位你的GATT服务:
busctl tree org.bluez
运行后你会看到类似这样的结构(以hci0蓝牙适配器为例):
└─/org └─/org/bluez └─/org/bluez/hci0 └─/org/bluez/hci0/service0 ├─/org/bluez/hci0/service0/char0 ├─/org/bluez/hci0/service0/char1 └─/org/bluez/hci0/service0/char2
这里的service0就是你注册的HeartRateService,下面的char0、char1、char2分别对应三个特征:HeartRateMeasurementChrc、BodySensorLocationChrc、HeartRateControlPointChrc。
步骤2:查看GATT服务的详细信息
用busctl introspect命令查看服务对象的接口和属性,比如查看service0:
busctl introspect org.bluez /org/bluez/hci0/service0
在输出里你会找到org.bluez.GattService1接口,里面包含服务的核心属性:
UUID:就是你提到的0000180d-0000-1000-8000-00805f9b34fbPrimary:标识该服务是否为主要服务- 还有其他相关的方法和信号
如果你只想快速获取服务的UUID,可以用get-property命令:
busctl get-property org.bluez /org/bluez/hci0/service0 org.bluez.GattService1 UUID
步骤3:查看GATT特征的详细信息
同样的,用introspect命令查看单个特征,比如查看HeartRateMeasurementChrc对应的char0:
busctl introspect org.bluez /org/bluez/hci0/service0/char0
输出里会显示org.bluez.GattCharacteristic1接口,包含特征的关键信息:
UUID:对应00002a37-0000-1000-8000-00805f9b34fbFlags:该特征的权限(比如可读、可写、通知等)Properties:特征的属性配置- 还有读写、通知相关的方法
同样,快速获取特征UUID的命令:
busctl get-property org.bluez /org/bluez/hci0/service0/char0 org.bluez.GattCharacteristic1 UUID
注意事项
- 部分D-Bus对象需要root权限才能访问,如果执行命令时提示权限不足,加上
sudo即可,比如sudo busctl introspect ... - 不同BlueZ版本的对象路径可能略有差异,但核心结构都是
/org/bluez/<适配器名>/serviceN和对应的特征子路径 - 如果找不到服务对象,先确认
example-gatt-server是否正常运行,有没有报错
备注:内容来源于stack exchange,提问作者raj123
相关产品推荐
相关产品推荐

