bluetoothctl devices仅显示已配对设备,不反映连接状态;真正判断是否连接需用connections(BlueZ 5.64+)、hcitool con(仅BR/EDR)、bluetoothctl info <MAC>查Connected: yes,或实时查看journalctl -u bluetooth日志确认链路建立。

bluetoothctl devices 显示已配对但未必已连接
执行 bluetoothctl 进入交互模式后,devices 命令只列出**已配对**的设备,不区分是否在线或已连接。很多用户误以为看到的就是“当前连接中”的设备,结果发现耳机没声音、键盘无响应,其实根本没连上。
- 真正反映“当前连接状态”的是
connections命令(BlueZ 5.64+ 支持),它只显示处于 active ACL 链路的设备 - 旧版 BlueZ(如 Ubuntu 20.04 默认)不支持
connections,得靠info <MAC>看输出里是否有Connected: yes -
paired-devices是另一个易混淆命令——它和devices功能基本一致,只是输出格式略有不同
hcitool con 只显示经典蓝牙(BR/EDR)连接
hcitool con 是最直接查“当前连接”的命令,但它有硬性限制:只显示通过传统蓝牙协议(非 BLE)建立的连接,比如音箱、鼠标、键盘;对 BLE 设备(如智能手环、信标)完全不可见。
Linux AI 服务器 — 将 Linux 服务器转换为本地 AI 推理集群。使用 systemd、NVIDIA CUDA 实现无头 Linux AI,零 GUI 开销。
- 运行后若输出为空,不代表没连任何设备,可能只是连的是 BLE 设备
- 输出格式类似:
connections: < hci0 > < 48:59:A4:BB:7A:08 >,其中 MAC 地址就是当前连接的 BR/EDR 设备 - 该命令不需要进入
bluetoothctl,但需 root 权限(sudo hcitool con)
journalctl -u bluetooth 实时确认连接动作
当 devices 和 hcitool con 结果不一致,或者你想确认“刚点的那个 connect 是否真生效”,直接看日志最可靠。
- 运行
journalctl -u bluetooth -n 20 -f,然后在 GUI 或bluetoothctl里触发连接操作 - 成功连接会看到类似:
Connected to <MAC> (type: bredr)或Connected to <MAC> (type: le) - 失败时常见提示:
Failed to connect: Protocol not available(服务未启用)、Connection refused(设备忙或拒绝) - 注意:日志里出现
Connected不代表音频/输入等 profile 已就绪,只是底层链路通了
cat /sys/class/bluetooth/hci0/device/connections 仅适用于内核 6.1+
较新内核(Linux 6.1 起)在 sysfs 暴露了更底层的连接视图,路径 /sys/class/bluetooth/hci0/device/connections 下每个子目录名即为当前连接设备的 MAC 地址。
- 这个目录只在有活跃连接时存在,且内容不含设备名,纯 MAC 列表
- 不区分 BR/EDR 和 BLE,只要 HCI 层建立了连接就会出现
- 嵌入式开发板(如 RK3566、Remi Pi)若用较新内核可优先用这个,无需依赖用户态服务
- 老内核或某些裁剪版系统(如 Buildroot 默认配置)可能压根没有这个路径
hcitool con 看不见,bluetoothctl info 却显示 Connected: yes——这时候得进 gatttool 或用 bluetoothctl 的 select <MAC> + connect 再试一次。

















