如何修改蓝牙Shell脚本实现连接断开后自动快速重连指定MAC设备
蓝牙自动重连Shell脚本优化方案
针对原有脚本重连不及时、未处理适配器意外关闭、设备未被扫描到就发起连接导致失败的问题,优化后的脚本可实现秒级感知断连、自动拉起蓝牙适配器、自动扫描设备后重试连接,适配设备偶发开关机的场景。
优化点如下:
- 修复状态命令输出为空时的脚本逻辑报错问题,给所有状态判断增加默认 fallback 值
- 新增蓝牙适配器自动开启逻辑,适配器意外关闭时自动执行上电操作
- 新增连接失败后的主动扫描逻辑,避免设备重启后蓝牙控制器未发现设备导致连接失效
- 调整等待时长逻辑,空闲检测间隔1秒,连接操作后仅等待2秒即可再次检测,大幅提升重连速度
#!/bin/bash # 替换为目标蓝牙设备的MAC地址 MAC="XX:XX:XX:XX:XX:XX" # 获取蓝牙适配器上电状态 powered() { local status=$(echo "show" | bluetoothctl | grep "Powered" | cut -d " " -f 2) echo "${status:-no}" } # 获取目标设备连接状态 connected() { local status=$(echo "info ${MAC}" | bluetoothctl | grep "Connected" | cut -d " " -f 2) echo "${status:-no}" } while true do sleep 1 # 先判断蓝牙适配器是否上电 if [ $(powered) != "yes" ]; then echo "power on" | bluetoothctl sleep 2 continue fi # 设备未连接时发起连接 if [ $(connected) = "no" ]; then # 先扫描3秒确保能发现设备 echo "scan on" | bluetoothctl sleep 3 echo "connect ${MAC}" | bluetoothctl echo "scan off" | bluetoothctl sleep 2 fi done
使用方法
- 替换脚本中
MAC变量的值为你的目标蓝牙设备实际MAC地址 - 给脚本添加执行权限:
chmod +x auto_connect_bluetooth.sh - 直接执行脚本即可挂起运行,也可以配置为systemd系统服务实现开机自动运行,断连自动恢复
内容的提问来源于stack exchange,提问作者Zakaria Halloumi
相关产品推荐
相关产品推荐

