WirePlumber (Русский)
WirePlumber — это мощный менеджер сеансов и политик для PipeWire. Основанный на модульном дизайне, с плагинами Lua, реализующими фактическую функциональность управления, он обладает высокой настраиваемостью и расширяемостью.
Установка
    
Установите пакет wireplumber. Он конфликтует с пакетами других менеджеров сеансов PipeWire, что гарантирует, что они будут удалены.
WirePlumber использует пользовательский экземпляр systemd для управления сервером.
По желанию установите wireplumber-docs для просмотра документации.
Настройка
    
    Расположение файлов настроек
    
Конфигурация WirePlumber состоит из глобальных JSON-подобных объектов, похожих на объекты из конфигурации PipeWire, таких как context и alsa_monitor. Настройки считываются из каталогов ~/.config/wireplumber/ (пользовательская конфигурация), /etc/wireplumber/ (глобальная конфигурация) и /usr/share/wireplumber/ (конфигурация по умолчанию).
WirePlumber начинает работу с чтения основного файла настроек. Это JSON-подобный файл, который настраивает контекст PipeWire, SPA-плагины, модули и компоненты. Среди этих компонентов есть и Lua, который используется для динамического изменения глобальных объектов.
Есть несколько разных основных файлов настроек, поставляемых вместе с пакетом:
- Настройки для одиночного экземпляра — . Это конфигурация по умолчанию, которая включает в себя функциональность всех других конфигураций в рамках одного процесса.
- Смотрите документацию объекта «context», который используется во всех основных файлах настроек.
 
- Основной файл настроек — . Он загружает модули и компоненты, необходимые для ядра WirePlumber, а также загружает скрипты Lua из . 
- Смотрите документацию объектов ALSA и объектов «access».
 
- Файл настроек Bluetooth — . Он может использоваться для отдельного процесса WirePlumber, который обрабатывает подключения Bluetooth для основного процесса. При этом загружаются файлы Lua из каталог-настроек/bluetooth.lua.d/.- Смотрите документацию объекта Bluetooth.
 
- Файл настроек policy — . В нём содержится функциональность политики, с помощью которой WirePlumber принимает решения о перемещении и внесении изменений в узлы. При этом загружаются файлы Lua из
Lua-скрипты из каталогов  также загружают другие Lua-скрипты из каталог-настроек/scripts/. Эти скрипты реализуют некоторые логические/функциональные возможности Pipewire и могут быть полезны при определённых обстоятельствах.
Изменение настроек
    
Рекомендуемый способ для настройки WirePlumber — добавить Lua-скрипт в соответствующий каталог  в /etc/wireplumber/ или ~/.config/wireplumber/. Следует учесть следующие моменты:
- Если вы хотите создать скрипт, который полностью заменит собой стандартный скрипт, скопируйте его из /usr/share/wireplumber/в место назначения с тем же самым именем. Будет прочитан только самый приоритетный файл; файлы с таким же именем из менее приоритетных каталогов будут проигнорированы.
- В противном случае, если вы хотите добавить новый скрипт, в начале его имени укажите номер больше 50 (например, ), так как настройки по умолчанию в основном содержатся на уровне 50 или ниже.
- Имейте в виду, что WirePlumber выполняет multi-path merging, а это значит, что стандартные настройки с более низким номером будут прочитаны раньше вашего нового скрипта, так как файлы настроек сортируются по их именам.
 
- Выбранный вами каталог должен соответствовать тому, что делает конфигурация по умолчанию, но это не имеет особого значения, если вы не используете несколько экземпляров.
- Свойства ALSA для устройств Bluetooth должны быть настроены в файле . Свойства, заданные в , не применятся.
Получение имени интерфейса для правил matches
    
Выбор настраиваемого интерфейса в Lua-скриптах WirePlumber выполняется с помощью правил , в которых прописываются свойства PipeWire-объектов и их значения, по которым будет выполняться выборка.
Используйте команду , чтобы посмотреть все объекты, которыми управляет WirePlumber. Найдите нужного вам интерфейса.
Пример вывода команды:
$ 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
Например, если нужен интерфейс , то здесь его — .
Теперь с помощью команды можно посмотреть список всех доступных свойств этого объекта:
$ 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"
    ...
Выберите какое-нибудь из свойств , и для последующего использования в правилах в Lua-скрипте.
Не используйте , так как он динамический и часто меняется.
Изменение свойства устройства/узла
    
Чтобы изменить свойство устройства или узла, например, его описание или ник, создайте 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 можно создать примерно такой файл:
Свойства, которые вы можете изменить, а также правила сопоставления для выбора устройств или узлов описаны в документации WirePlumber: конфигурация ALSA и конфигурация Bluetooth.
Отключение устройства/узла
    
Начиная с WirePlumber v0.4.7, пользователи могут отключать любые устройства или узлы с помощью свойства  или node.disabled.
Чтобы узнать имя в вашей системе, смотрите #Получение имени интерфейса для правил matches.
Одновременное использование нескольких выводов на одной звуковой карте
    
Создайте копию , чтобы изменения сохранялись при обновлениях. В нём мы определим профиль, объединяющий два стандартных отображения для аналогового и HDMI выводов.
Теперь настроим Wireplumber на использование нового профиля карты для нужных устройств. Получение идентификаторов описано в разделе #Получение имени интерфейса для правил matches. Мы применим конфигурацию, создав такой Lua-скрипт:
Советы и рекомендации
    
    Регулировка звука клавиатурой
    
Привяжите следующие команды к своим кнопкам регулировки громкости: , XF86AudioLowerVolume, , . Подробнее это рассмотрено здесь: Горячие клавиши#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 get-volume @DEFAULT_AUDIO_SINK@
Смотрите также
    
- Докуентация — Официальная документация
- WirePlumber, менеджер сеансов PipeWire — Сообщение в блоге Джорджа Киагиадакиса (Collabora) от мая 2020 года с подробным описанием работы WirePlumber