WirePlumber (Русский)

From ArchWiki
Состояние перевода: На этой странице представлен перевод статьи WirePlumber. Дата последней синхронизации: 27 июля 2022. Вы можете помочь синхронизировать перевод, если в английской версии произошли изменения.

WirePlumber — это мощный менеджер сеансов и политик для PipeWire. Основанный на модульном дизайне, с плагинами Lua, реализующими фактическую функциональность управления, он обладает высокой настраиваемостью и расширяемостью.

Установка

Установите пакет wireplumber. Он конфликтует с пакетами других менеджеров сеансов PipeWire, чтобы гарантировать, что они удалены.

WirePlumber использует пользовательский экземпляр systemd для управления сервером.

По желанию установите wireplumber-docs для просмотра документации.

Настройка

Модульный дизайн WirePlumber обеспечивает большую гибкость при замене реализации определенной функциональности без необходимости повторной реализации остальной части. Подробную информацию можно найти в официальной документации.

Ниже мы приводим примеры простых конфигураций.

Получение имени интерфейса для правил matches

В Lua-скриптах WirePlumber, в правилах matches, указываются PipeWire-объекты целевого интерфейса, который вы хотите настроить.

Используйте команды pw-cli list-objects и pw-cli dump, чтобы посмотреть список всех доступных объектов в системе.

Объекты Node являются выводами (sink) или источниками (source) в графе PipeWire. Они соответствуют ALSA Device.

Чтобы отфильтровать, какой тип показывать, добавьте опцию list-objects со значением Device или Node. Например:

$ pw-cli list-objects Device
...
id 37, type PipeWire:Interface:Device/3
 	object.serial = "264"
 	factory.id = "14"
 	client.id = "49"
 	device.api = "alsa"
 	device.description = "Starship/Matisse HD Audio Controller"
 	device.name = "alsa_card.pci-0000_08_00.4"
 	device.nick = "HD-Audio Generic"
 	media.class = "Audio/Device"
...

Фильтрация типов объектов также применяется к команде pw-cli dump.

Если вам нужен конкретный класс конечной точки (например, "Audio/Sink"), обратитесь к свойству media.class.

В большинстве случаев при настройке ALSA нужным свойством является device.name или node.name.

Совет: Команда pw-top показывает список Node, используемых в настоящее время.

Изменение свойства устройства/узла

Чтобы изменить свойство устройства или узла, например, его описание или ник, создайте Lua-скрипт и добавьте его в ~/.config/wireplumber/ с соответствующими путём и именем.

Например, чтобы изменить описание узла ALSA, нужно создать файл ~/.config/wireplumber/main.lua.d/51-alsa-rename.lua со следующим содержанием:

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)

Если вместо этого вы хотите изменить что-то на узле или устройстве Bluetooth, вы можете создать ~/.config/wireplumber/bluetooth.lua.d/51-rename.lua с подобным содержанием:

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's Multi-path merging мог запускать их сразу после файлов конфигурации по умолчанию (например, /usr/share/wireplumber/main.lua.d/50-alsa-config.lua), но до файла, который загружает и включает устройства (например, /usr/share/wireplumber/main.lua.d/90-enable-all.lua)

Свойства, которые вы можете изменить, а также правила согласования для выбора устройств или узлов описаны в документации WirePlumber: конфигурация ALSA и конфигурация Bluetooth.

Отключение устройства/узла

Начиная с WirePlumber v0.4.7, пользователи могут отключать любые устройства или узлы с помощью свойства device.disabled или node.disabled.

~/.config/wireplumber/main.lua.d/51-alsa-disable.lua
rule = {
  matches = {
    {
      { "device.name", "equals", "alsa_card.pci-0000_08_00.4" },
    },
  },
  apply_properties = {
    ["device.disabled"] = true,
  },
}

table.insert(alsa_monitor.rules,rule)

Чтобы узнать имя alsa_card.* в вашей системе, смотрите #Получение имени интерфейса для правил matches.

Примечание: Обычным случаем использования, например, является отключение HDMI аудиовыхода NVIDIA.

Одновременный вывод на несколько источников на одной звуковой карте

Создайте копию /usr/share/alsa-card-profile/mixer/profile-sets/default.conf, чтобы изменения сохранялись при обновлениях. В нём мы определим профиль, объединяющий два стандартных отображения для аналогового и HDMI выводов.

/usr/share/alsa-card-profile/mixer/profile-sets/multiple.conf
[General]
auto-profiles = no

[Mapping analog-stereo]
device-strings = front:%f
channel-map = left,right
paths-output = analog-output analog-output-lineout analog-output-speaker analog-output-headphones analog-output-headphones-2
paths-input = analog-input-front-mic analog-input-rear-mic analog-input-internal-mic analog-input-dock-mic analog-input analog-input-mic analog-input-linein analog-input-aux analog-input-video analog-input-tvtuner analog-input-fm analog-input-mic-line analog-input-headphone-mic analog-input-headset-mic
priority = 15

[Mapping hdmi-stereo]
description = Digital Stereo (HDMI)
device-strings = hdmi:%f
paths-output = hdmi-output-0
channel-map = left,right
priority = 9
direction = output

[Profile multiple]
description = Analog Stereo Duplex + Digital Stereo (HDMI) Output
output-mappings = analog-stereo hdmi-stereo
input-mappings = analog-stereo

Теперь настроим Wireplumber на использование нового профиля карты для нужных устройств. Получение идентификаторов описано в разделе #Получение имени интерфейса для правил matches. Мы применим конфигурацию для всей системы, создав Lua-скрипт в новом каталоге # mkdir -p /etc/wireplumber/main.lua.d с числовым префиксом в имени файла, начинающимся после 50-alsa-config.lua:

/etc/wireplumber/main.lua.d/51-alsa-custom.lua
rule = {
  matches = {
    {
      { "device.nick", "matches", "HDA Intel PCH" },
    },
  },
  apply_properties = {
    ["api.alsa.use-acp"] = true,
    ["api.acp.auto-profile"] = false,
    ["api.acp.auto-port"] = false,
    ["device.profile-set"] = "multiple.conf",
    ["device.profile"] = "multiple",
  },
}
table.insert(alsa_monitor.rules,rule)

Смотрите также