本文目录导读:

- 环境准备与核心工具
- Linux 批量配对脚本(使用
bluetoothctl+expect) - macOS 批量配对(使用
blueutil) - Windows 批量配对(PowerShell + 第三方库)
- 批量管理高级技巧
- 常见问题与解决
- 完整示例仓库推荐
要用脚本批量管理蓝牙配对,通常需要依赖操作系统的蓝牙管理工具(如 Linux 的 bluetoothctl、blueutil、Windows 的 BluetoothSetLocalServiceInfo 或 PowerShell 模块),以下是针对常见场景的解决方案。
环境准备与核心工具
Linux(推荐 bluetoothctl + expect / bluetoothctl 非交互模式)
# 安装蓝牙工具 sudo apt install bluez bluez-tools # Debian/Ubuntu sudo yum install bluez # CentOS/RHEL # 检查蓝牙适配器状态 hciconfig hci0 up
macOS(推荐 blueutil)
brew install blueutil
Windows(PowerShell + Get-Bluetooth* Cmdlet)
需要安装 Bluetooth PowerShell 模块(Windows 10/11 自带部分功能,但批量操作受限)。
Linux 批量配对脚本(使用 bluetoothctl + expect)
示例:从文件读取 MAC 列表并批量配对
#!/bin/bash
# 配置文件:每行一个 MAC 地址
MAC_LIST="devices.txt"
PAIR_TIMEOUT=15
# 启动蓝牙适配器
echo "power on" | bluetoothctl
sleep 2
# 设置可发现和可配对
echo "discoverable on" | bluetoothctl
echo "pairable on" | bluetoothctl
while read -r mac; do
echo "处理设备: $mac"
# 移除已有配对(避免冲突)
echo "remove $mac" | bluetoothctl
sleep 2
# 开始配对(非交互模式可能失败,建议用 expect)
expect <<EOF
spawn bluetoothctl
expect "#"
send "pair $mac\r"
expect {
"Pairing successful" { send_user "配对成功\n"; exit 0 }
"Failed to pair" { send_user "配对失败: $mac\n"; exit 1 }
timeout { send_user "超时"; exit 2 }
}
send "trust $mac\r"
send "connect $mac\r"
expect "#"
EOF
sleep 3
done < "$MAC_LIST"
更稳健的 bluetoothctl 包装函数
# 使用 Python 调用 bluetoothctl(需要 pexpect)
import pexpect
import sys
def pair_device(mac):
child = pexpect.spawn('bluetoothctl')
child.expect('#')
child.sendline(f'pair {mac}')
result = child.expect(['Pairing successful', 'Failed to pair', pexpect.TIMEOUT], timeout=15)
if result == 0:
child.sendline(f'trust {mac}')
child.sendline(f'connect {mac}')
return True
elif result == 1:
return False
else:
return None
macOS 批量配对(使用 blueutil)
#!/bin/bash
# 从文件读取设备 MAC 地址
while read -r mac; do
echo "配对设备: $mac"
# 连接(blueutil 会自动尝试配对)
blueutil --connect "$mac"
# 检查状态
if [ $? -eq 0 ]; then
echo "成功配对并连接 $mac"
else
echo "配对失败: $mac"
fi
sleep 2
done < devices.txt
# 列出已配对设备
blueutil --paired
Windows 批量配对(PowerShell + 第三方库)
Windows 原生 PowerShell 蓝牙支持有限,需要使用 BluetoothLE 模块或 WinRT API。
示例:使用 Get-BluetoothDevice(Windows 10 1809+)
# 导入蓝牙模块(如果可用)
Import-Module "C:\Program Files\WindowsPowerShell\Modules\Bluetooth\1.0.0\Bluetooth.psd1"
$devices = @(
"AA:BB:CC:DD:EE:FF",
"11:22:33:44:55:66"
)
foreach ($mac in $devices) {
$device = Get-BluetoothDevice -MacAddress $mac
if (-not $device) {
Write-Host "未找到设备: $mac"
continue
}
# 配对(需要用户交互或提前信任)
$device.Pair()
if ($device.PairingStatus -eq "Paired") {
Write-Host "配对成功: $mac"
} else {
Write-Host "配对失败: $mac"
}
}
使用 bluetoothctl for Windows(通过 WSL 或 Cygwin)
不推荐,因为 Windows 蓝牙栈与 Linux 不兼容。
批量管理高级技巧
1 从 CSV/JSON 文件读取设备信息
# 使用 jq 解析 JSON
cat devices.json | jq -r '.[].mac' | while read mac; do
echo "配对: $mac"
done
2 自动处理配对请求
蓝牙配对需要用户确认,可以预先设置无确认配对:
# Linux 编辑 /etc/bluetooth/main.conf [Policy] AutoEnable=true # 设置 Agent 为 NoInputNoOutput(需重启 bluetooth 服务)
3 错误重试与日志记录
#!/bin/bash
LOGFILE="bluetooth_pair.log"
MAX_RETRIES=3
pair_with_retry() {
local mac=$1
local retries=0
while [ $retries -lt $MAX_RETRIES ]; do
if bluetoothctl pair "$mac"; then
echo "$(date) - 成功: $mac" >> "$LOGFILE"
return 0
fi
((retries++))
sleep 2
done
echo "$(date) - 失败: $mac (重试 $MAX_RETRIES 次)" >> "$LOGFILE"
return 1
}
常见问题与解决
| 问题 | 解决方案 |
|---|---|
| 蓝牙未启用 | sudo hciconfig hci0 up 或 sudo systemctl start bluetooth |
| 配对需要输入 PIN | 使用 bluetoothctl agent NoInputNoOutput 设置无交互模式 |
| 设备不在范围内 | 确保设备可发现,并增加扫描步骤 bluetoothctl scan on |
| Windows 设备列表为空 | 以管理员身份运行 PowerShell,并确保蓝牙已开启 |
完整示例仓库推荐
- Linux: bluetoothctl-bulk-pair(示例)
- macOS:
blueutil官方示例 - Windows: Bluetooth-PowerShell
关键点:
- 批量管理需要非交互工具,Linux 的
bluetoothctl+expect是最灵活的方案。 - macOS 用
blueutil最方便。 - Windows 蓝牙脚本能力弱,建议用 WSL 或专用硬件。
- 记得先关闭蓝牙安全策略(如 PIN 码验证),否则批量操作会被卡住。
如果需要针对特定设备(如耳机、传感器)的配对,请提供设备型号,我可以给出更具体的配置。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播