Linux下音频控制介绍


Linux ALSA 声卡驱动是一款稳定运行了多年的体系框架。自 2017 年问世以来,PipeWire 将自己视为取代 PulseAudio 的有力竞争者,但其稳定性仍有很多问题需要解决。多年后它作为 Linux 上更成熟的音频服务已经获得了良好的声誉,用户现在开始好奇升级到 PipeWire 是否真的值得。在本节中将提供有关 PipeWire 与 PulseAudio 相比的优点的最新信息,并向您展示如何在您的系统中正确安装它(如果您选择这样做)。
1、什么是管道线?
Linux 上的音频始终遵循分层结构:您安装驱动程序,它使设备工作,但应用程序仍然希望以自己的方式与其通信。为此,服务器充当用户空间中的中介来与内核“对话”,然后内核与计算机的硬件进行对话。

高级 Linux 声音架构 (ALSA) 充当应用程序和内核之间良好、简单的中介,但如果想要更复杂的功能,则需要称为音频服务器的东西。

PulseAudio 和 PipeWire 都在内核所做的基础上添加了一层,以引入许多功能。它们允许多个应用程序传输音频,提供详细的混音器控制功能,甚至允许动态地对音频流进行后处理,其方式可以与商业操作系统提供的应用程序套件的功能相媲美甚至超越。
两者之间的区别在于,PipeWire 层添加了其他功能,例如管理视频流,同时还消除了一些使 PulseAudio 对于新用户来说不愉快的问题。自推出以来,PipeWire 的稳定性问题已逐渐消失,现在是各种发行版的默认声音服务器,包括 Fedora、基于 Arch 的 Manjaro、EndeavourOS、Garuda,甚至还引入了 Ubuntu 22.10。

对于大多数人来说,这种变化是如此无缝,以至于他们只感觉到他们在系统上使用音频的能力得到了扩展,这证明了其作为一项强大服务的声誉,可以直接升级到老化的 PulseAudio 框架。尽管人们很容易认为升级到 PipeWire 是理所当然的事情,但我们应该退后一步,探讨该决定背后的细微差别,以便您可以更清楚地了解如果您采取这一步,您将要注册什么:
优点
PipeWire包含对各种蓝牙音频设备的广泛支持,而这些设备以前在 PulseAudio 下无法完全工作。如果您的蓝牙硬件无法与您的发行版正常工作,那么进行迁移可能会有所帮助。
许多发行版已经开始将 PipeWire 作为默认音频服务,在官方存储库中获得大量支持,基本上您会遇到任何东西。
当同时将音频流式传输到多个设备时,PipeWire 可以更有效地处理延迟。
EasyEffects(以前称为 PulseEffects)等后处理器已在其版本中放弃了对 PulseAudio 的支持或计划很快这样做,因此有必要迁移到 PipeWire 以保持这些应用程序为您提供的灵活性。
这些功能对于想要进入更专业的音频设置和应用程序的人来说更加友好。
它支持视频流管道化,让屏幕共享应用程序享受更强大、更安全的环境。
PipeWire 的服务套件附带 pipewire-pulse,扩展了对使用 PulseAudio 的 API 和音频管理的应用程序的支持。
在高 CPU 负载下,它不太容易出现裂纹。
缺点
配置并不总是直接从 PulseAudio 转换过来,必须学习全新的配置方案。PipeWire没有任何直观的连接逻辑,这意味着它需要另一个服务来监听音频输出并正确路由它们。这不一定是缺点,但可能会很烦人,因为它还要求您学习如何配置会话管理器以进行高级调整。尽管在撰写本文时这种情况正在发生变化,但 PipeWire 的文档和社区支持仍然没有 PulseAudio 那样广泛。
提示:了解如何使用 PulseAudio 将音频投射到另一台设备。
2、如何安装管道线
如果想冒险在您的系统上安装 PipeWire,首先必须确保您尚未运行它!在终端中输入 pactl info 并查看“服务器名称”下提供的内容。如果它在括号中显示“on PipeWire”,则说明已经在运行 PipeWire。

如果终端仅显示“PulseAudio”,后面没有任何内容,则系统未运行 PipeWire。下为一列Debian GNU/Linux 11 (bullseye)在ThinkPAD T520下的输出:
$ pactl info
服务器字串:/run/user/1000/pulse/native
程序库协议版本:34
服务器协议版本:34
是否本地服务器:是
客户端索引:250
区块大小: 65472
用户名:freeoa
主机名:freeoa.net
服务器名:pulseaudio
服务器版本:14.2
默认采样规格:s16le 2ch 44100Hz
默认声道映射:front-left,front-right
默认音频入口:alsa_output.pci-0000_00_1b.0.analog-stereo
默认信源: alsa_output.pci-0000_00_1b.0.analog-stereo.monitor
Cookie:f371:7617
1. 备份系统
如果出现问题,请确保有回去的路!如果尚未创建系统备份,请在继续操作之前立即执行此操作。
2. 安装服务
每个 PipeWire 安装都从基本服务开始。发行版可能已经安装了它,但如果没有安装可以使用以下命令安装它。
在基于 Arch 的系统上:pacman -S pipewire pipewire-alsa
在基于 Ubuntu/Debian 的系统上:apt install pipewire
3. 安装会话管理器
PipeWire 没有自己的连接逻辑,因此必须安装会话管理器。WirePlumber 提供更精细的配置以及额外的插件,可以增强体验:
在基于 Arch 的系统上:
pacman -S wireplumber
在基于 Ubuntu/Debian 的系统上:
apt install wireplumber
如果喜欢更简单的版本或者发行版的官方存储库没有 WirePlumber,可以简单地安装 PipeWire Media Session:
在基于 Arch 的系统上:pacman -S pipewire-media-session
在基于 Ubuntu/Debian 的系统上:apt install pipewire-media-session
4. 安装 PulseAudio 守护进程
由于系统的大部分应用程序仍然向 PulseAudio 发送调用,因此如果您希望音频正常工作,则必须安装 PipeWire 的守护进程来监听 PulseAudio 的内容。
在基于 Arch 的系统上:pacman -S pipewire-pulse
在基于 Ubuntu/Debian 的系统上:apt install pipewire-pulse
5. 去除PulseAudio的痕迹
如果由于与在此过程中安装的其他内容(通常是 pipewire-pulse)发生冲突而必须确认删除 PulseAudio,那么您可以跳过此步骤。否则,现在从系统中删除 PulseAudio 非常重要,这样它就不会尝试查询它。
在基于 Arch 的系统上:pacman -Rns pulseaudio
在基于 Ubuntu/Debian 的系统上:apt remove pulseaudio
6. 准备好服务
完成所有已安装和卸载的软件包后,就可以启动并运行 PipeWire 了。首先删除pulseaudio服务的残余:
systemctl --user --now disable pulseaudio.service pulseaudio.socket
systemctl --user mask pulseaudio
启用 PipeWire 的服务。如果安装了 WirePlumber:
systemctl --user --now enable pipewire pipewire-pulse wireplumber
如果安装了 PipeWire Media Session,请使用:
systemctl --user --now enable pipewire pipewire-pulse pipewire-media-session
重新启动系统后,PipeWire 现在应该可以正常工作!
提示:如果您的 Linux 系统出现无声音问题,请按以下方法修复该问题。
3、常见问题
可以只使用 ALSA 吗?
绝对可以在系统上运行 ALSA(特别是如果您使用窗口管理器而不是桌面环境),但您可能不会喜欢它。ALSA 一次只能播放一个音频流。虽然这听起来不错,但这意味着当您在观看视频时尝试播放通知声音时,的系统可能会出现不可预测的行为。在 ALSA 之上使用声音服务器更方便,但肯定会涉及一点内存开销。
PipeWire 可以安装在 Linux Mint Cinnamon 中吗?
绝对地! Cinnamon 有一个有点可怕的时刻,当您完成正确的 PipeWire 安装时,它不会向您显示音频小部件,但如果您严格按照这些说明进行操作,它会在您重新启动时重新出现。只要确保按照我们在说明中概述的那样删除 PulseAudio 的残余部分,您就会成功!
如何解决睡眠后的音频问题?
如果将计算机从睡眠状态唤醒时,计算机的音频停止工作,很可能是因为 ALSA 未能正确初始化,这种情况偶尔会发生。对于此类情况,只需手动使用 ALSA:alsactl init
在Debian上控制ALSA音频
ALSA 或 Advanced Linux Sound Architecture 为大多数 Linux 发行版提供音频支持。 Debian 目前很有可能使用相同的架构来运行和管理系统上的音频。在本节中将解释如果您的 Debian 上尚未安装 ALSA 实用程序包,您如何安装它。还解释如何通过以下方式控制声卡的音频属性:
1.Alsamixer-ALSA 的图形界面
2.Amixer-ALSA 的基于命令的实用程序
在 Debian Buster 系统上运行了提到的命令和过程。
安装 ALSA
Alsa-utils 包包含 Alsamixer 和 Amixer 实用程序。该软件包可在官方 Debian 存储库中获得,并且可以使用 apt-get 命令通过命令行轻松安装。按Super(Windows)键打开终端应用程序并通过应用程序启动器搜索终端,如下所示:通过输入 su 和 root 的密码以 root 身份登录。现在有权在 Debian 上添加/删除和配置软件。现输入以下命令以使用 Internet 更新本地存储库索引。这有助于您安装在线可用软件的最新版本。
# apt-get update
现在已准备好安装 Alsa-utils;可以通过运行以下命令来做到这一点 sudo:
# apt-get install alsa-utils
使用 Alsamixer-Alsa 的图形界面
Alsamixer 为您提供系统上安装的声卡的图形表示,并让您轻松查看和控制这些声卡的属性。其是 Ncurses 界面的一部分,因此可以在处理声卡音量时留在终端内。可以通过在终端中运行以下命令来启动此图形界面:
$ alsamixer
Alsamixer 将显示默认声卡的属性,如下所示。
Linux shell 上的 Alsamixer
如果无法看到以上屏幕截图中显示的所有属性,请展开您的终端窗口或使用左右箭头键查看不可见的属性。
Alsamixer 意见
当打开 Alsamixer 界面时会在回放视图中看到它。 这意味着您只能从该视图控制与声音播放相关的选项。以下是您可以切换到的另外两个视图:
捕获视图
为了查看仅与声音捕获相关的属性,可以在 Alsamixer 打开时按 F4 切换到捕获视图。
“全部”视图
为了查看与声音捕获和播放相关的属性,可以在 Alsamixer 打开时按 F5 切换到“全部”视图。 这是 All 视图的样子:
回放视图
要切换回回放视图,请按 F3 按钮。
声卡选择
Alsamixer 实用程序显示保存为“默认”的卡的属性。 为了查看/编辑系统上安装的另一个声卡的属性,您可以在 Alsamixer 打开时使用 F6 控件。
声卡选择
当按 F6 时,会出现如上所示的声卡菜单。可以上下移动菜单,然后点击 Enter 以选择另一张卡。如果卡没有出现在列表中,也可以通过选择“输入设备名称”菜单选项手动输入卡的名称。
可以按 Esc 退出此菜单。
控制声音属性
使用 Alsamixer 最重要的部分是能够调高和调低某个属性的音量。
可以左右移动以选择要调高、调低或静音其音量的属性。
选择属性后,使用向上和向下键分别调高和调低音量。
要使属性/控件静音,请在选择该属性时按 m 键
有关可以通过 Alsamixer 执行的所有操作的信息,请点击 F1 控件。
键绑定和帮助
您可以使用 Esc 键退出此帮助窗口。
通过命令使用 Amixer-Control 声音属性
Amixer 是一种基于命令的方法来管理声卡的属性。它提供了一组命令可以使用这些命令将指定卡的指定属性的音量调高、调低甚至静音。
使用以下命令查看可以使用 Amixer 执行的所有操作:
$ amixer --help
Alsamixer 命令行选项
你的 amixer 命令看起来像这样:
$ amix -c [card-number] 放 [control] [value]
在所有 amixer 命令中,需要指定三件事:
声卡(卡号) 你想管理谁的应用
控制 你想管理谁的音量
音量 您要设置、增加或减少的百分比或分贝。还可以指定是否要使声卡的某个属性静音。
control 命令可查看可以管理的控件列表:
$ amixer scontrols
混音器控制
重要的: 可以使用“su -”命令来管理更多控件,因为您将以 root 身份登录。
例子
1.以下命令将设置音量 第一声卡 100%
$ amixer -c 0 set Master 100%
2.以下命令将设置音量 第二声卡 30%
$ amixer -c 1 set Speaker 50%
3.以下命令将设置音量 扬声器 第二声卡 3分贝
$ amixer -c 1 set Speaker 3db
4.以下命令将 增加 音量 扬声器 第二声卡由 2分贝
$ amixer -c 1 set Speaker 2db+
5. 使用以下命令 沉默的 和 取消静音。
$ amixer -c 0 set Mic mute
或者
$ amixer -c 0 set Mic unmute
这完全是关于安装和使用 ALSA 实用程序,以便可以直接从 Debian 终端控制声音属性和音量。
Debian下配置PipeWire
PipeWire 是一个服务器和 API,用于在 Linux 上处理多媒体。它最常见的用途是为 Wayland 和 Flatpak 应用程序实现屏幕共享、远程桌面以及不同软件之间其他形式的音频和视频路由。根据它的官方FAQ,“你可以把它看作是应用程序和库可以使用的驱动之上的多媒体路由层”。
相较于 PulseAudio 专注于消费级音频和 JACK 专注于专业级音频,PipeWire 的目标是为所有级别的用户工作。在其他技术中,PipeWire 通过提供在不同的缓冲区大小之间动态切换的能力来实现这一目标,以适应不同音频应用的不同延迟要求。
在 Debian 10 中,PipeWire 0.2.5 是可用的,它应该不需要手动安装,因为它通常被使用它的应用程序作为一个依赖项带入。
在 Debian 11中,PipeWire 0.3.19 是可用的,并且可以试验性地用来替代 ALSA 用户空间库、PulseAudio 和 JACK。这是一个存在文档但不支持的用例。
在 Debian Testing 和 Debian Unstable 中有更新的 PipeWire 版本。对于这些分发的用户来说,PipeWire 应该更加可靠,在许多用例下可以很好地替代。
安装
在其最基本的形式下,PipeWire 可以简单地通过安装 pipewire 软件包来安装。
在 Debian 10 中,一些插件被分割成独立的软件包。这些插件可以在 libspa-bluetooth 和 libspa-ffmpeg 软件包中找到。
在 Debian 11 中,不再存在单独的 FFmpeg 插件软件包,蓝牙插件软件包也被移动到了 libspa-0.2-bluetooth。在 libspa-0.2-jack 软件包中有一个 JACK 插件,这是使用 PipeWire 作为 JACK 服务器所需要的(参见下文)。
对于 Debian 11 和更新的版本,PipeWire 可以用来替代 PulseAudio。此外,pipewire-audio-client-libraries 软件包也可用。这个软件包中提供的库允许直接访问 JACK 和 ALSA 的应用程序通过 PipeWire 服务器输出,这允许不同的声音服务器和 API 之间能够进行互操作。
对于 Debian 12 和更新的版本,pipewire-audio-client-libraries 被 pipewire-alsa 和 pipewire-jack 替代。
配置
作为 PulseAudio/JACK/ALSA 的替代使用
Debian 11
按照 Simon McVittie 的说法,“这不是 Debian 11 支持的方案,被认为是实验性的。”
它可能会破坏某些应用程序,缺少某些功能,或根本不能工作。用户也可能对 PipeWire 直接替代现有的 Linux 音频解决方案的能力(包括 PulseAudio 和 JACK)感兴趣。潜在的好处包括降低 CPU 使用率,更好地支持蓝牙设备,以及能够更好地整合使用 JACK 和 PulseAudio的应用程序。它已成为其他一些分发中的默认解决方案,特别是在 Fedora 34 和更新的版本中。
这种行为可以在 Debian 11 中实验性地启用。下面的三个关于 PipeWire 替换现存的音频服务的教程是相互独立的,但如果你打算使用 PipeWire 替换其中的任何一个,仍然强烈建议你使用 PipeWire 替换它们中的全部,以便在不同的应用程序之间进行最好的整合。
PulseAudio
在这种情况下,PipeWire 作为每个用户的音频服务运行,完全取代了 PulseAudio。
创建空文件:
# touch /etc/pipewire/media-session.d/with-pulseaudio
通过复制示例文件来创建 pipewire-pulse 服务:
# cp /usr/share/doc/pipewire/examples/systemd/user/pipewire-pulse.* /etc/systemd/user/
以普通用户(不是root)身份运行这三个命令:
//检查是否有新的服务文件:
systemctl --user daemon-reload
//禁用并停止 PulseAudio 服务:
systemctl --user --now disable pulseaudio.service pulseaudio.socket
//启用并启动新的 pipewire-pulse 服务:
systemctl --user --now enable pipewire pipewire-pulse
以普通用户身份运行以下命令,以检查哪一个服务器正在运行:
LANG=C pactl info | grep '^Server Name'
如果正在运行的是 PipeWire,显示的服务器名称应当是:
PulseAudio (On PipeWire 0.3.19)
确认在 PipeWire 能够在重启后继续工作。如果并非如此,可能需要通过以下命令来屏蔽 PulseAudio 服务:
systemctl --user mask pulseaudio
这可能需要你进行再次重启,此后你的系统应该只使用 PipeWire,即使再次进行重启后也是如此。这条命令将阻止 PulseAudio 服务被直接激活。如果你想恢复以前的状态,你需要使用 "unmask" 操作对相同的服务执行命令以解除屏蔽。
root
如果您希望以 root 用户身份运行 PipeWire,请删除或注释这一行:
ConditionUser=!root
需要编辑的文件:
"/usr/lib/systemd/user" 中的 "pipewire.socket" 和 "pipewire.service"
"/etc/xdg/systemd/user" 中的 "pipewire-pulse.service" 和 "pipewire-pulse.socket"
ALSA
ALSA 客户端可以被配置为通过 PipeWire 输出。
有些人可能将此描述为 “取代ALSA”,但正如 PipeWire 的 FAQ 所澄清的那样:“不,ALSA 是 Linux 音频堆栈的一个重要部分,它提供了与内核音频驱动的接口。但是,ALSA 用户空间库里有很多东西现在可能已经不需要了,比如效果插件、混音、路由等。PipeWire 使用 ALSA 核心功能的一个小子集来访问硬件。所有其他的功能都应该由 PipeWire 来处理。”
安装 pipewire-audio-client-libraries 软件包,如果它还没有被安装。
创建空文件
# touch /etc/pipewire/media-session.d/with-alsa
从 PipeWire 示例文件复制一个配置文件到你的 ALSA 配置目录:
# cp /usr/share/doc/pipewire/examples/alsa.conf.d/99-pipewire-default.conf /etc/alsa/conf.d/
JACK
JACK 客户端可以被配置为通过 PipeWire 而不是 JACK 输出。
安装 pipewire-audio-client-libraries 和 libspa-0.2-jack 软件包,如果它们还没有被安装。
创建空文件:
# touch /etc/pipewire/media-session.d/with-jack
要么使用 pw-jack 包装器运行 JACK 客户端,要么复制:
# cp /usr/share/doc/pipewire/examples/ld.so.conf.d/pipewire-jack-*.conf /etc/ld.so.conf.d/
并运行:
# ldconfig
这将在应用程序运行时用 PipeWire 的替代库替换 JACK 服务器库,方法是将动态链接器指向 /usr/lib/x86_64-linux-gnu/pipewire-0.3/jack/ 文件夹。
蓝牙
一般来说,PipeWire 与 Bluez 配合使用,在替代 PulseAudio 的情况下,可以为支持蓝牙的音频设备提供高质量的音频,但有一些注意事项。至少需要安装 libspa-0.2-bluetooth 软件包,删除 pulseaudio-module-bluetooth 软件包,然后重新启动你的计算机或重启 PipeWire 服务,否则设备连接将以 “协议不可用” 而失败。
默认情况下,PipeWire将尝试选择最佳的编解码器。你可以在 /etc/pipewire/media-session.d/bluez-monitor.conf 文件中覆盖这一行为,并调整许多其他相关设置。 你可以直接编辑这个文件,或者将该文件复制到 ~/.config/pipewire/media-session.d/bluez-monitor.conf 中,然后编辑它,以此来存储每个用户的本地修改。
此外,自从 PipeWire 0.3.19 发布以来,已经有许多与蓝牙相关的功能添加和错误修复。Debian Bullseye 中的版本并不代表 PipeWire 目前的状态。
Debian Testing/Unstable
新版本的 PipeWire 将出现在 Debian 12 中,它目前在 Debian Testing/Unstable 中出现,它的兼容性和可靠性都有很大的提高,而且也更容易配置为替代品。
现在有两个会话管理器可用。默认情况下的会话管理器(pipewire-media-session)是原始的,在使用 PipeWire 的基本功能如屏幕共享时是最好的。当使用 PipeWire 作为你的系统的声音服务器时,维护者建议安装更先进的 WirePlumber 代替。这个命令将安装 WirePlumber,同时删除旧的会话管理器:
# apt install wireplumber pipewire-media-session-
然后你需要在 systemd 中启用 WirePlumber (以普通用户身份运行,而不是以root身份):
$ systemctl --user --now enable wireplumber.service
当使用 WirePlumber 时,使用 PipeWire 作为你的声音服务器所需的配置非常少。事实上, WirePlumber 软件包推荐 pipewire-pulse ,所以这可能会自动发生。你只需要手动启用 ALSA 和 JACK 层,这不再需要在你的媒体会话的配置目录中创建一个空文件(因为使用 WirePlumber 时,该目录甚至不存在),但仍然需要从你的 /usr/share/doc/pipewire/examples/ 目录中复制文件,如 Debian 11 的说明中所述。
如果对自动蓝牙配置文件切换感兴趣(例如,当应用程序需要麦克风访问时,从 A2DP 切换到 HSP/HFP), WirePlumber 在 0.4.8 版本中获得了对它的支持。
与 Debian 11 相比,一个值得注意的变化是,配置目录从 /etc/pipewire/ 移动到了 /usr/share/pipewire/:可能想摆脱前者以避免混淆。
PulseAudio
安装 pipewire-pulse 软件包,并重新启动。这将配置 PipeWire 激活它的 PulseAudio 替代守护程序。通过运行以下命令验证它是否被激活:
LANG=C pactl info | grep '^Server Name'
如果 PipeWire 配置正确,这将会打印出:
Server Name: PulseAudio (on PipeWire 0.3.XX)
如果它不能正常工作,请参考 Debian 11 的对应教程中关于屏蔽 PulseAudio 服务的相关说明。
ALSA 和 JACK
在撰写本文时,Debian 11 的对应教程中的相关说明仍然适用。
请记住,如果使用 WirePlumber 而不是 pipewire-media-session,则不需要 "touch" 命令。关于你应该使用哪个会话管理器的更多细节,请参考本节顶部。如果正在使用 pipewire-media-session,注意它的配置目录已经从 /etc/pipewire/media-session.d/ 移动到 /usr/share/pipewire/media-session.d,在参照旧的说明时,请根据需要调整路径。
蓝牙
参考 Debian 11 的文档中对应的相关信息。
路由接收端、源端和音频设备
如果对使用 PipeWire 配置接收端和源端的管道感兴趣,就像通常使用 PulseAudio 所做的那样,最简单的方法是使用 QjackCtl。
首先确保已经正确配置了 PipeWire 以替代 ALSA、JACK 和 PulseAudio。然后,安装 qjackctl 软件包,并运行已被安装的软件。它应该已经被激活,检测到 PipeWire 是一个正在运行的 JACK 服务器。从其窗口点击 "Graph" 按钮。这将展示你系统上作为音频输入或输出的每个音频设备的图形表示。 此外,它还会显示每个正在输出或接收音频的活动程序,以及所有这些程序之间的连接状况。
可以通过简单的拖动来创建应用程序、音频硬件或其组合之间的新连接。一些流行的用途是:
1.将你的麦克风输入循环到你的音频输出,这样你就可以监视自己
2.同时通过多个音频输出设备播放音频
3.将你的音乐播放器作为一个假的麦克风,供其他应用程序接收语音输入。
这只有通过 PipeWire 才能实现,否则 QjackCtl 只会显示 JACK 客户端,而忽略了使用 PulseAudio 或 ALSA 的应用程序。然而,PipeWire 把所有这些都集中在一起,允许对可能使用不同 API 的程序进行任意的配置。同样的任务可以通过 PipeWire 的原生图形工具 qpwgraph 或 PipeWire的命令行工具 pw-link 来完成。这些工具允许在 PipeWire 端口之间创建和销毁链接(换句话说,它们取代了 JACK 的 jack_connect 和 jack_disconnect 工具)。
已知问题
pacmd 失败并报错 “没有运行的 PulseAudio 守护进程”
pacmd 命令失败并报错:
$ pacmd
No PulseAudio daemon running, or not running as session daemon.
pactl 命令在功能上应该是大致相当的,而且能够与 pipewire 后端一起工作。
跳过音频和 “客户端错过了一次唤醒”
至少有一个用户(TheAnarcat)在使用 pipewire 的工作站上运行(borg)备份时遇到了奇怪的 “音量降低” 和 “跳过音频” 问题。日志中出现了 “客户端错过了1次唤醒” 的信息,情况恶化到根本无法播放音频的地步。重新启动 pipewire,问题就解决了。
systemctl --user restart pipewire.service
在高负载系统上音频不稳定
与 PulseAudio 相比,PipeWire 的延迟较低,在高负载的系统上会导致音频不稳定。首先用 pw-top 命令查看 quantum ,然后用这个命令增加 quantum 值,直到音频变得更加平滑。
pw-metadata -n settings 0 clock.force-quantum 2048
一旦找到适合情况的 quantum 值,可以通过创建一个内容如下的配置文件 ~/.config/pipewire/pipewire.conf.d/choppy-under-load.conf,并重启与 pipewire 相关的守护程序,使这个值永久化。
context.properties = {
default.clock.force-quantum = 2048
default.clock.quantum = 2048
default.clock.min-quantum = 2048
}
1、什么是管道线?
Linux 上的音频始终遵循分层结构:您安装驱动程序,它使设备工作,但应用程序仍然希望以自己的方式与其通信。为此,服务器充当用户空间中的中介来与内核“对话”,然后内核与计算机的硬件进行对话。

高级 Linux 声音架构 (ALSA) 充当应用程序和内核之间良好、简单的中介,但如果想要更复杂的功能,则需要称为音频服务器的东西。

PulseAudio 和 PipeWire 都在内核所做的基础上添加了一层,以引入许多功能。它们允许多个应用程序传输音频,提供详细的混音器控制功能,甚至允许动态地对音频流进行后处理,其方式可以与商业操作系统提供的应用程序套件的功能相媲美甚至超越。
两者之间的区别在于,PipeWire 层添加了其他功能,例如管理视频流,同时还消除了一些使 PulseAudio 对于新用户来说不愉快的问题。自推出以来,PipeWire 的稳定性问题已逐渐消失,现在是各种发行版的默认声音服务器,包括 Fedora、基于 Arch 的 Manjaro、EndeavourOS、Garuda,甚至还引入了 Ubuntu 22.10。

对于大多数人来说,这种变化是如此无缝,以至于他们只感觉到他们在系统上使用音频的能力得到了扩展,这证明了其作为一项强大服务的声誉,可以直接升级到老化的 PulseAudio 框架。尽管人们很容易认为升级到 PipeWire 是理所当然的事情,但我们应该退后一步,探讨该决定背后的细微差别,以便您可以更清楚地了解如果您采取这一步,您将要注册什么:
优点
PipeWire包含对各种蓝牙音频设备的广泛支持,而这些设备以前在 PulseAudio 下无法完全工作。如果您的蓝牙硬件无法与您的发行版正常工作,那么进行迁移可能会有所帮助。
许多发行版已经开始将 PipeWire 作为默认音频服务,在官方存储库中获得大量支持,基本上您会遇到任何东西。
当同时将音频流式传输到多个设备时,PipeWire 可以更有效地处理延迟。
EasyEffects(以前称为 PulseEffects)等后处理器已在其版本中放弃了对 PulseAudio 的支持或计划很快这样做,因此有必要迁移到 PipeWire 以保持这些应用程序为您提供的灵活性。
这些功能对于想要进入更专业的音频设置和应用程序的人来说更加友好。
它支持视频流管道化,让屏幕共享应用程序享受更强大、更安全的环境。
PipeWire 的服务套件附带 pipewire-pulse,扩展了对使用 PulseAudio 的 API 和音频管理的应用程序的支持。
在高 CPU 负载下,它不太容易出现裂纹。
缺点
配置并不总是直接从 PulseAudio 转换过来,必须学习全新的配置方案。PipeWire没有任何直观的连接逻辑,这意味着它需要另一个服务来监听音频输出并正确路由它们。这不一定是缺点,但可能会很烦人,因为它还要求您学习如何配置会话管理器以进行高级调整。尽管在撰写本文时这种情况正在发生变化,但 PipeWire 的文档和社区支持仍然没有 PulseAudio 那样广泛。
提示:了解如何使用 PulseAudio 将音频投射到另一台设备。
2、如何安装管道线
如果想冒险在您的系统上安装 PipeWire,首先必须确保您尚未运行它!在终端中输入 pactl info 并查看“服务器名称”下提供的内容。如果它在括号中显示“on PipeWire”,则说明已经在运行 PipeWire。

如果终端仅显示“PulseAudio”,后面没有任何内容,则系统未运行 PipeWire。下为一列Debian GNU/Linux 11 (bullseye)在ThinkPAD T520下的输出:
$ pactl info
服务器字串:/run/user/1000/pulse/native
程序库协议版本:34
服务器协议版本:34
是否本地服务器:是
客户端索引:250
区块大小: 65472
用户名:freeoa
主机名:freeoa.net
服务器名:pulseaudio
服务器版本:14.2
默认采样规格:s16le 2ch 44100Hz
默认声道映射:front-left,front-right
默认音频入口:alsa_output.pci-0000_00_1b.0.analog-stereo
默认信源: alsa_output.pci-0000_00_1b.0.analog-stereo.monitor
Cookie:f371:7617
1. 备份系统
如果出现问题,请确保有回去的路!如果尚未创建系统备份,请在继续操作之前立即执行此操作。
2. 安装服务
每个 PipeWire 安装都从基本服务开始。发行版可能已经安装了它,但如果没有安装可以使用以下命令安装它。
在基于 Arch 的系统上:pacman -S pipewire pipewire-alsa
在基于 Ubuntu/Debian 的系统上:apt install pipewire
3. 安装会话管理器
PipeWire 没有自己的连接逻辑,因此必须安装会话管理器。WirePlumber 提供更精细的配置以及额外的插件,可以增强体验:
在基于 Arch 的系统上:
pacman -S wireplumber
在基于 Ubuntu/Debian 的系统上:
apt install wireplumber
如果喜欢更简单的版本或者发行版的官方存储库没有 WirePlumber,可以简单地安装 PipeWire Media Session:
在基于 Arch 的系统上:pacman -S pipewire-media-session
在基于 Ubuntu/Debian 的系统上:apt install pipewire-media-session
4. 安装 PulseAudio 守护进程
由于系统的大部分应用程序仍然向 PulseAudio 发送调用,因此如果您希望音频正常工作,则必须安装 PipeWire 的守护进程来监听 PulseAudio 的内容。
在基于 Arch 的系统上:pacman -S pipewire-pulse
在基于 Ubuntu/Debian 的系统上:apt install pipewire-pulse
5. 去除PulseAudio的痕迹
如果由于与在此过程中安装的其他内容(通常是 pipewire-pulse)发生冲突而必须确认删除 PulseAudio,那么您可以跳过此步骤。否则,现在从系统中删除 PulseAudio 非常重要,这样它就不会尝试查询它。
在基于 Arch 的系统上:pacman -Rns pulseaudio
在基于 Ubuntu/Debian 的系统上:apt remove pulseaudio
6. 准备好服务
完成所有已安装和卸载的软件包后,就可以启动并运行 PipeWire 了。首先删除pulseaudio服务的残余:
systemctl --user --now disable pulseaudio.service pulseaudio.socket
systemctl --user mask pulseaudio
启用 PipeWire 的服务。如果安装了 WirePlumber:
systemctl --user --now enable pipewire pipewire-pulse wireplumber
如果安装了 PipeWire Media Session,请使用:
systemctl --user --now enable pipewire pipewire-pulse pipewire-media-session
重新启动系统后,PipeWire 现在应该可以正常工作!
提示:如果您的 Linux 系统出现无声音问题,请按以下方法修复该问题。
3、常见问题
可以只使用 ALSA 吗?
绝对可以在系统上运行 ALSA(特别是如果您使用窗口管理器而不是桌面环境),但您可能不会喜欢它。ALSA 一次只能播放一个音频流。虽然这听起来不错,但这意味着当您在观看视频时尝试播放通知声音时,的系统可能会出现不可预测的行为。在 ALSA 之上使用声音服务器更方便,但肯定会涉及一点内存开销。
PipeWire 可以安装在 Linux Mint Cinnamon 中吗?
绝对地! Cinnamon 有一个有点可怕的时刻,当您完成正确的 PipeWire 安装时,它不会向您显示音频小部件,但如果您严格按照这些说明进行操作,它会在您重新启动时重新出现。只要确保按照我们在说明中概述的那样删除 PulseAudio 的残余部分,您就会成功!
如何解决睡眠后的音频问题?
如果将计算机从睡眠状态唤醒时,计算机的音频停止工作,很可能是因为 ALSA 未能正确初始化,这种情况偶尔会发生。对于此类情况,只需手动使用 ALSA:alsactl init
在Debian上控制ALSA音频
ALSA 或 Advanced Linux Sound Architecture 为大多数 Linux 发行版提供音频支持。 Debian 目前很有可能使用相同的架构来运行和管理系统上的音频。在本节中将解释如果您的 Debian 上尚未安装 ALSA 实用程序包,您如何安装它。还解释如何通过以下方式控制声卡的音频属性:
1.Alsamixer-ALSA 的图形界面
2.Amixer-ALSA 的基于命令的实用程序
在 Debian Buster 系统上运行了提到的命令和过程。
安装 ALSA
Alsa-utils 包包含 Alsamixer 和 Amixer 实用程序。该软件包可在官方 Debian 存储库中获得,并且可以使用 apt-get 命令通过命令行轻松安装。按Super(Windows)键打开终端应用程序并通过应用程序启动器搜索终端,如下所示:通过输入 su 和 root 的密码以 root 身份登录。现在有权在 Debian 上添加/删除和配置软件。现输入以下命令以使用 Internet 更新本地存储库索引。这有助于您安装在线可用软件的最新版本。
# apt-get update
现在已准备好安装 Alsa-utils;可以通过运行以下命令来做到这一点 sudo:
# apt-get install alsa-utils
使用 Alsamixer-Alsa 的图形界面
Alsamixer 为您提供系统上安装的声卡的图形表示,并让您轻松查看和控制这些声卡的属性。其是 Ncurses 界面的一部分,因此可以在处理声卡音量时留在终端内。可以通过在终端中运行以下命令来启动此图形界面:
$ alsamixer
Alsamixer 将显示默认声卡的属性,如下所示。
Linux shell 上的 Alsamixer
如果无法看到以上屏幕截图中显示的所有属性,请展开您的终端窗口或使用左右箭头键查看不可见的属性。
Alsamixer 意见
当打开 Alsamixer 界面时会在回放视图中看到它。 这意味着您只能从该视图控制与声音播放相关的选项。以下是您可以切换到的另外两个视图:
捕获视图
为了查看仅与声音捕获相关的属性,可以在 Alsamixer 打开时按 F4 切换到捕获视图。
“全部”视图
为了查看与声音捕获和播放相关的属性,可以在 Alsamixer 打开时按 F5 切换到“全部”视图。 这是 All 视图的样子:
回放视图
要切换回回放视图,请按 F3 按钮。
声卡选择
Alsamixer 实用程序显示保存为“默认”的卡的属性。 为了查看/编辑系统上安装的另一个声卡的属性,您可以在 Alsamixer 打开时使用 F6 控件。
声卡选择
当按 F6 时,会出现如上所示的声卡菜单。可以上下移动菜单,然后点击 Enter 以选择另一张卡。如果卡没有出现在列表中,也可以通过选择“输入设备名称”菜单选项手动输入卡的名称。
可以按 Esc 退出此菜单。
控制声音属性
使用 Alsamixer 最重要的部分是能够调高和调低某个属性的音量。
可以左右移动以选择要调高、调低或静音其音量的属性。
选择属性后,使用向上和向下键分别调高和调低音量。
要使属性/控件静音,请在选择该属性时按 m 键
有关可以通过 Alsamixer 执行的所有操作的信息,请点击 F1 控件。
键绑定和帮助
您可以使用 Esc 键退出此帮助窗口。
通过命令使用 Amixer-Control 声音属性
Amixer 是一种基于命令的方法来管理声卡的属性。它提供了一组命令可以使用这些命令将指定卡的指定属性的音量调高、调低甚至静音。
使用以下命令查看可以使用 Amixer 执行的所有操作:
$ amixer --help
Alsamixer 命令行选项
你的 amixer 命令看起来像这样:
$ amix -c [card-number] 放 [control] [value]
在所有 amixer 命令中,需要指定三件事:
声卡(卡号) 你想管理谁的应用
控制 你想管理谁的音量
音量 您要设置、增加或减少的百分比或分贝。还可以指定是否要使声卡的某个属性静音。
control 命令可查看可以管理的控件列表:
$ amixer scontrols
混音器控制
重要的: 可以使用“su -”命令来管理更多控件,因为您将以 root 身份登录。
例子
1.以下命令将设置音量 第一声卡 100%
$ amixer -c 0 set Master 100%
2.以下命令将设置音量 第二声卡 30%
$ amixer -c 1 set Speaker 50%
3.以下命令将设置音量 扬声器 第二声卡 3分贝
$ amixer -c 1 set Speaker 3db
4.以下命令将 增加 音量 扬声器 第二声卡由 2分贝
$ amixer -c 1 set Speaker 2db+
5. 使用以下命令 沉默的 和 取消静音。
$ amixer -c 0 set Mic mute
或者
$ amixer -c 0 set Mic unmute
这完全是关于安装和使用 ALSA 实用程序,以便可以直接从 Debian 终端控制声音属性和音量。
Debian下配置PipeWire
PipeWire 是一个服务器和 API,用于在 Linux 上处理多媒体。它最常见的用途是为 Wayland 和 Flatpak 应用程序实现屏幕共享、远程桌面以及不同软件之间其他形式的音频和视频路由。根据它的官方FAQ,“你可以把它看作是应用程序和库可以使用的驱动之上的多媒体路由层”。
相较于 PulseAudio 专注于消费级音频和 JACK 专注于专业级音频,PipeWire 的目标是为所有级别的用户工作。在其他技术中,PipeWire 通过提供在不同的缓冲区大小之间动态切换的能力来实现这一目标,以适应不同音频应用的不同延迟要求。
在 Debian 10 中,PipeWire 0.2.5 是可用的,它应该不需要手动安装,因为它通常被使用它的应用程序作为一个依赖项带入。
在 Debian 11中,PipeWire 0.3.19 是可用的,并且可以试验性地用来替代 ALSA 用户空间库、PulseAudio 和 JACK。这是一个存在文档但不支持的用例。
在 Debian Testing 和 Debian Unstable 中有更新的 PipeWire 版本。对于这些分发的用户来说,PipeWire 应该更加可靠,在许多用例下可以很好地替代。
安装
在其最基本的形式下,PipeWire 可以简单地通过安装 pipewire 软件包来安装。
在 Debian 10 中,一些插件被分割成独立的软件包。这些插件可以在 libspa-bluetooth 和 libspa-ffmpeg 软件包中找到。
在 Debian 11 中,不再存在单独的 FFmpeg 插件软件包,蓝牙插件软件包也被移动到了 libspa-0.2-bluetooth。在 libspa-0.2-jack 软件包中有一个 JACK 插件,这是使用 PipeWire 作为 JACK 服务器所需要的(参见下文)。
对于 Debian 11 和更新的版本,PipeWire 可以用来替代 PulseAudio。此外,pipewire-audio-client-libraries 软件包也可用。这个软件包中提供的库允许直接访问 JACK 和 ALSA 的应用程序通过 PipeWire 服务器输出,这允许不同的声音服务器和 API 之间能够进行互操作。
对于 Debian 12 和更新的版本,pipewire-audio-client-libraries 被 pipewire-alsa 和 pipewire-jack 替代。
配置
作为 PulseAudio/JACK/ALSA 的替代使用
Debian 11
按照 Simon McVittie 的说法,“这不是 Debian 11 支持的方案,被认为是实验性的。”
它可能会破坏某些应用程序,缺少某些功能,或根本不能工作。用户也可能对 PipeWire 直接替代现有的 Linux 音频解决方案的能力(包括 PulseAudio 和 JACK)感兴趣。潜在的好处包括降低 CPU 使用率,更好地支持蓝牙设备,以及能够更好地整合使用 JACK 和 PulseAudio的应用程序。它已成为其他一些分发中的默认解决方案,特别是在 Fedora 34 和更新的版本中。
这种行为可以在 Debian 11 中实验性地启用。下面的三个关于 PipeWire 替换现存的音频服务的教程是相互独立的,但如果你打算使用 PipeWire 替换其中的任何一个,仍然强烈建议你使用 PipeWire 替换它们中的全部,以便在不同的应用程序之间进行最好的整合。
PulseAudio
在这种情况下,PipeWire 作为每个用户的音频服务运行,完全取代了 PulseAudio。
创建空文件:
# touch /etc/pipewire/media-session.d/with-pulseaudio
通过复制示例文件来创建 pipewire-pulse 服务:
# cp /usr/share/doc/pipewire/examples/systemd/user/pipewire-pulse.* /etc/systemd/user/
以普通用户(不是root)身份运行这三个命令:
//检查是否有新的服务文件:
systemctl --user daemon-reload
//禁用并停止 PulseAudio 服务:
systemctl --user --now disable pulseaudio.service pulseaudio.socket
//启用并启动新的 pipewire-pulse 服务:
systemctl --user --now enable pipewire pipewire-pulse
以普通用户身份运行以下命令,以检查哪一个服务器正在运行:
LANG=C pactl info | grep '^Server Name'
如果正在运行的是 PipeWire,显示的服务器名称应当是:
PulseAudio (On PipeWire 0.3.19)
确认在 PipeWire 能够在重启后继续工作。如果并非如此,可能需要通过以下命令来屏蔽 PulseAudio 服务:
systemctl --user mask pulseaudio
这可能需要你进行再次重启,此后你的系统应该只使用 PipeWire,即使再次进行重启后也是如此。这条命令将阻止 PulseAudio 服务被直接激活。如果你想恢复以前的状态,你需要使用 "unmask" 操作对相同的服务执行命令以解除屏蔽。
root
如果您希望以 root 用户身份运行 PipeWire,请删除或注释这一行:
ConditionUser=!root
需要编辑的文件:
"/usr/lib/systemd/user" 中的 "pipewire.socket" 和 "pipewire.service"
"/etc/xdg/systemd/user" 中的 "pipewire-pulse.service" 和 "pipewire-pulse.socket"
ALSA
ALSA 客户端可以被配置为通过 PipeWire 输出。
有些人可能将此描述为 “取代ALSA”,但正如 PipeWire 的 FAQ 所澄清的那样:“不,ALSA 是 Linux 音频堆栈的一个重要部分,它提供了与内核音频驱动的接口。但是,ALSA 用户空间库里有很多东西现在可能已经不需要了,比如效果插件、混音、路由等。PipeWire 使用 ALSA 核心功能的一个小子集来访问硬件。所有其他的功能都应该由 PipeWire 来处理。”
安装 pipewire-audio-client-libraries 软件包,如果它还没有被安装。
创建空文件
# touch /etc/pipewire/media-session.d/with-alsa
从 PipeWire 示例文件复制一个配置文件到你的 ALSA 配置目录:
# cp /usr/share/doc/pipewire/examples/alsa.conf.d/99-pipewire-default.conf /etc/alsa/conf.d/
JACK
JACK 客户端可以被配置为通过 PipeWire 而不是 JACK 输出。
安装 pipewire-audio-client-libraries 和 libspa-0.2-jack 软件包,如果它们还没有被安装。
创建空文件:
# touch /etc/pipewire/media-session.d/with-jack
要么使用 pw-jack 包装器运行 JACK 客户端,要么复制:
# cp /usr/share/doc/pipewire/examples/ld.so.conf.d/pipewire-jack-*.conf /etc/ld.so.conf.d/
并运行:
# ldconfig
这将在应用程序运行时用 PipeWire 的替代库替换 JACK 服务器库,方法是将动态链接器指向 /usr/lib/x86_64-linux-gnu/pipewire-0.3/jack/ 文件夹。
蓝牙
一般来说,PipeWire 与 Bluez 配合使用,在替代 PulseAudio 的情况下,可以为支持蓝牙的音频设备提供高质量的音频,但有一些注意事项。至少需要安装 libspa-0.2-bluetooth 软件包,删除 pulseaudio-module-bluetooth 软件包,然后重新启动你的计算机或重启 PipeWire 服务,否则设备连接将以 “协议不可用” 而失败。
默认情况下,PipeWire将尝试选择最佳的编解码器。你可以在 /etc/pipewire/media-session.d/bluez-monitor.conf 文件中覆盖这一行为,并调整许多其他相关设置。 你可以直接编辑这个文件,或者将该文件复制到 ~/.config/pipewire/media-session.d/bluez-monitor.conf 中,然后编辑它,以此来存储每个用户的本地修改。
此外,自从 PipeWire 0.3.19 发布以来,已经有许多与蓝牙相关的功能添加和错误修复。Debian Bullseye 中的版本并不代表 PipeWire 目前的状态。
Debian Testing/Unstable
新版本的 PipeWire 将出现在 Debian 12 中,它目前在 Debian Testing/Unstable 中出现,它的兼容性和可靠性都有很大的提高,而且也更容易配置为替代品。
现在有两个会话管理器可用。默认情况下的会话管理器(pipewire-media-session)是原始的,在使用 PipeWire 的基本功能如屏幕共享时是最好的。当使用 PipeWire 作为你的系统的声音服务器时,维护者建议安装更先进的 WirePlumber 代替。这个命令将安装 WirePlumber,同时删除旧的会话管理器:
# apt install wireplumber pipewire-media-session-
然后你需要在 systemd 中启用 WirePlumber (以普通用户身份运行,而不是以root身份):
$ systemctl --user --now enable wireplumber.service
当使用 WirePlumber 时,使用 PipeWire 作为你的声音服务器所需的配置非常少。事实上, WirePlumber 软件包推荐 pipewire-pulse ,所以这可能会自动发生。你只需要手动启用 ALSA 和 JACK 层,这不再需要在你的媒体会话的配置目录中创建一个空文件(因为使用 WirePlumber 时,该目录甚至不存在),但仍然需要从你的 /usr/share/doc/pipewire/examples/ 目录中复制文件,如 Debian 11 的说明中所述。
如果对自动蓝牙配置文件切换感兴趣(例如,当应用程序需要麦克风访问时,从 A2DP 切换到 HSP/HFP), WirePlumber 在 0.4.8 版本中获得了对它的支持。
与 Debian 11 相比,一个值得注意的变化是,配置目录从 /etc/pipewire/ 移动到了 /usr/share/pipewire/:可能想摆脱前者以避免混淆。
PulseAudio
安装 pipewire-pulse 软件包,并重新启动。这将配置 PipeWire 激活它的 PulseAudio 替代守护程序。通过运行以下命令验证它是否被激活:
LANG=C pactl info | grep '^Server Name'
如果 PipeWire 配置正确,这将会打印出:
Server Name: PulseAudio (on PipeWire 0.3.XX)
如果它不能正常工作,请参考 Debian 11 的对应教程中关于屏蔽 PulseAudio 服务的相关说明。
ALSA 和 JACK
在撰写本文时,Debian 11 的对应教程中的相关说明仍然适用。
请记住,如果使用 WirePlumber 而不是 pipewire-media-session,则不需要 "touch" 命令。关于你应该使用哪个会话管理器的更多细节,请参考本节顶部。如果正在使用 pipewire-media-session,注意它的配置目录已经从 /etc/pipewire/media-session.d/ 移动到 /usr/share/pipewire/media-session.d,在参照旧的说明时,请根据需要调整路径。
蓝牙
参考 Debian 11 的文档中对应的相关信息。
路由接收端、源端和音频设备
如果对使用 PipeWire 配置接收端和源端的管道感兴趣,就像通常使用 PulseAudio 所做的那样,最简单的方法是使用 QjackCtl。
首先确保已经正确配置了 PipeWire 以替代 ALSA、JACK 和 PulseAudio。然后,安装 qjackctl 软件包,并运行已被安装的软件。它应该已经被激活,检测到 PipeWire 是一个正在运行的 JACK 服务器。从其窗口点击 "Graph" 按钮。这将展示你系统上作为音频输入或输出的每个音频设备的图形表示。 此外,它还会显示每个正在输出或接收音频的活动程序,以及所有这些程序之间的连接状况。
可以通过简单的拖动来创建应用程序、音频硬件或其组合之间的新连接。一些流行的用途是:
1.将你的麦克风输入循环到你的音频输出,这样你就可以监视自己
2.同时通过多个音频输出设备播放音频
3.将你的音乐播放器作为一个假的麦克风,供其他应用程序接收语音输入。
这只有通过 PipeWire 才能实现,否则 QjackCtl 只会显示 JACK 客户端,而忽略了使用 PulseAudio 或 ALSA 的应用程序。然而,PipeWire 把所有这些都集中在一起,允许对可能使用不同 API 的程序进行任意的配置。同样的任务可以通过 PipeWire 的原生图形工具 qpwgraph 或 PipeWire的命令行工具 pw-link 来完成。这些工具允许在 PipeWire 端口之间创建和销毁链接(换句话说,它们取代了 JACK 的 jack_connect 和 jack_disconnect 工具)。
已知问题
pacmd 失败并报错 “没有运行的 PulseAudio 守护进程”
pacmd 命令失败并报错:
$ pacmd
No PulseAudio daemon running, or not running as session daemon.
pactl 命令在功能上应该是大致相当的,而且能够与 pipewire 后端一起工作。
跳过音频和 “客户端错过了一次唤醒”
至少有一个用户(TheAnarcat)在使用 pipewire 的工作站上运行(borg)备份时遇到了奇怪的 “音量降低” 和 “跳过音频” 问题。日志中出现了 “客户端错过了1次唤醒” 的信息,情况恶化到根本无法播放音频的地步。重新启动 pipewire,问题就解决了。
systemctl --user restart pipewire.service
在高负载系统上音频不稳定
与 PulseAudio 相比,PipeWire 的延迟较低,在高负载的系统上会导致音频不稳定。首先用 pw-top 命令查看 quantum ,然后用这个命令增加 quantum 值,直到音频变得更加平滑。
pw-metadata -n settings 0 clock.force-quantum 2048
一旦找到适合情况的 quantum 值,可以通过创建一个内容如下的配置文件 ~/.config/pipewire/pipewire.conf.d/choppy-under-load.conf,并重启与 pipewire 相关的守护程序,使这个值永久化。
context.properties = {
default.clock.force-quantum = 2048
default.clock.quantum = 2048
default.clock.min-quantum = 2048
}