前言
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预先安装,并自动作为后台服务运行。在终端运行下面的命令来进行确认
1systemctl --user status pipewire pipewire-session-manager1 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.安装客户端包
默认情况下,音频输出并。运行命令安装客户端库:
1sudo apt install pipewire-audio-client-libraries libspa-0.2-bluetooth libspa-0.2-jack安装WirePlumber作为会话管理器:
1sudo apt install pipewire-media-session- wireplumber注意’pipe - wire-media-session’后面的’-’。这是为了在同一个命令中删除它,因为将使用’wireplumber’代替。
1systemctl --user --now enable wireplumber.service安装蓝牙编码器 AAC/LDAC/AptX:
1 2 3 4sudo apt install \ libfdk-aac2 \ libldacbt-{abr,enc}2 \ libopenaptx0
配置
Wireplumber使事情变得非常容易!如果只想用PipeWire替换Pulseaudio,则启用媒体会话服务和重新启动,仅此而已!
ALSA客户端配置PipeWire输出
将PipeWire示例中的配置文件复制到ALSA配置目录中:
1sudo cp /usr/share/doc/pipewire/examples/alsa.conf.d/99-pipewire-default.conf /etc/alsa/conf.d/JACK客户端配置PipeWire输出:
1sudo cp /usr/share/doc/pipewire/examples/ld.so.conf.d/pipewire-jack-*.conf /etc/ld.so.conf.d/sudo ldconfig
Bluetooth客户端
只需删除此包装,蓝牙将由PipeWire处理:
1sudo 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
其他