PipeWire

来自 阿尔派 Linux

PipeWire 是一个旨在改进 Linux 上音频和视频处理的多媒体处理引擎。 Pipewire 可以作为 PulseAudioALSA 服务器的替代品。

先决条件

PipeWire 需要运行 D-Bus 系统和/或会话总线才能实现其大部分功能。如果您启动会话范围的 dbus 实例,请确保在同一会话中启动 PipeWire。

PipeWire 需要适当的权限才能访问设备。如果使用 elogind,则无需进一步配置。否则,用户应加入 audio (以访问音频设备)和 video (以访问网络摄像头设备)组。请务必重新登录以使这些更改生效

# addgroup <user> audio # addgroup <user> video

警告: video 组的成员资格还将授予对视频设备的无限制访问权限,这通常是一个安全问题。有关更多详细信息,请参阅问题 #15409


安装

以下软件包,即 pipewirewireplumber 会话管理器,是使 pipewire 工作所需的最低软件包。

# apk add pipewire wireplumber

Pulseaudio 接口

软件包 pipewire-pulse 允许 pulseaudio 应用程序使用 PipeWire 作为后端的音频服务器。

# apk add pipewire-pulse

JACK 兼容性

由于 Pipewire 替代了 JACK,因此安装 pipewire-jack 软件包,以便它为 JACK 应用程序提供 ABI 兼容的库。

# apk add pipewire-jack

ALSA 支持

安装 pipewire-alsa 软件包以提供对 Alsa 应用程序的支持。

# apk add pipewire-alsa

GUI 工具

pavucontrolpavucontrol-qt 软件包提供了一个简单的 GUI 应用程序,用于控制声音、输出等。要使用 pavucontrol 工具,请安装 pipewire-pulse,因为该工具仍然需要 Pulseaudio 接口。XFCE 音频混音器也可以通过安装软件包 xfce4-mixer 来帮助控制音量,该软件包目前在 testing 仓库中可用。

qpwgraph' 是一个专用于 PipeWire 的图形管理器,带有 Qt GUI 界面。

配置

PipeWire 和 WirePlumber 将其默认配置分别存储在 /usr/share/pipewire/usr/share/wireplumber 中。如果要编辑配置,则需要将其移动到 /etc

# cp -a /usr/share/pipewire /etc # cp -a /usr/share/wireplumber /etc

pipewire-launcher

使用 阿尔派 Linux 提供的 pipewire-launcher 脚本启动 PipeWire 媒体服务器。您可能会收到很多错误,但暂时忽略它们。

$ /usr/libexec/pipewire-launcher

如果使用 .xinitrc,请将 /usr/libexec/pipewire-launcher 添加到您的 ~/.xinitrc 中。

如果您默认不使用 GUI,请将以下节添加到您的 shell 配置文件中

export $(dbus-launch) /usr/libexec/pipewire-launcher

提示: 您还可以使用 superd 来管理 pipewire 及其相关服务。

Wayland 上的屏幕共享

您将需要适用于您的桌面环境的正确 xdg-desktop-portal 后端。已知屏幕共享在以下环境中工作:

  • GNOME,使用 xdg-desktop-portal-gtk
  • KDE Plasma,使用 xdg-desktop-portal-kde 和 Firefox
  • Sway,使用 xdg-desktop-portal-wlr 和 Firefox,有关详细信息,请参阅 Sway

蓝牙音频

  • 启用如上所述的 PulseAudio 支持
  • 安装蓝牙服务软件包:bluez bluez-openrc pipewire-spa-bluez
  • 可选:安装蓝牙 GUI 管理器 blueman
  • 启用并启动蓝牙服务:rc-update add bluetooth; rc-service bluetooth start
  • 重启 PipeWire
  • 使用命令行程序 bluetoothctl 或 GUI 程序 blueman-manager 扫描和配对蓝牙音频设备。
  • 使用 pavucontrol 调整音量并手动选择高清蓝牙编解码器。

视频

视频应该可以与 v4l2 设备(例如,许多网络摄像头)和 GStreamer 应用程序开箱即用。

实时调度

对于实时调度,建议使用 rtkit。将您的用户添加到 rtkit 组。

或者,确保您的用户具有正确的 ulimit 权限。自从 pipewire 0.3.66 以来,您可以将自己添加到 pipewire 组。您通常需要(例如在 /etc/security/limits.conf 中)

@pipewire - memlock 4194304
@pipewire - nice -19
@pipewire - rtprio 95

这允许 pipewire 组的成员拥有正确的权限,以便 PipeWire 在没有 rtkit 的情况下使用实时调度。自 0.3.66 起,pipewire 附带了相同的代码片段,因此如果您有 PAM 登录会话并将自己添加到 pipewire 组,则无需执行任何其他操作。请注意,只有当您的会话使用 PAM 时,上述 /etc/security/limits.conf 才会起作用。

禁用 D-Bus 支持

警告: 自 Alpine 3.19 起,本节不再受支持,因为版本 0.5 中不再支持使用 lua 进行配置文件。


对于某些配置(例如,仅音频播放和录音),D-Bus 设置不是必需的,可以按如下方式禁用它。

编辑以下配置参数

内容:/etc/pipewire/pipewire.conf

context.properties = { ... support.dbus = false }


内容:/etc/wireplumber/wireplumber.conf

context.properties = { ... support.dbus = false }


内容:/etc/wireplumber/bluetooth.lua.d/50-bluez-config.lua

bluez_monitor.properties = { ... ["with-logind"] = false, }


内容:/etc/wireplumber/main.lua.d/50-alsa-config.lua

alsa_monitor.properties = { ... ["alsa.reserve"] = false, }


内容:/etc/wireplumber/main.lua.d/50-default-access-config.lua

default_access.properties = { ... ["enable-flatpak-portal"] = false, }

测试

使用 WirePlumber 中的 wpctl 实用程序来测试 pipewire 的工作情况

$ wpctl status

pw-cat 回放

测试声音是否正常工作,使用 libsndfile 🔓 支持的格式(例如 flac、opus、ogg、wav)的音频文件。使用 pipewire-tools 中的 pw-cat 实用程序

$ pw-cat -p test.flac $ pw-play /usr/share/sounds/alsa/Front_Center.wav

pw-cat 录音

如果您有麦克风,请测试音频录音是否正常工作。

$ pw-cat -r --list-targets $ pw-cat -r recording.flac (对着麦克风说几句话,然后使用 Ctrl+c 停止) $ pw-cat -p recording.flac

PulseAudio

使用媒体播放器测试 PulseAudio 客户端,因为大多数媒体播放器都使用 PulseAudio。

JACK

使用 jack-simple-clients 中的 jack_simple_client

$ jack_simple_client

您应该听到持续的蜂鸣声。

故障排除

`wpctl status` 显示无目标

首先,使用 alsa-utils 软件包中的 aplay 实用程序检查 ALSA 是否识别您的声卡

aplay -l

如果找到声音设备,则问题出在您的 pipewire 配置上。考虑仔细检查上面的说明。否则,您的声卡可能不受您正在运行的 Linux 内核版本支持。您应该在线搜索与您当前的内核版本和声卡编解码器相关的修复程序。您可以使用以下命令找到它们:

uname -r cat /proc/asound/card0/codec*

现代设备可能需要 sof-firmware,如果您在 dmesg 中收到 sof firmware file is missing 错误,则属于这种情况。

获取总线地址错误:无法在没有 X11 $DISPLAY 的情况下自动启动 D-Bus

这意味着 D-Bus 会话总线未启动且 GUI 未激活(即,您处于 tty 中)。按照 上面概述的方式使用 dbus-run-session。或者,禁用 D-Bus 支持

连接失败:连接被拒绝

当使用 Wayland 时,请确保 XDG_RUNTIME_DIR 配置正确。如果未设置,pipewire 将在您的主文件夹中创建一个名为 ~/pulse 的目录,并且在尝试运行 Pavucontrol 或 pactl 时,您将收到以下错误

$ pactl list
Connection failure: Connection refused
pa_context_connect() failed: Connection refused

蓝牙连接失败:br-connection-profile-unavailable

确保 会话管理器 正在运行。

蓝牙耳机上的播放/暂停按钮不起作用

检查 /var/log/messages。如果您看到类似以下内容

bluetoothd[3463]: profiles/audio/avctp.c:uinput_create() Can't open input device: No such file or directory (2)
bluetoothd[3463]: profiles/audio/avctp.c:init_uinput() AVRCP: failed to init uinput for WH-1000XM5

那么 bluez 正在尝试将耳机按钮注册为输入设备,但 uinput 未加载。尝试 modprobe uinput。如果这有效,请参阅 架构#模块加载,了解如何确保在每次启动时自动加载此模块的说明。

参见