【高清视频】Nvidia DGX Spark连接BOSE蓝牙音箱的曲折路
2026-02-04 17:40:42

昨天周末突然想通过在Spark主机上安装了Chromium浏览器后访问哔哩哔哩看视频,结果发现没有声音,后来检查系统设置,发现sound输出为dummy output,也就是说该主机不像我们的笔记本带有mic和speaker。检查配置后发现Spark自带蓝牙功能,所以随即找来BOSE SoundLink Mini蓝牙音箱,本来以为很轻松就连接好,结果搞了一个下午,碰到无数坑之后才总算最终搞定这个事情,

下面通过回顾我一路真实踩坑 → 破局 → 固化的这个痛苦过程,来总结一下我如何从“问题 → 误区 → 根因 → 正确架构 → 最终解法”,希望对于后来者想将Spark连接Bluetooth Audio蓝牙音箱或者耳机朋友一些有益的参考。

为了方便工程师观看,我们针对本期视频并处理添加了中文字幕供大家参考。如果想看高清视频建议要在电脑上打开上面的视频链接进行观看!创作不易,欢迎分享到朋友圈或者与朋友讨论!如果想搬运我们的视频请告知我们。


Ubuntu 24.04 ARM64 + Bose 蓝牙音箱完整打通实录

一次 PipeWire 时代“反直觉但正确”的音频排障全过程

一、问题背景:看似简单,其实是“地狱级组合”

硬件 / 系统环境

  • 主机: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 / PulseAudio 的“直觉解法”全部失败

常规思路(也是大多数教程会教的)

  • 安装 / 重装:

    • pipewire

    • pipewire-pulse

    • wireplumber

  • 用 pactlpavucontrol

  • 在 GNOME Sound 里切输出设备

现实结果

  • 老款 Bose SoundLink Mini

    • 在 Ubuntu 24.04 的 BlueZ + PipeWire 组合下

    • A2DP profile 在 BlueZ 层就被拒绝

  • 结果是:

    • 不是“没选对输出设备”

    • 而是 根本没有可用的音频 endpoint

结论 1:PipeWire 原生蓝牙 ≠ 对老款 Bose 友好


三、关键转折点:引入 bluez-alsa,绕过 PipeWire 的蓝牙策略

为什么必须用 bluez-alsa

  • 老款 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


四、第二个关键认知:浏览器 ≠ ALSA 世界

一个非常容易被忽略的事实

  • Chrome / Firefox / Chromium:

    • PulseAudio

    • PipeWire-Pulse

    • 不会直接输出到 ALSA

    • 只认:

也就是说,此时系统变成了:

CLI (aplay / speaker-test) → ALSA → bluez-alsa → Bose   ✔
Browser → PipeWire-Pulse → Dummy Output                  ✘

结论 2:必须把“ALSA 世界”和“浏览器世界”重新接起来


五、核心架构:Browser → PipeWire-Pulse → ALSA → bluez-alsa → Bose

这是整篇实录最重要的一张“逻辑图”:

YouTube / Browser
        ↓
pipewire-pulse   (浏览器唯一认可的出口)
        ↓
ALSA sink(bluealsa_out)
        ↓
bluez-alsa
        ↓
Bose SoundLink Mini

六、技术实现关键点(真正可复现的部分)

1️⃣ 固定一个 ALSA 输出: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 必须出声


2️⃣ 让 PipeWire-Pulse 看到这个 ALSA 输出

运行时可以用:

pactl load-module module-alsa-sink device=bluealsa_out sink_name=bose_bluealsa
pactl set-default-sink bose_bluealsa

此时:

  • YouTube 立刻有声音

  • 但:重启后全部失效


七、真正的“终极坑”:Ubuntu 24.04 会在重启时抹掉一切临时 sink

失败的方案(全部踩过)

  • ~/.config/pulse/default.pa

  • systemd user unit(一次性)

  • WirePlumber Lua rule(静态声明)

原因只有一个:

PipeWire / WirePlumber 会在启动时重新评估节点, 所有“运行时注入”的 sink 都可能被清空


八、最终解法:systemd --user + linger + 重试机制(关键)

1️⃣ 允许用户服务在开机后常驻

sudo loginctl enable-linger admin

否则:

  • 没有 GUI

  • 没有登录会话

  • --user 服务根本不跑


2️⃣ 创建“带重试”的用户服务(核心)

~/.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

3️⃣ 验收标准(唯一正确的判断方式)

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 + 重试 解决“重启后还能不能用”。

更多关于PCIe 6.0/CXL的测试工具和技术,请下载Saniffer公司2026.1.6最新更新的白皮书15.0版本 - PCIe5&6.0, CXL, NVMeNVMoF, SSD, NAND, DDR5, 800GE测试技术和工具白皮书_ver15.0 (低分辨率版本,file size: 62MB);需要高清图片pdf版本的请参见本文底部的联系方式联系我们获取(file size: 210MB)

链接: 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。

图片