docs(op): refine pro-audio verification + snapshot guidance

Clarify sink/ELD/Jack mapping pitfalls, add drain-timeout troubleshooting, and document a baseline snapshot workflow for repeatable HDMI audio verification. Debian packaging is explicitly deferred until validation is complete.

Made-with: Cursor
This commit is contained in:
2026-04-07 23:56:18 +08:00
parent 6e0732544e
commit 4af92f6069

View File

@@ -2,6 +2,8 @@
**适用**Google **Kaisa**(如 `Google-Kaisa-rev4`、PipeWire + WirePlumberUbuntu 24.04 常见)、声卡为 **`alsa_card.pci-0000_00_1f.3-platform-cml_rt5682_def`**(若 PCI 路径不同需改配置)。 **适用**Google **Kaisa**(如 `Google-Kaisa-rev4`、PipeWire + WirePlumberUbuntu 24.04 常见)、声卡为 **`alsa_card.pci-0000_00_1f.3-platform-cml_rt5682_def`**(若 PCI 路径不同需改配置)。
**当前阶段**:以 **本机手工配置 + 文档/脚本复现** 完成技术验证pro-audio / UCM、插拔、多显示器等。**Debian 包(`debian/``kaisa-hdmi-pipewire-fix`)暂缓**:待验证结论稳定后再考虑打包与分发,本文 **§4.4** 仅作预留参考。
--- ---
## 路径选择pro-audio 与 UCM先选哪条 ## 路径选择pro-audio 与 UCM先选哪条
@@ -23,7 +25,7 @@
|------|------| |------|------|
| 设置里只有 **「立体声」**、**`pactl list short sinks` 仅 1 个** | 声卡 profile 为 **`stereo-fallback`**,未暴露多路 HDMI PCM。 | | 设置里只有 **「立体声」**、**`pactl list short sinks` 仅 1 个** | 声卡 profile 为 **`stereo-fallback`**,未暴露多路 HDMI PCM。 |
| GNOME **「测试扬声器」** 无图标 | HDMI / Pro Audio 常无 Front L/R 声道名,**界面不可用**不代表无声PipeWire 下用 **`speaker-test -D pulse`** 或 **`paplay`**(走默认 sink**`plughw:…`** 常与 PipeWire **EBUSY (-16)** 冲突。 | | GNOME **「测试扬声器」** 无图标 | HDMI / Pro Audio 常无 Front L/R 声道名,**界面不可用**不代表无声PipeWire 下用 **`speaker-test -D pulse`** 或 **`paplay`**(走默认 sink**`plughw:…`** 常与 PipeWire **EBUSY (-16)** 冲突。 |
| **`HDMI/DP,pcm=3/4 Jack` = off** | 该路 **未检测到显示器**,勿用 **`plughw:0,3`** / **`0,4`** 指望有声;对齐 **Jack=on** 的 pcm 与物理口。 | | **`HDMI/DP,pcm=3/4 Jack` = off** | 该路 **未检测到显示器** 时,通常不应指望有声;但 **Jack 与 ELD、`hw:0,N` 的编号不一定一一对应**(见 §3 文末)。排障以 **`wpctl inspect @DEFAULT_AUDIO_SINK@`** 里的 **`api.alsa.path`(如 `hw:0,2`** **`aplay -l` 子设备**为准。 |
| **`IEC958',N``IEC958 Playback Switch`** | 本机简单控件名为 **`IEC958',0`** 等(与 **pcm=2/3/4** 对应);**`Mono: Playback [off]`** 时 PipeWire 仍可能 **RUNNING**、**`speaker-test -D pulse`** 仍跑计数,但 **HDMI 无声**。核对:**`amixer -c0 cget numid=14,20,26`** 或 **`sget 'IEC958',0`**。 | | **`IEC958',N``IEC958 Playback Switch`** | 本机简单控件名为 **`IEC958',0`** 等(与 **pcm=2/3/4** 对应);**`Mono: Playback [off]`** 时 PipeWire 仍可能 **RUNNING**、**`speaker-test -D pulse`** 仍跑计数,但 **HDMI 无声**。核对:**`amixer -c0 cget numid=14,20,26`** 或 **`sget 'IEC958',0`**。 |
--- ---
@@ -115,10 +117,18 @@ pactl get-default-sink
pactl list short sinks pactl list short sinks
``` ```
插入 HDMI**Jack 对应的那路**,如 **pcm=2**)后,默认 sink 宜为 **`...pro-output-2`**(或你优先级最高的那路)。 插入 HDMI 后,**默认 sink 以本机为准**:可能是 **`...pro-output-2`**(界面常标 **Pro 2 / HDMI1**),也可能是 **`pro-output-3` / `pro-output-4`**,取决于物理口、显示器与 PipeWire 优先级。**不要**仅凭 **`HDMI/DP,pcm=N Jack`** 或某条 **`eld#2.X`** 就断定必须用 `pro-output-N`;用下面命令确认当前默认输出实际绑定的 ALSA 设备:
```bash
wpctl inspect @DEFAULT_AUDIO_SINK@ | grep -E 'api\.alsa\.path|node\.name|alsa\.device'
```
例如 **`api.alsa.path = "hw:0,2"`** 即当前声音送往 ALSA **device 2**(常对应 **Pro 2**)。
**出声测试(推荐)**:桌面默认用 PipeWire 时,声卡常被其占用;此时 **`speaker-test -D plughw:0,2`** 会报 **打开错误: -16设备或资源忙EBUSY**,属正常现象。请先 **`pactl set-default-sink`** 指到目标 HDMI sink再经 **Pulse 兼容设备** 测试: **出声测试(推荐)**:桌面默认用 PipeWire 时,声卡常被其占用;此时 **`speaker-test -D plughw:0,2`** 会报 **打开错误: -16设备或资源忙EBUSY**,属正常现象。请先 **`pactl set-default-sink`** 指到目标 HDMI sink再经 **Pulse 兼容设备** 测试:
**若 `paplay` 报「排空流失败:超时」、且 `pactl list short sink-inputs` 为空**:该路 sink 可能未能正常完成播放(或默认 sink 并非你以为的那路)。请依次 **`pactl set-default-sink …pro-output-2/3/4`** 配合 §4.2 打开对应 **IEC958**,并用 **`speaker-test -D pipewire`** 复测;同时查看 **`journalctl --user -u pipewire`** 是否出现 **`set_hw_params` / 输入输出错误**。
```bash ```bash
speaker-test -D pulse -c2 -t sine -f 440 -l 3 speaker-test -D pulse -c2 -t sine -f 440 -l 3
``` ```
@@ -215,13 +225,15 @@ amixer -c0 sset 'IEC958',0 on
### 4.3 登录自动恢复(规划中) ### 4.3 登录自动恢复(规划中)
**根因****`IEC958',0`pcm=2被关** → HDMI 无声PipeWire 可看似正常);完整 **「切 pro-audio + 默认 HDMI sink + 开 IEC958」** 自动化**尚未**作为稳定工具随 **`kaisa-hdmi-pipewire-fix`** 发布 **根因****`IEC958',0`pcm=2被关** → HDMI 无声PipeWire 可看似正常);完整 **「切 pro-audio + 默认 HDMI sink + 开 IEC958」** 自动化**尚未**作为随仓库分发的稳定工具deb 亦暂缓,见文首说明)
**当前**:请用 §4.1 / §4.2 **手动命令**;需要登录自启时,自行编写 **user systemd**(可参考 **[`systemd-user/kaisa-hdmi-iec958-pipewire.service`](systemd-user/kaisa-hdmi-iec958-pipewire.service)** 结构,**`ExecStart`** 指向你本机的 shell 片段或脚本)。 **当前**:请用 §4.1 / §4.2 **手动命令**;需要登录自启时,自行编写 **user systemd**(可参考 **[`systemd-user/kaisa-hdmi-iec958-pipewire.service`](systemd-user/kaisa-hdmi-iec958-pipewire.service)** 结构,**`ExecStart`** 指向你本机的 shell 片段或脚本)。
### 4.4 Debian 包(系统级交付) ### 4.4 Debian 包(系统级交付,暂缓
仓库 **`debian/`** 提供原生包 **`kaisa-hdmi-pipewire-fix`**`Architecture: all`)。在**源码根目录**构建: **说明**:在技术验证未收尾前,**不必**关注本节;优先完成 §1§3、UCM 与基线脚本。**验证稳定后**再决定是否维护 **`debian/`** **`kaisa-hdmi-pipewire-fix`**
仓库 **`debian/`** 可提供原生包 **`kaisa-hdmi-pipewire-fix`**`Architecture: all`)。在**源码根目录**构建:
```bash ```bash
./scripts/build-deb.sh ./scripts/build-deb.sh
@@ -284,6 +296,24 @@ cd /path/to/chromebox_10th_audio_driver
**若曾自建** §4.3 的 **user systemd** 自动执行 **`pactl`/`amixer`**,恢复基线前请先 **`disable --now`** 相应单元,避免登录后仍改 profile。 **若曾自建** §4.3 的 **user systemd** 自动执行 **`pactl`/`amixer`**,恢复基线前请先 **`disable --now`** 相应单元,避免登录后仍改 profile。
### 4.6 已验证出声后如何「落盘记录」(备份与 Git 分工)
**目的**:区分「本机可还原的现场」与「仓库里可复现的配置/说明」,避免把大块拓扑采集误提交进 Git。
| 做法 | 内容 | 是否适合进 Git |
|------|------|------------------|
| **本机基线** | 运行 **`./scripts/capture-ubuntu-audio-baseline.sh`**,得到 `audio_topology/baseline-stash/<时间戳>_<hostname>/`(含 **`topology.txt`**、**`manifest.txt`** 等) | **通常否**(目录默认在 **`.gitignore`**,体积与隐私不宜入库) |
| **仓库提交** | 更新 **`OPERATION`** / **`REPRO_*.md`**、UCM 与 WirePlumber 源码;在文档中**写一句**当时验证要点(例如 **`pro-audio` + 默认 **`Pro 2`**、`hw:0,2`)。**`debian/`** 待完整验证后再纳入常规提交 | **是**deb 相关目录**暂缓** |
**建议在 OPERATION 或提交说明里记一行「事实锚点」**(便于以后对照):`pactl get-default-sink` 的 sink 名、**`wpctl inspect @DEFAULT_AUDIO_SINK@`** 中的 **`api.alsa.path`**、以及 **`amixer -c0 cget numid=14,20,26`** 中对应 **IEC958** 是否为 on。
**本机最新一次“技术验证过程快照(含已验证 Pro 2/Pro 3 HDMI 可出声)”(勿入库)**
- 基线目录:`audio_topology/baseline-stash/20260407_235227_jack-Kaisa/`
- 采集时间:`2026-04-07T23:52:31+08:00`
- 采集命令:`./scripts/capture-ubuntu-audio-baseline.sh`
- 快速锚点(供对照):`IEC958 numid=14/20/26 = on`ELD/Jack/默认 sink 等以该基线的 `topology.txt` 与采集时现场为准(建议同时记录 `pactl get-default-sink``wpctl inspect @DEFAULT_AUDIO_SINK@`
--- ---
## 5. 参考链接 ## 5. 参考链接