我的蓝牙鼠标(雷柏 MT750)使用 BLE(Bluetooth Low Energy) 连接笔记本时,时常遇到自动重连后电脑这边认为已连接,而鼠标那边灯自动灭掉,鼠标指针无反应的问题。在网上反复搜索 bluez 相关问题找到了许多类似问题,鼠标类型也集中在罗技、ThinkPad 等 BLE 鼠标上。
偶然间发现每次重连后,如果手动用 bluetoothctl 发一个 “pair” 指令(会超时失败),就能令鼠标正常连接。给 bluez 报了一个 bug 后,我写了下面的简单脚本先绕过问题:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
#!/usr/bin/python import dbus import dbus.mainloop.glib from gi.repository import GLib adapter = "hci0" device = "xx:xx:xx:xx:xx:xx" device_path = '/org/bluez/' + adapter + "/dev_" + device.replace(":", "_") dbus.mainloop.glib.DBusGMainLoop(set_as_default=True) system_bus = dbus.SystemBus() device_object = system_bus.get_object('org.bluez', device_path) device_interface = dbus.Interface(device_object, 'org.bluez.Device1') def device_info(_arg0, event, _arg2): if event.get("Connected"): print("Mouse connected, attempt to pair...") try: device_interface.Pair() except dbus.exceptions.DBusException: pass system_bus.add_signal_receiver( device_info, dbus_interface='org.freedesktop.DBus.Properties', signal_name="PropertiesChanged", arg0='org.bluez.Device1') GLib.MainLoop().run() |
保持在后台运行即可。我自己测试了一段时间,效果非常好。
PS: bluez 上游 bugzilla 堆满了各种没有回答的错误报告,目测不是那么好修的……
欸,我藍牙鼠標連Macbook也有這個問題耶,然後很奇怪的是,我只要按一下鼠標中閒那個改靈敏度的鍵就可以動了
肥猫来加个链接啊
加好了喵~