200字
Debian 13 (Trixie) 蓝牙耳机连接无声音排查记录
2026-04-26
2026-04-26

日期: 2026-04-26

系统: Debian GNU/Linux 13 (trixie)

内核: 6.12.74+deb13+1-amd64

桌面环境: Cinnamon 6.4.10

音频服务: PipeWire 1.4.2 + WirePlumber

蓝牙硬件: MediaTek MT7922 (USB ID 0e8d:0616, Driver: btusb)


1. 问题现象

  1. 第一阶段: blueman-manager 无法连接蓝牙设备。

  2. 第二阶段: 蓝牙成功配对并显示"已连接",但耳机无声音输出


2. 环境快照

组件

版本/状态

备注

PipeWire

1.4.2

核心服务运行中

WirePlumber

随 PipeWire 启动

Session Manager

PulseAudio

17.0

已关闭 (off),由 pipewire-pulse 兼容层接管

BlueZ (bluetoothd)

未直接查看

协议层连接正常

蓝牙驱动

btusb v0.8

MediaTek 芯片,USB 2.1 480Mb/s


3. 排查流程

Step 1 — 检查音频服务状态

确认 PipeWire 三大核心服务是否正常运行:

systemctl --user status pipewire pipewire-pulse wireplumber

结果: 三个服务均 active (running),表面无异常。


Step 2 — 分析 WirePlumber 日志

在状态输出中滚动查看日志,发现关键错误:

wireplumber[16574]: wp-device: SPA handle 'api.bluez5.enum.dbus' could not be loaded; is it installed?
wireplumber[16574]: s-monitors: PipeWire's BlueZ SPA plugin is missing or broken. Bluetooth not supported.
wireplumber[16574]: wp-device: SPA handle 'api.bluez5.midi.enum' could not be loaded; is it installed?
wireplumber[16574]: s-monitors: PipeWire's BlueZ MIDI SPA missing or broken. Bluetooth not available.
wireplumber[16574]: pw.resource: can't create node: 没有那个文件或目录
wireplumber[16574]: wp-node: failed to create node from factory 'spa-node-factory'
wireplumber[16574]: s-monitors: Failed to create BLE MIDI server.

诊断: PipeWire 的 BlueZ SPA 插件缺失。虽然 bluetoothd 在底层完成了蓝牙协议握手(设备显示已连接),但 PipeWire 无法创建蓝牙音频节点(bluez_sink / bluez_source),导致音频流无法路由到耳机。


4. 根因分析

flowchart TD
    A[蓝牙耳机显示已连接] --> B{PipeWire 能否创建音频节点?}
    B -->|缺少 libspa-0.2-bluetooth| C[无法加载 api.bluez5.enum.dbus]
    C --> D[无 bluez_sink 输出设备]
    D --> E[系统默认仍指向内置声卡]
    E --> F[耳机无声音]
  • 直接原因: 系统安装 PipeWire 核心时,未同步安装蓝牙音频支持模块 libspa-0.2-bluetooth

  • 表现特征: pactl list sinks 中看不到任何 bluez_sink 开头的设备;bluetoothctl 连接状态正常。


5. 修复方案

5.1 安装缺失的 PipeWire 蓝牙插件

sudo apt update
sudo apt install libspa-0.2-bluetooth

若仓库命名差异,可搜索确认:

apt search spa.*bluetooth

5.2 重启用户级音频服务

systemctl --user restart pipewire pipewire-pulse wireplumber

5.3 重新触发蓝牙音频连接

在 GUI (blueman-manager) 中断开并重新连接耳机,或命令行操作:

# 查看已配对设备 MAC
bluetoothctl devices
​
# 断开后重连
bluetoothctl disconnect <MAC>
bluetoothctl connect <MAC>

5.4 验证音频节点与切换输出

# 查看输出设备列表,应出现 bluez_sink.xxx.a2dp-sink
pactl list sinks short
​
# 查看蓝牙卡配置
pactl list cards | grep -A 20 "Name: bluez_card"
​
# 强制切换到 A2DP 立体声(若默认在 HFP/HSP 通话模式)
pactl set-card-profile bluez_card.<MAC> a2dp-sink
​
# 设为默认输出
pactl set-default-sink bluez_sink.<MAC>.a2dp-sink
​
# 检查音量与静音
pactl set-sink-mute bluez_sink.<MAC>.a2dp-sink 0
pactl set-sink-volume bluez_sink.<MAC>.a2dp-sink 80%

6. 辅助检查项(若上述步骤后仍异常)

检查项

命令

预期结果

蓝牙服务状态

sudo systemctl status bluetooth

active (running)

射频软阻断

rfkill list

Soft blocked: no

蓝牙内核模块

lsmod \| grep bluetooth

有输出

音频权限 (polkit)

systemctl status polkit

正常运行

编解码器支持

pactl list cards

a2dp-sink, a2dp-sink-sbc 等可用


7. 经验总结

  1. "已连接 ≠ 有声音": 蓝牙协议层连接成功只代表握手完成,音频节点还需 PipeWire/PulseAudio 侧正确加载对应 SPA/Pulse 模块。

  2. 日志优先看 WirePlumber: PipeWire 架构下,wireplumber 是 Session Manager,其日志会明确提示插件缺失(SPA plugin missing),比盲目重装蓝牙驱动更有效。

  3. Debian Trixie 注意事项: 作为 Testing 分支,PipeWire 相关包可能拆分较细,安装核心后需手动补全 libspa-0.2-bluetooth 等插件包。


附录:完整系统信息摘要

Machine:    MAXSUN MS-Terminator B850M PRO + AMD Ryzen 5 7500F
GPU:        NVIDIA GeForce RTX 4060 Ti (Driver: nvidia 595.58.03)
Audio:      NVIDIA AD106M HD Audio + AMD Family 17h/19h HD Audio
Network:    Realtek RTL8125 2.5GbE + MediaTek MT7922 WiFi6
Bluetooth:  MediaTek Wireless_Device (USB, 0e8d:0616, btusb)
Storage:    Samsung NVMe SSD (128G + 512G) + Samsung 870 EVO 250G + WD 1TB HDD
Memory:     64 GiB

Debian 13 (Trixie) 蓝牙耳机连接无声音排查记录
作者
WuQingYang
发表于
2026-04-26
License
CC BY-NC-SA 4.0