前言
PipeWire开发工作最早可以追溯到2015年,最初被认为是 “视频领域的 PulseAudio",但后来也扩展到了音频领域。2021年4月发布的 Fedora34 成为了第一个默认采用了这项技术的发行版,其他桌面 Linux 发行版之后也很快跟进。相比之下,Ubuntu 进度远远落后于其竞争对手。
PipeWire 的优点:
- 首先 PipeWire 的实现方式更新,开发也更加积极,bug 相对也就更少;
- 其次 PipeWire 有更好的硬件兼容性(PulseAudio 不支持很多新的蓝牙耳机),还减少了 CPU 的使用,代码基础更现代化;
- 与PulseAudio相比,对现代蓝牙音频设备(例如,Apple Air Pods)的支持更好;
WirePlumber, 一个流行的PipeWire会话和策略管理器。
Ubuntu 22.04 LTS 的默认镜像会同时安装 PipeWire 和 PulseAudio。 PipeWire 只用于视频,PulseAudio 处理音频。需要手动将 PipeWire 设为默认的音频服务器。
Ubuntu 22.10(代号 "Kinetic Kudu")开发版本的日常构建中,Pipewire已经取代了 PulseAudio,成为了 Ubuntu 的默认音频服务器,不再需要任何设置。
配置PipeWire为默认音频服务器
Ubuntu 22.04部分安装并启用了PipeWire。启用剩余的部分,并使用PipeWire进行音频和蓝牙,而不是PulseAudio。
安装
检查环境
Pipewire预先安装,并自动作为后台服务运行。在终端运行下面的命令来进行确认
1
systemctl --user status pipewire pipewire-session-manager
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
● pipewire.service - PipeWire Multimedia Service Loaded: loaded (/usr/lib/systemd/user/pipewire.service; enabled; vendor preset: enabled) Active: active (running) since Thu 2022-09-29 14:21:51 CST; 8min ago TriggeredBy: ● pipewire.socket Main PID: 2657 (pipewire) Tasks: 2 (limit: 75541) Memory: 6.6M CPU: 142ms CGroup: /user.slice/user-1000.slice/user@1000.service/session.slice/pipewire.service └─2657 /usr/bin/pipewire Sep 29 14:21:51 hex-Pad systemd[2650]: Started PipeWire Multimedia Service. Sep 29 14:21:51 hex-Pad pipewire[2657]: Cannot connect to server socket err = 没有那个文件或目录 Sep 29 14:21:51 hex-Pad pipewire[2657]: Cannot connect to server request channel Sep 29 14:21:51 hex-Pad pipewire[2657]: jack server is not running or cannot be started Sep 29 14:21:51 hex-Pad pipewire[2657]: JackShmReadWritePtr::~JackShmReadWritePtr - Init not done for -1, skipping unlock Sep 29 14:21:51 hex-Pad pipewire[2657]: JackShmReadWritePtr::~JackShmReadWritePtr - Init not done for -1, skipping unlock Sep 29 14:21:51 hex-Pad pipewire[2657]: jack-device 0x5595b2c0bd58: can't open client: 拒绝连接 ● pipewire-media-session.service - PipeWire Media Session Manager Loaded: loaded (/usr/lib/systemd/user/pipewire-media-session.service; enabled; vendor preset: enabled) Active: active (running) since Thu 2022-09-29 14:21:51 CST; 8min ago Main PID: 2658 (pipewire-media-) Tasks: 2 (limit: 75541) Memory: 4.9M CPU: 108ms CGroup: /user.slice/user-1000.slice/user@1000.service/session.slice/pipewire-media-session.service └─2658 /usr/bin/pipewire-media-session Sep 29 14:21:51 hex-Pad systemd[2650]: Started PipeWire Media Session Manager.
安装客户端包
默认情况下,音频输出并。运行命令安装客户端库:
1
sudo apt install pipewire-audio-client-libraries libspa-0.2-bluetooth libspa-0.2-jack
安装WirePlumber作为会话管理器:
1
sudo apt install pipewire-media-session- wireplumber
注意’pipe - wire-media-session’后面的’-’。这是为了在同一个命令中删除它,因为将使用’wireplumber’代替。
1
systemctl --user --now enable wireplumber.service
安装蓝牙编码器 AAC/LDAC/AptX:
1 2 3 4
sudo apt install \ libfdk-aac2 \ libldacbt-{abr,enc}2 \ libopenaptx0
配置
Wireplumber使事情变得非常容易!如果只想用PipeWire替换Pulseaudio,则启用媒体会话服务和重新启动,仅此而已!
ALSA客户端配置PipeWire输出
将PipeWire示例中的配置文件复制到ALSA配置目录中:
1
sudo cp /usr/share/doc/pipewire/examples/alsa.conf.d/99-pipewire-default.conf /etc/alsa/conf.d/
JACK客户端配置PipeWire输出:
1
sudo cp /usr/share/doc/pipewire/examples/ld.so.conf.d/pipewire-jack-*.conf /etc/ld.so.conf.d/
sudo ldconfig
Bluetooth客户端
只需删除此包装,蓝牙将由PipeWire处理:
1
sudo apt remove pulseaudio-module-bluetooth
检查
通过客户端工具pactl检查:
|
|
返回值
|
|
通过systemctl检查pipewire服务状态
|
|
配置返回值
|
|
检查已安装deb包
|
|
其他问题
1. systemctl –user status 执行失败
ubuntu22.04 登录会出现问题,导致出现报错
|
|
原因是:缺少环境变量XDG_RUNTIME_DIR
, 怀疑之前将18.04$HOME目录下内容覆盖了22.04下的内容,导致~/.profile或~/.bashrc的内容出现问题。目前通过下面命令进行屏蔽
|
|
2. wireplumber在pipewire-media-session未卸载之前,为masked状态无法enable
mask
是个比disable
更彻底的状态。使用
disable
会删除服务相关的unit-file;使用
mask
则会将其link至/dev/null
,其对比disable的优势是防止任何形式的激活,包括手动
systemctl list-unit-files
命令来显示unit-files的状态,(static, enabled, disabled, masked, indirect)
systemctl list-units
命令来显示服务的状态
3. 恢复pulseaudio为音频处理
要撤消更改,首先删除客户端库:
|
|
删除WirePlumber并安装以前的pipewire-media-session
|
|
最后,重新启用PipeWire-Media-Session服务:
|
|
如果声音仍无法正常工作,尝试通过命令禁用PipeWire-Pulse服务:
|
|
重新启用re-enable pulseaudio服务:
|
|
重启
|
|
Reference
上下文:
PipeWire is the default audio server in Ubuntu 22.10.
配置:
Enable PipeWire on Ubuntu 22.04
How to Use PipeWire to replace PulseAudio in Ubuntu 22.04
其他