在Linux上列出附近/可发现的蓝牙设备,包括已经配对的Python

我试图列出所有附近/可发现的蓝牙设备, 包括那些已经配对的 ,在Linux上使用Python。

我知道如何使用地址为设备列出服务,并且可以成功连接:

services = bluetooth.find_service(address='...') 

阅读PyBluez文档我希望任何附近的设备出现,如果我没有指定任何标准:

如果没有指定标准,则返回检测到的所有附近服务的列表。“

我现在需要的“唯一”的东西是能够列出已经配对的设备,不pipe它们是否在附近,在附近或不在附近。 很像我在“所有设置” – >“Ubuntu / Unity中的蓝牙”中获得的列表。

顺便说一句,下面列出我的机器上已经配对的设备,即使他们在/附近。 可能是因为一旦配对就无法发现了:

 import bluetooth for d in bluetooth.discover_devices(flush_cache=True): print d 

有任何想法吗 …?

编辑:我发现并安装了“蓝色工具”。

 bt-device --list 

…给我我需要的信息,即添加设备的地址。

我检查了C源代码,发现这可能不像我想的那样容易。

仍然不知道如何在Python中做到这一点…

编辑:我认为DBUS可能是我应该读的。 似乎很复杂。 如果有人有一些代码分享我会很高兴。 🙂

Solutions Collecting From Web of "在Linux上列出附近/可发现的蓝牙设备,包括已经配对的Python"

我自己设法解决了这个问题。 以下片段列出了我的默认蓝牙适配器上所有配对设备的地址:

 import dbus bus = dbus.SystemBus() manager = dbus.Interface(bus.get_object('org.bluez', '/'), 'org.bluez.Manager') adapterPath = manager.DefaultAdapter() adapter = dbus.Interface(bus.get_object('org.bluez', adapterPath), 'org.bluez.Adapter') for devicePath in adapter.ListDevices(): device = dbus.Interface(bus.get_object('org.bluez', devicePath),'org.bluez.Device') deviceProperties = device.GetProperties() print deviceProperties["Address"] 

你总是可以执行它作为一个shell命令,并阅读它返回的内容:

 import subprocess as sp p = sp.Popen(["bt-device", "--list"], stdin=sp.PIPE, stdout=sp.PIPE, close_fds=True) (stdout, stdin) = (p.stdout, p.stdin) data = stdout.readlines() 

现在data将包括所有输出线的列表,您可以随意格式化和播放。