Ubuntu 下 TigerVNC 实现音频的可行方案
原理与限制
- TigerVNC 基于 RFB 协议,协议本身不包含音频通道,因此“开箱即用”不会传输声音。要在 Ubuntu 上听到远端应用的声音,需要借助系统音频栈(如 PulseAudio/PipeWire)或改用支持音频的替代组件(如 x11vnc 的音频重定向)。
方案一 使用 PulseAudio 网络重定向(通用、改动小)
方案二 使用 x11vnc 的音频重定向(替代 TigerVNC 的快捷方式)
方案三 进阶 使用 QEMU 音频扩展的定制版 TigerVNC(实验性)
- RFB 协议本身无音频,但 QEMU 在 RFB 中定义了音频扩展(如 rfbEncodingQemuAudio = -259)。社区存在打过补丁的 TigerVNC 客户端/服务器,可通过该扩展在 VNC 会话中传输 PCM 音频。此路线需要定制构建,兼容性需自行验证,适合有开发能力的场景。
常见问题与排查
- 无法出声
- 服务器端确认 pulseaudio -k && pulseaudio --start 后,执行 pactl info 检查 “Server String” 是否为 tcp:IP:4713;客户端执行 export PULSE_SERVER=tcp:IP:4713 后再播放。
- 检查 /etc/pulse/default.pa 的 auth-ip-acl 是否包含客户端网段;必要时临时放宽测试。
- 防火墙/云安全组放行 4713/tcp(PulseAudio)与 5901/tcp(VNC)。
- 延迟与卡顿
- 音频对网络时延较敏感,优先同一局域网;必要时降低采样率/缓冲(在应用或 PulseAudio 中调整)。
- 安全加固
- 不建议对公网开放 4713/tcp;可通过 SSH 隧道 转发:ssh -L 4713:localhost:4713 用户名@服务器,然后客户端使用 PULSE_SERVER=tcp:localhost:4713。