bluetooth - 当您信任蓝牙设备时,存储信任的配置文件在哪里?
问题描述
假设我运行这个命令
pi@raspberrypi:~ $ bluetoothctl
Agent registered
[bluetooth]# paired-devices
[raspberrypi]# paired-devices
Device XX:XX:XX:XX:XX:XX MyDevice
[raspberrypi]# trust XX:XX:XX:XX:XX:XX
[CHG] Device XX:XX:XX:XX:XX:XX Trusted: yes
Changing XX:XX:XX:XX:XX:XX trust succeeded
存储受信任设备列表的实际文件在哪里?
解决方案
如果你做类似的事情,$ sudo grep -Ri trust /var/lib/bluetooth
你会看到一些信息。
这确实带有一个很大的警告,即这不是获取信息的预期方式。目的是使用 BlueZ API 访问它,该 API 记录在:
https://git.kernel.org/pub/scm/bluetooth/bluez.git/tree/doc
官方示例如下:
https://git.kernel.org/pub/scm/bluetooth/bluez.git/tree/test
通常这意味着使用 D-Bus 绑定。从命令行,您可以获得 BlueZ 所知道的所有内容的列表:
busctl call org.bluez / org.freedesktop.DBus.ObjectManager GetManagedObjects
在像 python 这样的语言中,它将是:
import pydbus
bus = pydbus.SystemBus()
mngr = bus.get('org.bluez', '/')
mngd_objs = mngr.GetManagedObjects()
for path in mngd_objs:
device_info = mngd_objs[path].get('org.bluez.Device1')
if device_info:
print(f'Device: {device_info.get("Address")} is Trusted={device_info.get("Trusted")}')
要将此扩展以回答以下有关如何删除任何受信任设备的问题...
这由适配器接口和RemoveDevice方法控制。我们需要知道 Adapter 对象的 D-Bus 路径。有很多方法可以找到这些信息,busctl tree org.bluez
在命令行上使用可能是最快的。该路径通常是/org/bluez/hci0
并且会预先设置您的所有设备。有了这个假设,您可以扩展上面的示例以删除受信任的设备,如下所示:
import pydbus
bus = pydbus.SystemBus()
mngr = bus.get('org.bluez', '/')
mngd_objs = mngr.GetManagedObjects()
dongle = bus.get('org.bluez', '/org/bluez/hci0')
for path in mngd_objs:
device_info = mngd_objs[path].get('org.bluez.Device1')
if device_info:
trusted = device_info.get('Trusted')
if trusted:
print(f'Removing Device: {device_info.get("Address")}')
dongle.RemoveDevice(path)
推荐阅读
- ios - UIView instanceFromNib() 函数
- c# - 当对象的一部分是更新而另一部分是创建时跨表处理 DTO
- javascript - 在有边界的 2 个国家之间找到路径
- azure - 在 Azure Blob 存储中查找特定路径下的所有 Blob
- node.js - 使 //repeat 命令正确的长度节点和 discord.js
- django - 必须先呈现响应内容,然后才能对其进行迭代。Django 休息框架
- vb.net - RDLC 报告中未加载外部图像:Windows 窗体应用程序 VB.net
- python - 使用 Python 中的特定列(字段)从 ServiceNow 中提取更改请求 CSV
- javascript - 如何从 nuxt.js 商店访问插件?
- python-3.x - python Mqtt订阅如何删除第一个会话/消息