WirePlumber (Русский)

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

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

Установка

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

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

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

Настройка

Расположение файлов настроек

Конфигурация WirePlumber состоит из глобальных JSON-подобных объектов, похожих на объекты из конфигурации PipeWire, таких как context и alsa_monitor. Настройки считываются из каталогов ~/.config/wireplumber/ (пользовательская конфигурация), /etc/wireplumber/ (глобальная конфигурация) и /usr/share/wireplumber/ (конфигурация по умолчанию).

WirePlumber начинает работу с чтения основного файла настроек. Это JSON-подобный файл, который настраивает контекст PipeWire, SPA-плагины, модули и компоненты. Среди этих компонентов есть и Lua, который используется для динамического изменения глобальных объектов.

Есть несколько разных основных файлов настроек, поставляемых вместе с пакетом:

  • Настройки для одиночного экземпляра — . Это конфигурация по умолчанию, которая включает в себя функциональность всех других конфигураций в рамках одного процесса.
  • Основной файл настроек — . Он загружает модули и компоненты, необходимые для ядра WirePlumber, а также загружает скрипты Lua из .
  • Файл настроек Bluetooth/usr/share/wireplumber/bluetooth.conf. Он может использоваться для отдельного процесса WirePlumber, который обрабатывает подключения Bluetooth для основного процесса. При этом загружаются файлы Lua из каталог-настроек/bluetooth.lua.d/.
  • Файл настроек policy — . В нём содержится функциональность политики, с помощью которой WirePlumber принимает решения о перемещении и внесении изменений в узлы. При этом загружаются файлы Lua из

Lua-скрипты из каталогов также загружают другие Lua-скрипты из . Эти скрипты реализуют некоторые логические/функциональные возможности Pipewire и могут быть полезны при определённых обстоятельствах.

Изменение настроек

Рекомендуемый способ для настройки WirePlumber — добавить Lua-скрипт в соответствующий каталог в /etc/wireplumber/ или ~/.config/wireplumber/. Следует учесть следующие моменты:

  • Если вы хотите создать скрипт, который полностью заменит собой стандартный скрипт, скопируйте его из /usr/share/wireplumber/ в место назначения с тем же самым именем. Будет прочитан только самый приоритетный файл; файлы с таким же именем из менее приоритетных каталогов будут проигнорированы.
  • В противном случае, если вы хотите добавить новый скрипт, в начале его имени укажите номер больше 50 (например, ), так как настройки по умолчанию в основном содержатся на уровне 50 или ниже.
    • Имейте в виду, что WirePlumber выполняет multi-path merging, а это значит, что стандартные настройки с более низким номером будут прочитаны раньше вашего нового скрипта, так как файлы настроек сортируются по их именам.
  • Выбранный вами каталог должен соответствовать тому, что делает конфигурация по умолчанию, но это не имеет особого значения, если вы не используете несколько экземпляров.
  • Свойства ALSA для устройств Bluetooth должны быть настроены в файле . Свойства, заданные в , не применятся.

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

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

Используйте команду wpctl status, чтобы посмотреть все объекты, которыми управляет WirePlumber. Найдите ID нужного вам интерфейса.

Пример вывода команды:

Например, если нужен интерфейс , то здесь его ID — .

Теперь с помощью команды можно посмотреть список всех доступных свойств этого объекта:

Выберите какое-нибудь из свойств , и для последующего использования в правилах в Lua-скрипте.

Не используйте , так как он динамический и часто меняется.

Примечание:
  • 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, можно создать примерно такой файл:

А для изменения каких-нибудь свойств узла или устройства Bluetooth можно создать примерно такой файл:

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

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

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

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

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

Создайте копию , чтобы изменения сохранялись при обновлениях. В нём мы определим профиль, объединяющий два стандартных отображения для аналогового и 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-скрипт:

Советы и рекомендации

Регулировка звука клавиатурой

Привяжите следующие команды к своим кнопкам регулировки громкости: , 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@

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

gollark: Because current RISC-V CPUs are immature and rather slow.
gollark: Oh, and if you have an AMD/Intel CPU from the last 10ish years it has a management engine equivalent.
gollark: Bold of you to assume that works on any recent system ever.
gollark: You can compile to EFI, but the implementation on your platform is likely closed source I mean.
gollark: I had to reverse-engineer the random microcontrollers in my monitor running the onscreen display so I could boot uCLinux and such on them. Totally worth it.
This article is issued from Archlinux. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.