WirePlumber (Русский)

Состояние перевода:
На этой странице представлен перевод статьи
WirePlumber
. Дата последней синхронизации: 11 октября 2022. Вы можете
помочь
синхронизировать перевод, если в английской версии произошли
изменения
.
Ссылки по теме
PipeWire (Русский)
WirePlumber
— это мощный менеджер сеансов и политик для
PipeWire
. Основанный на модульном дизайне, с плагинами Lua, реализующими фактическую функциональность управления, он обладает высокой настраиваемостью и расширяемостью.
Установка
Установите
пакет
wireplumber
. Он конфликтует с пакетами других менеджеров сеансов PipeWire, что гарантирует, что они будут удалены.
WirePlumber использует
пользовательский экземпляр systemd
для управления сервером.
Настройка
Расположение файлов настроек
Конфигурация WirePlumber
[
устаревшая ссылка
2024-01-13 ⓘ]
состоит из глобальных JSON-подобных объектов, похожих на объекты из конфигурации PipeWire, таких как
context
и
alsa_monitor
. Настройки считываются из каталогов
~/.config/wireplumber/
(пользовательская конфигурация),
/etc/wireplumber/
(глобальная конфигурация) и
/usr/share/wireplumber/
(конфигурация по умолчанию).
WirePlumber начинает работу с чтения
основного файла настроек
[
устаревшая ссылка
2024-01-13 ⓘ]
. Это JSON-подобный файл, который настраивает контекст PipeWire,
SPA-плагины
, модули и компоненты. Среди этих компонентов есть и
Lua
, который используется для динамического изменения глобальных объектов.
Есть несколько разных основных файлов настроек, поставляемых вместе с пакетом:
Настройки для одиночного экземпляра —
/usr/share/wireplumber/wireplumber.conf
. Это конфигурация по умолчанию, которая включает в себя функциональность всех других конфигураций в рамках одного процесса.
Смотрите
документацию объекта «context»
[
устаревшая ссылка
2024-01-13 ⓘ]
, который используется во всех основных файлах настроек.
Основной файл настроек —
/usr/share/wireplumber/main.conf
. Он загружает модули и компоненты, необходимые для ядра WirePlumber, а также загружает
скрипты Lua
[
устаревшая ссылка
2024-01-13 ⓘ]
из
каталог-настроек
/main.lua.d/
.
[1]
[
устаревшая ссылка
2024-01-13 ⓘ]
Смотрите документацию
объектов ALSA
[
устаревшая ссылка
2024-01-13 ⓘ]
и
объектов «access»
[
устаревшая ссылка
2024-01-13 ⓘ]
.
Файл настроек
Bluetooth
—
/usr/share/wireplumber/bluetooth.conf
. Он может использоваться для отдельного процесса WirePlumber, который обрабатывает подключения Bluetooth для основного процесса. При этом загружаются файлы Lua из
каталог-настроек
/bluetooth.lua.d/
.
Смотрите
документацию объекта Bluetooth
[
устаревшая ссылка
2024-01-13 ⓘ]
.
Файл настроек
policy
—
/usr/share/wireplumber/policy.conf
. В нём содержится функциональность политики, с помощью которой WirePlumber принимает решения о перемещении и внесении изменений в узлы. При этом загружаются файлы Lua из
каталог-настроек
/policy.lua.d/
Смотрите
документацию объектов, связанных с политиками
[
устаревшая ссылка
2024-01-13 ⓘ]
.
Lua-скрипты из каталогов
lua.d/
также загружают другие Lua-скрипты из
каталог-настроек
/scripts/
. Эти скрипты реализуют некоторые логические/функциональные возможности Pipewire и могут быть полезны при определённых обстоятельствах.
Изменение настроек
Рекомендуемый способ для настройки WirePlumber — добавить Lua-скрипт в соответствующий каталог
lua.d/
в
/etc/wireplumber/
или
~/.config/wireplumber/
. Следует учесть следующие моменты:
Если вы хотите создать скрипт, который полностью заменит собой стандартный скрипт, скопируйте его из
/usr/share/wireplumber/
в место назначения с тем же самым именем. Будет прочитан только самый приоритетный файл; файлы с таким же именем из менее приоритетных каталогов будут проигнорированы.
[2]
[
устаревшая ссылка
2024-01-13 ⓘ]
В противном случае, если вы хотите добавить новый скрипт, в начале его имени укажите номер больше 50 (например,
51-my-config.lua
), так как настройки по умолчанию в основном содержатся на уровне 50 или ниже.
Имейте в виду, что WirePlumber выполняет
multi-path merging
[
устаревшая ссылка
2024-01-13 ⓘ]
, а это значит, что стандартные настройки с более низким номером будут прочитаны раньше вашего нового скрипта, так как файлы настроек сортируются по их именам.
Выбранный вами каталог должен соответствовать тому, что делает конфигурация по умолчанию, но это не имеет особого значения, если вы не используете
несколько экземпляров
[
устаревшая ссылка
2024-01-13 ⓘ]
.
Свойства ALSA для устройств Bluetooth
должны
быть настроены в файле
bluetooth.lua.d/
. Свойства, заданные в
main.lua.d/
,
не
применятся.
Получение имени интерфейса для правил matches
Выбор настраиваемого интерфейса в Lua-скриптах WirePlumber выполняется с помощью правил
matches
, в которых прописываются свойства
PipeWire-объектов
и их значения, по которым будет выполняться выборка.
Используйте команду
wpctl status
, чтобы посмотреть все объекты, которыми управляет WirePlumber. Найдите
ID
нужного вам интерфейса.
Пример вывода команды:
$ wpctl status
PipeWire 'pipewire-0' [0.3.56, user@hostname, cookie:1163266174]
 └─ Clients:
        32. pipewire-pulse                      [0.3.56, user@hostname, pid:895]
        33. WirePlumber                         [0.3.56, user@hostname, pid:894]
        ...
Audio
 ├─ Devices:
 │      42. HD Audio Controller                 [alsa]
 │     105. USB PnP Audio Device                [alsa]
 │
 ├─ Sinks:
 │  *
48
. HD Audio Controller Analog Stereo   [vol: 0.50]
 │      53. EasyEffects Sink                    [vol: 1.00]
 │
 ├─ ...
 │
 ├─ Sources:
 │      54. EasyEffects Source                  [vol: 1.00]
 │  *  101. USB PnP Audio Device Mono           [vol: 0.74]
 │
 └─ ...

Video
 └─ ...

Settings
 └─ Default Configured Node Names:
         0. Audio/Sink    alsa_output.pci-0000_08_00.4.analog-stereo
         1. Audio/Source  alsa_input.usb-0c76_USB_PnP_Audio_Device-00.mono-fallback
Например, если нужен интерфейс
HD Audio Controller Analog Stereo
, то здесь его
ID
—
48
.
Теперь с помощью команды
wpctl inspect
ID
можно посмотреть список всех доступных свойств этого объекта:
$ wpctl inspect 48
id 48, type PipeWire:Interface:Node
    ...
  * client.id = "34"
    device.api = "alsa"
    device.class = "sound"
  * device.id = "42"
    device.profile.description = "Analog Stereo"
    device.profile.name = "analog-stereo"
  * factory.id = "18"
    factory.mode = "merge"
    factory.name = "api.alsa.pcm.sink"
    library.name = "audioconvert/libspa-audioconvert"
  * media.class = "Audio/Sink"
  * node.description = "HD Audio Controller Analog Stereo"
    ...
  * node.name = "alsa_output.pci-0000_08_00.4.analog-stereo"
  * node.nick = "ALC1220 Analog"
    ...
  * object.path = "alsa:pcm:1:front:1:playback"
  * object.serial = "49"
    ...
Выберите какое-нибудь из свойств
device.name
,
node.name
и
node.nick
для последующего использования в правилах
matches
в Lua-скрипте.
Не используйте
device.id
, так как он динамический и часто меняется.
Примечание
wpctl inspect
показывает тип объекта в первой строке, то есть
type PipeWire:Interface:Node
означает, что тип этого объекта
Node
.
Объекты
Node
— это источники (sources) или выводы (sinks) в графе PipeWire, а объекты
Device
соответствуют устройствам ALSA.
Вы можете определить класс
Endpoint
этого объекта по свойству
media.class
.
Начиная с WirePlumber v0.4.9, узлы ALSA используют имя PCM для заполнения
node.nick
, что полезно, по крайней мере, на картах HDA, использующих UCM, где все выходы (аналоговые, HDMI и т.д.) отображаются как
Node
на одном профиле.
Совет
Команда
pw-top
показывает список
Device
и
Node
, используемых в настоящее время.
Команда
wpctl inspect
ID
выводит тот же самый список свойств, что и команда
pw-cli dump
ID
.
Изменение свойства устройства/узла
Чтобы изменить свойство устройства или узла, например, его описание или ник, создайте Lua-скрипт и добавьте его в
/etc/wireplumber/
или
~/.config/wireplumber/
с соответствующими путём и именем.
Например, чтобы изменить описание узла ALSA, можно создать примерно такой файл:
/etc/wireplumber/main.lua.d/51-device-rename.lua (или ~/.config/wireplumber/main.lua.d/51-device-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 можно создать примерно такой файл:
/etc/wireplumber/bluetooth.lua.d/51-device-rename.lua (или ~/.config/wireplumber/bluetooth.lua.d/51-device-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)
Свойства, которые вы можете изменить, а также правила сопоставления для выбора устройств или узлов описаны в документации WirePlumber:
конфигурация ALSA
[
устаревшая ссылка
2024-01-13 ⓘ]
и
конфигурация Bluetooth
[
устаревшая ссылка
2024-01-13 ⓘ]
.
Отключение устройства/узла
Начиная с WirePlumber v0.4.7, пользователи могут отключать любые устройства или узлы с помощью свойства
device.disabled
или
node.disabled
.
/etc/wireplumber/main.lua.d/51-alsa-disable.lua (или ~/.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-скрипт:
/etc/wireplumber/main.lua.d/51-alsa-custom.lua (или ~/.config/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)
Советы и рекомендации
Регулировка звука клавиатурой
Привяжите следующие команды к своим кнопкам регулировки громкости:
XF86AudioRaiseVolume
,
XF86AudioLowerVolume
,
XF86AudioMute
,
XF86AudioMicMute
. Подробнее это рассмотрено здесь:
Горячие клавиши#Xorg
.
Для увеличения громкости:
$ wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%+
Для понижения громкости:
$ wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-
Отключить/включить звук:
$ wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle
Отключить/включить микрофон:
$ wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle
Совет
Для настройки выводов источников, отличных от используемых по умолчанию, выполните
wpctl status
, найдите в списке номер нужного вам вывода или источника и используйте его вместо
@DEFAULT_AUDIO_SINK@
или
_SOURCE@
.
Отображение уровня громкости
Чтобы получить уровень громкости вывода по умолчанию:
$ wpctl get-volume @DEFAULT_AUDIO_SINK@
Примечание
Если вывод заглушен, то вместе с громкостью будет выведена надпись
[MUTED]
.
Смотрите также
Документация
— Официальная документация
WirePlumber, менеджер сеансов PipeWire
— Сообщение в блоге Джорджа Киагиадакиса (Collabora) от мая 2020 года с подробным описанием работы WirePlumber