蓝牙操作手册

6 分钟
本页目录

先分清控制器、配对关系、连接和应用 profile。配对成功不代表已经连接,连接成功也不代表音频流已路由到耳机。本篇使用 BlueZ bluetoothctl;MAC 地址为占位示例。

当前任务入口
找不到设备控制器与扫描
配对后仍不可用配对、信任、连接
断连或耳机无声按层排查

控制器先可用,设备再进入发现模式

服务、无线开关、控制器分别确认

# 确认 BlueZ 守护进程的状态
systemctl status bluetooth.service --no-pager
# 查看蓝牙的软硬件阻止状态
rfkill list bluetooth

Hard blocked 要处理物理开关/固件策略;Soft blocked 才可能由软件解除。

# 列出本机控制器及其地址
bluetoothctl list

不要把控制器地址当成耳机地址;没有控制器时先看驱动、USB、固件日志。

# 查看默认控制器的电源与能力
bluetoothctl show
# 列出已知或已发现的远端设备
bluetoothctl devices

列表不是实时在线列表,也不是单纯配对列表;用 info 查看单个状态。

# 读取控制器初始化与连接错误
journalctl -u bluetooth.service -b -n 100 --no-pager
# 只有软阻止且需要启用蓝牙时解除
sudo rfkill unblock bluetooth

这是条件操作,不是每次检查都执行;之后重新查询 rfkill,硬阻止仍需外部处理。

list 是控制器,devices 是已发现/已知设备,不等同“已配对”。show 中 Powered 与 rfkill 的 Soft/Hard blocked 分开看;软件 unblock 不能解除硬件开关。多适配器在 bluetoothctl 中 select 对应地址。扫描前让目标设备进入厂商规定的配对模式,且确认未被另一台主机占用。

三个状态分别确认

状态含义不能证明
Paired双方保存了配对凭据当前在线或音频可用
Trusted本机允许该设备按策略使用服务永远自动重连
Connected当前连接已建立所有 profile 或应用路由都正常

下面输入到交互式 bluetoothctl,不是 shell 脚本。agent 处理确认/PIN;核对两端显示的数字。pair 在某些版本中也会尝试 trust/connect,仍以 info 的实际状态为准。

进入一个会话,选择控制器

# 从 shell 打开 BlueZ 交互会话
bluetoothctl

以下 text 代码块输入到 bluetoothctl 提示符;不要再加 bluetoothctl 前缀。多控制器时先执行下面的 select,替换为 list 得到的控制器地址,单控制器可跳过。选择保留在该进程内,不能在多个独立 shell 命令之间假设继承。

select 11:22:33:44:55:66

先打开控制器电源,再用 show 确认 Powered: yes;失败先回到 rfkill 和控制器日志。

power on
show

注册确认代理并扫描

在这个有人值守的会话注册 agent,随后保持会话打开以回答配对确认。

agent on
default-agent

让目标设备进入配对模式后开始扫描;等待出现与目标名称、地址相符的记录,再继续。

scan on

配对后检查,再决定信任与连接

AA:BB:CC:DD:EE:FF 从扫描结果取得,不能使用上面的控制器地址。输入 pair 后按提示核对两端数字,等待成功或明确失败,不提前粘贴后续操作。

pair AA:BB:CC:DD:EE:FF

读取实际状态。若已 Trusted/Connected,就不必机械重复后面的相应操作。

info AA:BB:CC:DD:EE:FF

只有希望本机信任该设备用于后续服务时执行 trust;它不等于建立当前连接。

trust AA:BB:CC:DD:EE:FF

设备在线且需要立即使用时再 connect。失败时根据错误与 profile 排查,不通过反复 pair 重建凭据来碰运气。

connect AA:BB:CC:DD:EE:FF

重新 info 确认 Connected: yes,再验证实际输入或音频路径;需要撤销信任时在此会话使用 untrust 加真实设备地址,是否断开另行决定。

info AA:BB:CC:DD:EE:FF

结束扫描并退出

无论成功还是暂时失败,不再需要扫描时都结束扫描,再返回 shell。quit 不等于解除设备配对。

scan off
quit

按失败位置处理,不先删除配对

现象检查与动作
扫描为空Powered、rfkill、设备发现窗口和距离;journal 中查固件/USB 错误
AuthenticationFailed确认码、旧配对、设备是否已被另一主机接管;只有需重配时两端忘记旧关系
Connected 但耳机无声查 wpctl status、profile 与实际流路由,转 音视频
反复断连记录断连时间、原因码、电量与 2.4 GHz 干扰;必要时 btmon 抓一次受控复现

只查询状态,或主动断开

# 在 shell 中查看目标设备的当前状态
bluetoothctl info AA:BB:CC:DD:EE:FF

替换为设备真实地址,核对 Paired/Trusted/Connected 以及服务 UUID;多控制器环境在下面同一交互会话选择后检查。

# 需要断开该设备时保留配对关系
bluetoothctl disconnect AA:BB:CC:DD:EE:FF

不是修复前必做操作;断开后再 info 应显示 Connected: no,配对记录仍保留。

受控复现并采集 HCI 证据

# 在一个终端开始实时监听蓝牙事件
sudo btmon

另一终端复现一次连接/断开并记录时间,再回到这里 Ctrl-C 停止。对齐原因码与服务日志,避免只凭某个数字下结论;输出先审阅再分享。

disconnect 保留配对,remove 删除本机配对信息并需要重新配对;两者不是同义命令。重启 bluetooth.service 会影响其他已连接设备。btmon 输出可能包含设备标识和通信数据,分享前审阅。

BlueZ bluetoothctl · rfkill