普通网友 2026-02-13 03:05 采纳率: 98.3%
浏览 0

Ubuntu录屏时无法录制系统声音,如何解决?

Ubuntu录屏时无法录制系统声音,是因默认录屏工具(如GNOME Screen Recorder)仅捕获麦克风输入,未启用PulseAudio的“Monitor of Built-in Audio Analog Stereo”虚拟源。根本原因在于系统音频输出未被正确路由为可录制的监控源。解决方法:先在终端运行 `pactl list sources | grep -A1 "Name\|Description"` 确认监控源名称(通常为 `alsa_output.pci-0000_00_1f.3.analog-stereo.monitor`),再使用`ffmpeg`或OBS Studio——OBS需添加「音频输入捕获」设备并选择对应Monitor源;若用GNOME原生录屏,需安装扩展(如“Screen Recorder”)或切换至支持系统音频的工具(如Kazam配合pavucontrol手动重定向)。务必检查「声音设置→输入」中是否误选了麦克风而非监控设备,并禁用“自动暂停播放”等冲突功能。该问题高频出现于Ubuntu 22.04+ GNOME 42+版本,属权限与音频路由配置双重缺失所致。
  • 写回答

1条回答 默认 最新

  • 爱宝妈 2026-02-13 03:05
    关注

    一、现象层:Ubuntu 默认录屏无法捕获系统声音(表象确认)

    在 Ubuntu 22.04+(GNOME 42+)环境中,用户启用 Ctrl+Alt+Shift+R 或通过「Activities → Screen Recording」启动 GNOME 原生录屏工具时,录制视频仅包含麦克风音频(若有),而播放的音乐、浏览器音效、系统提示音等完全缺失。该现象非硬件故障,亦非静音误设,而是音频信号路径未被显式暴露为可采集源

    二、机制层:PulseAudio 音频子系统中的“监控源”本质

    • PulseAudio 将每个物理输出设备(如 alsa_output.pci-0000_00_1f.3.analog-stereo)自动创建一个对应的虚拟监控源(Monitor Source),命名格式为 <output-device>.monitor
    • 该 Monitor 源本质是「环回监听」——它镜像输出流的 PCM 数据,但默认不激活、不注册为常规输入设备;
    • GNOME Screen Recorder 使用 GStreamer 的 pulsesrc 元件,默认仅枚举真实输入源(如 alsa_input.pci-0000_00_1f.3.analog-stereo),忽略所有 .monitor 后缀源,属设计限制而非 Bug。

    三、验证层:终端诊断与监控源定位(实操流程)

    执行以下命令快速识别可用 Monitor 源:

    pactl list sources | grep -A1 "Name\|Description" | grep -E "(Name:|Description:)"

    典型输出示例:

    Name:Description:
    alsa_input.pci-0000_00_1f.3.analog-stereoBuilt-in Audio Analog Stereo
    alsa_output.pci-0000_00_1f.3.analog-stereo.monitorMonitor of Built-in Audio Analog Stereo

    四、解决层:多工具适配方案对比(含权限与路由双维度)

    下表归纳主流方案的技术路径、依赖项与关键配置点:

    工具核心操作所需权限/配置是否需重启服务
    OBS Studio添加「音频输入捕获」→ 选择 .monitor用户属 audio 组;禁用 flatpak --nosocket=pulseaudio 沙箱
    ffmpeg(CLI)ffmpeg -f pulse -i alsa_output.pci-0000_00_1f.3.analog-stereo.monitor ...确保 PulseAudio server 运行中;无 root 权限要求
    GNOME + 扩展安装 Screen Recorder 并启用「Capture System Audio」需启用 D-Bus 接口访问;扩展需适配 GNOME Shell 版本是(重载扩展)

    五、排错层:高频干扰项与系统级冲突(深度排查清单)

    1. 检查「设置 → 声音 → 输入」是否误选 Microphone 而非 Monitor of … —— 此处 UI 不显示 .monitor 源,需借助 pavucontrol
    2. 运行 pavucontrol → 切换至「Configuration」页,确认 Profile 为 Analog Stereo Duplex(非 OffHeadphones);
    3. 在「Recording」页观察录屏进程是否被路由至正确 Monitor 源(常因应用启动顺序导致初始绑定错误);
    4. 禁用「设置 → 电源 → 自动暂停播放」及第三方音频管理器(如 Pipewire-Wireplumber 的旧版策略);
    5. 验证 PulseAudio 是否被 Pipewire 替代:运行 ps aux | grep -E "(pipewire|pulseaudio)",若 Pipewire 活跃,则需使用 pw-cli 替代 pactl

    六、架构层:Ubuntu 22.04+ 音频栈演进带来的根本性变化

    自 Ubuntu 22.04 起,系统默认启用 Pipewire 作为音频后端(兼容 PulseAudio 协议),但其模块加载策略更严格:

    • Pipewire 默认不自动加载 libpipewire-module-loopback,导致 Monitor 源不可见;
    • GNOME Shell 录屏组件未适配 Pipewire 的 pw-link 动态连接模型,仍依赖传统 PulseAudio 枚举逻辑;
    • 解决方案需双轨并行:① 手动启用 loopback:pw-loopback -o alsa_output.pci-0000_00_1f.3.analog-stereo;② 或降级回 PulseAudio:sudo apt install pulseaudio + 禁用 pipewire-pulse。

    七、自动化层:一键诊断与修复脚本(生产环境就绪)

    以下 Bash 脚本完成三项任务:检测 Monitor 源存在性、验证当前录音设备、输出 OBS/FFmpeg 可用命令:

    #!/bin/bash
    MONITOR=$(pactl list sources | awk '/Name:/ && /monitor/ {print $2; exit}')
    if [ -z "$MONITOR" ]; then
      echo "❌ ERROR: No monitor source found. Check audio profile in pavucontrol."
    else
      echo "✅ Monitor source detected: $MONITOR"
      echo "▶ OBS config: Audio Input Capture → Device = '$MONITOR'"
      echo "▶ FFmpeg cmd: ffmpeg -f pulse -i '$MONITOR' -f x11grab -i :0.0 output.mkv"
    fi

    八、演进层:未来路径 —— Wayland + PipeWire + GTK4 录屏原生支持

    GNOME 45+ 已在开发 xdg-desktop-portal-gtkRecordScreen D-Bus API 扩展,支持:

    • 声明式请求「system-audio」权限(类似摄像头权限弹窗);
    • 由 Portal 后端自动注入 Monitor 流至客户端(无需用户手动选设备);
    • 与 Flatpak 应用沙箱深度集成,消除 --filesystem=home 等临时绕过。

    九、可视化层:音频数据流拓扑图(Mermaid)

    graph LR A[Application Audio Output] -->|PCM Stream| B[PipeWire Core] B --> C{Output Device
    alsa_output.pci-0000_00_1f.3.analog-stereo} B --> D[Loopback Module
    alsa_output.pci-0000_00_1f.3.analog-stereo.monitor] D --> E[OBS Studio] D --> F[ffmpeg] D --> G[GNOME Extension Recorder] style D fill:#4CAF50,stroke:#388E3C,color:white

    十、工程层:企业级部署建议(DevOps/SRE 视角)

    • Ansible Playbook 中固化 pipewire-pulse 模块启用逻辑,避免人工遗漏;
    • 为远程支持团队构建 Web UI(基于 Flask + pactl API),实现 Monitor 源状态实时看板;
    • 在 CI/CD 流水线中加入音频路由健康检查(如 timeout 5s pactl subscribe | grep -q 'source-added');
    • 对 Kiosk 模式设备,预置 /etc/pipewire/pipewire.conf 启用 default.clock.rate = 48000 防止采样率不匹配失真。
    评论

报告相同问题?

问题事件

  • 创建了问题 今天