问题描述
假设我运行这个命令
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)