- A+
背景
在 这篇博客中提到,我通过安装安装 pipewire 的方式,解决了 debian 12 + kde + wayland 下飞书的屏幕共享问题。
在此之后,通过飞书开会倒是一切正常。只不过在会议时,当屏幕共享的时候对方偶尔能听到自己的回音,如果我自己 mute 则正常。神奇的是,我用耳机的时候也会这样,此时声音不太可能进入到麦克风中。
之前一直怀疑是设备的设置问题或者飞书的兼容性问题。直到前两天突然在想,有没有可能和 pipewire 相关?
什么是 Pipewire?
从官网信息看,Pipewire 的目标是改善 Linux 下的音视频处理,提供了一个低延时的、基于图的音视频处理引擎,可用以替代 PulseAudio 和 JACK。
PipeWire is a project that aims to greatly improve handling of audio and video under Linux. It provides a low-latency, graph-based processing engine on top of audio and video devices that can be used to support the use cases currently handled by both PulseAudio and JACK. PipeWire was designed with a powerful security model that makes interacting with audio and video devices from containerized applications easy, with support for Flatpak applications being the primary goal. Alongside Wayland and Flatpak, we expect PipeWire to provide a core building block for the future of Linux application development.
从这里可以看到,PipeWire 和 PulseAudio 是替代关系。
那有没有可能,因为 PipeWire 和 PulseAudio 都在工作或者冲突,导致了一些奇怪的问题?
Debian 上的 Pipewire
我查了下电脑上,果然安装了 PulseAudio:
dpkg -l | grep pulseaudio
于是简单查了一下,在 debian 的官方 wiki 上,可以看到 Gnome 环境下默认切换到了 Pipewire,而其他桌面环境还不是:
In Debian 12, PipeWire 0.3.65 is available, and is considerably more reliable, and is a comfortable drop-in replacement for many use-cases. PipeWire is the default sound server with GNOME Desktop.
这也是为什么,之前为了解决屏幕共享的问题,我需要手动安装 pipewire。
只不过目前看起来确实替换地不完整,需要重新搞一下。
使用 PipeWire 替换 PulseAudio
- Step1: 安装 Pipeline 相关的包
sudo apt install pipewire-audio # This metapackage depends on a recommended set of pipewire packages for a standard audio desktop use. # 所以桌面环境安装这个就够了。建议只安装这个 meta package,尽量减少未来升级系统时冲突的概率。 # 这个 meta package 也会自动删除 pulseaudio 和 pulseaudio-module-bluetooth 相关的包,避免冲突。
然后重启电脑。
- 打开相关服务
systemctl --user --now enable wireplumber.service # 注意不是 root,不需要 sudo
- 检查是否生效
> pactl info | grep '^Server Name' Server Name: PulseAudio (on PipeWire 0.3.65)
可以看到,已经在使用 PipeWire 了。
P.S. 如果没有 pactl 命令,可以安装一下:
sudo apt install pulseaudio-utils # 这个包只是 check 用的一些工具,不影响正常的功能,也可以不装。
也可以再检查下 ALSA 是否已经开始使用 PipeWire:
> aplay -L | grep -A 1 default default Default ALSA Output (currently PipeWire Media Server)
可以看到,ALSA 也正常使用 PipeWire 服务。
其他
Debian 官方 wiki 中还提到了 JACK 的配置,还挺麻烦的。我看了下我的电脑上本来也没有 JACK 相关的包,因此就没有安装和配置了。
结尾
在我把 PulseAudio 替换成 PipeWire 之后,确实没在出现开会的时候回音的问题了,说明这个方法确实有效。至于为什么会有回音,恕我才疏学浅,暂未可知 😃
Linux 环境里,经常出现一些相互可替代的方案,wayland 和 x11 也是类似的关系。揉在一起就容易出现各种奇葩的问题。目前也只能寄希望于相关生态尽快完成迁移,减少历史包袱吧...