我正在使用带有 i3 的 ArchLinux。我最近从 PulseAudio 切换到 Pipewire,因为我想在不久的将来也切换到 Wayland 和 Sway。
目前,Pipewire 运行良好。尽管如此,我还是有一个小问题。
我正在使用具有相同描述的音频设备,因此我无法在 Pavucontrol 中区分它们。使用 Pulse,我将 update-sink-proplist 语句写入本地 default.pa 文件中。
有人知道如何使用 Pipewire 执行此操作,即如果已连接该设备,如何更改设备的描述。
目前,我使用 Pipewire 的默认配置。
我的做法:
我想这可能适用于 pw-metadata,但我没有找到正确的命令。
我在 ~/.config/pipewire/media-session.d/alsa-monitor.conf 中添加了以下内容
{
matches = [
{
node.name = "~^alsa_output.pci-0000_00_1f.3.output_analog-stereo$"
}
]
actions = {
update-props = {
device.description = "Laptop"
}
}
}
这更改了输出中属性列表中的相应条目pactl list sinks
,但没有更改实际描述。事实上,输出是
Sink #45
...
Name: alsa_output.pci-0000_00_1f.3.output_analog-stereo
Description: Built-in Audio Analog Stereo Output
...
Properties:
...
device.description = "Laptop"
...
感谢您的帮助。
答案1
如果您遵循当前建议,请使用电线管道工代替PipeWire 媒体会议,更改节点描述(或任何其他属性)的方法是创建一个 Lua 脚本并将其添加到~/.config/wireplumber
正确的路径和名称下。
例如,要根据 felix 的需要更改 ALSA 节点的描述,您可以创建一个包含~/.config/wireplumber/main.lua.d/51-alsa-rename.lua
以下内容的文件:
rule = {
matches = {
{
{ "node.name", "equals", "alsa_output.pci-0000_00_1f.3.output_analog-stereo" },
},
},
apply_properties = {
["node.description"] = "Laptop",
},
}
table.insert(alsa_monitor.rules,rule)
相反,如果您希望更改蓝牙节点或设备上的某些内容,您可以~/.config/wireplumber/bluetooth.lua.d/51-rename.lua
使用以下内容进行创建:
rule = {
matches = {
{
{ "node.name", "equals", "bluez_output.02_11_45_A0_B3_27.a2dp-sink" },
},
},
apply_properties = {
["node.nick"] = "Headphones",
},
}
table.insert(bluez_monitor.rules,rule)
因此,Lua 脚本的文件名和位置的设计方式允许WirePlumber 的多路径合并/usr/share/wireplumber/main.lua.d/50-alsa-config.lua
在默认配置文件(例如)之后但在加载和启用设备的文件(例如)之前运行它们/usr/share/wireplumber/main.lua.d/90-enable-all.lua
。
答案2
杜鲁德的回答关于 WirePlumber 的说法是正确的,但如果有人在 2023 年之后遇到这种情况,Lua 就出局了SPA-JSON是新的热点。
mkdir -p ~/.config/wireplumber/wireplumber.conf.d
touch ~/.config/wireplumber/wireplumber.conf.d/99-renames.conf
确切的文件名并不重要。
格式如下:
monitor.alsa.rules = [
{
matches = [
{ node.name = "alsa_output.usb-Turtle_Beach_Elo_7.1_Air_8502FFFF8102-01.analog-stereo" }
],
actions = {
update-props = {
node.description = "Headset",
device.form-factor = "headset",
device.icon-name = "audio-headset-symbolic",
}
}
}
]
重新启动电线管工
systemctl --user restart wireplumber.service
您可以使用 和 来获取要匹配和更改的属性wpctl status
,wpctl inspect ##
其中##
是 列出的 ID 号wpctl status
。
在我的系统(openSUSE Tumbleweed)上,示例位于/usr/share/doc/wireplumber/examples/wireplumber.conf.d
.该alsa.conf
文件特别是我在上面使用的文件。
更多文档可以在这里找到:https://pipewire.pages.freedesktop.org/wireplumber/daemon/configuration/alsa.html
祈祷它能在两年多的时间内保持稳定。
答案3
除了您自己的答案(node.description
是要更新的属性)之外,您所说的配置还需要嵌入到以下rules = [...]
块中~/.config/pipewire/media-session.d/alsa-monitor.conf
:
rules = [
{
matches = [
{
node.name = "~^alsa_output.pci-0000_0d_00.4.analog-stereo$"
}
]
actions = {
update-props = {
node.description = "Headphones"
}
}
}
]
进一步提示PipeWire 的 Wiki。
答案4
没关系,我已经得到答案了。
在我的第二次尝试中,它必须node.description
代替device.description
.