重命名 Pipewire 中的设备

重命名 Pipewire 中的设备

我正在使用带有 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

您可以更改的属性以及选择设备或节点的匹配规则记录在ALSA配置蓝牙配置

答案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 statuswpctl 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.

相关内容