昨天周末突然想通过在Spark主机上安装了Chromium浏览器后访问哔哩哔哩看视频,结果发现没有声音,后来检查系统设置,发现sound输出为dummy output,也就是说该主机不像我们的笔记本带有mic和speaker。检查配置后发现Spark自带蓝牙功能,所以随即找来BOSE SoundLink Mini蓝牙音箱,本来以为很轻松就连接好,结果搞了一个下午,碰到无数坑之后才总算最终搞定这个事情,
下面通过回顾我一路真实踩坑 → 破局 → 固化的这个痛苦过程,来总结一下我如何从“问题 → 误区 → 根因 → 正确架构 → 最终解法”,希望对于后来者想将Spark连接Bluetooth Audio蓝牙音箱或者耳机朋友一些有益的参考。
为了方便工程师观看,我们针对本期视频并处理添加了中文字幕供大家参考。如果想看高清视频建议要在电脑上打开上面的视频链接进行观看!创作不易,欢迎分享到朋友圈或者与朋友讨论!如果想搬运我们的视频请告知我们。
主机:ARM64 平台(NVIDIA DGX Spark)
操作系统:Ubuntu 24.04 LTS (noble)
音箱:老款 Bose SoundLink Mini
使用场景:
桌面环境存在,但不是传统 PC
需要 YouTube / 浏览器播放声音
需要 重启后自动可用
蓝牙可以扫描、可以配对
系统设置里显示“已连接 Bose”
但:
bluetoothctl connect 报br-connection-profile-unavailable
GNOME Sound 里只有 Dummy Output
YouTube 始终没有声音
安装 / 重装:
pipewire
pipewire-pulse
wireplumber
用 pactl、pavucontrol
在 GNOME Sound 里切输出设备
老款 Bose SoundLink Mini:
在 Ubuntu 24.04 的 BlueZ + PipeWire 组合下
A2DP profile 在 BlueZ 层就被拒绝
结果是:
不是“没选对输出设备”
而是 根本没有可用的音频 endpoint
结论 1:PipeWire 原生蓝牙 ≠ 对老款 Bose 友好
老款 Bose:
蓝牙 SDP / A2DP 实现较老
Ubuntu 24.04:
BlueZ + PipeWire 对 profile 校验更严格
结果:
PipeWire 蓝牙层拒绝建立音频链路
让 PipeWire 完全“不要碰蓝牙”, 用 bluez-alsa 直接对接 BlueZ
bluealsa-aplay -l输出能看到:
Bose SoundLink Mini
A2DP (SBC) 48000 Hz
此时:
CLI 层(ALSA)已经可以直接向 Bose 播放
但:
浏览器仍然无声
GNOME Sound 仍然只有 Dummy Output
Chrome / Firefox / Chromium:
PulseAudio
PipeWire-Pulse
不会直接输出到 ALSA
只认:
也就是说,此时系统变成了:
CLI (aplay / speaker-test) → ALSA → bluez-alsa → Bose ✔
Browser → PipeWire-Pulse → Dummy Output ✘
结论 2:必须把“ALSA 世界”和“浏览器世界”重新接起来
这是整篇实录最重要的一张“逻辑图”:
YouTube / Browser
↓
pipewire-pulse (浏览器唯一认可的出口)
↓
ALSA sink(bluealsa_out)
↓
bluez-alsa
↓
Bose SoundLink Mini
bluealsa_out~/.asoundrc
pcm.bluealsa_out {
type plug
slave.pcm {
type bluealsa
device "00:0C:8A:88:16:16" # Bose 的 MAC
profile "a2dp"
}
}
pcm.!default {
type plug
slave.pcm "bluealsa_out"
}
ctl.!default {
type bluealsa
}
验证:
speaker-test -c 2此时 Bose 必须出声。
运行时可以用:
pactl load-module module-alsa-sink device=bluealsa_out sink_name=bose_bluealsa
pactl set-default-sink bose_bluealsa
此时:
YouTube 立刻有声音
但:重启后全部失效
~/.config/pulse/default.pa
systemd user unit(一次性)
WirePlumber Lua rule(静态声明)
原因只有一个:
PipeWire / WirePlumber 会在启动时重新评估节点, 所有“运行时注入”的 sink 都可能被清空
sudo loginctl enable-linger admin否则:
没有 GUI
没有登录会话
--user 服务根本不跑
~/.config/systemd/user/bose-bluealsa-sink.service
[Unit]
Description=Create Bose bluealsa sink for PipeWire-Pulse (retry)
After=pipewire-pulse.service
Wants=pipewire-pulse.service
[Service]
Type=simple
ExecStart=/usr/bin/bash -lc '\
for i in {1..60}; do \
/usr/bin/pactl load-module module-alsa-sink device=bluealsa_out sink_name=bose_bluealsa && \
/usr/bin/pactl set-default-sink bose_bluealsa && exit 0; \
sleep 1; \
done; \
exit 1'
Restart=on-failure
RestartSec=2
[Install]
WantedBy=default.target
启用:
systemctl --user daemon-reload
systemctl --user enable --now bose-bluealsa-sink.service
pactl list short sinks
pactl info | grep "Default Sink"
必须看到:
bose_bluealsa
此时:
YouTube 有声音
GNOME Sound 是否显示已不重要
重启后仍然成立
✅ 老款 Bose SoundLink Mini
✅ Ubuntu 24.04 ARM64
✅ PipeWire 时代
✅ 浏览器音频
✅ 重启自动可用
这不是“凑出来的 hack”,而是:
在 PipeWire 架构下, 针对老蓝牙设备的唯一工程级稳定解法
bluez-alsa 解决“能不能连”, PipeWire-Pulse 解决“浏览器认不认”, systemd --user + linger + 重试 解决“重启后还能不能用”。
链接: https://pan.baidu.com/s/1ACT-mFPUizQUD2fowqoNHg?pwd=svhx 提取码: svhx
如果你有其任何关于PCIe5&6.0, CXL, NVMe/NVMoF, NAND, DDR5/LPDDR5以及UFS测试方面的我问题想咨询,请访问:访问www.saniffer.cn / www.saniffer.com 访问我们的相关测试工具和产品;或者添加点击左下角“阅读原文”留言,或者saniffer公众号留言,致电021-50807071 / 13127856862,sales@saniffer.com。