macOS下Bleak扫描仅识别树莓派旧主机名,如何彻底重置蓝牙?
解决macOS上BleakScanner缓存蓝牙设备旧主机名的问题
彻底重置macOS蓝牙的可行方法
方法1:终端命令重置蓝牙服务与缓存
- 打开终端,执行命令停止蓝牙服务:
sudo launchctl stop com.apple.blued - 删除所有蓝牙相关的配置与缓存文件:
sudo rm -rf /Library/Preferences/com.apple.Bluetooth.plist sudo rm -rf ~/Library/Preferences/com.apple.Bluetooth.plist sudo rm -rf /Library/Caches/com.apple.Bluetooth sudo rm -rf ~/Library/Caches/com.apple.Bluetooth - 重启蓝牙服务:
sudo launchctl start com.apple.blued - 重启Mac完成重置。
方法2:蓝牙调试菜单清除缓存
- 打开「系统设置」-「蓝牙」,按住
Option键点击菜单栏的蓝牙图标。 - 在弹出的菜单中选择「调试」-「清除所有设备缓存」。
- 关闭再重新打开蓝牙,运行BleakScanner脚本测试。
方法3:修改BleakScanner扫描模式
如果系统重置无效,可强制Bleak使用主动扫描跳过缓存:
修改原脚本为:
import asyncio from bleak import BleakScanner async def discover_devices(): # 启用主动扫描模式,优先获取实时广播数据 scanner = BleakScanner(scanning_mode="active") # 延长扫描时长确保捕获最新广播 devices = await scanner.discover(timeout=10) for device in devices: if device.name: print(f"Found device: {device.name} (Address: {device.address})") if __name__ == "__main__": asyncio.run(discover_devices())
主动扫描会主动向设备发送请求获取最新信息,而非依赖系统缓存的旧数据。
问题原因说明
macOS蓝牙缓存分散在多个位置,仅删除bluetooth.plist无法清除全部缓存;另外Bleak默认的被动扫描模式会优先读取系统缓存,导致无法获取树莓派更新后的主机名。
内容的提问来源于stack exchange,提问作者Max-194
相关产品推荐
相关产品推荐

