当您信任蓝牙设备时,存储信任的配置文件在哪里



假设我运行这个命令

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的文件访问:

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)

最新更新