PipeWire (Русский) - ArchWiki

Jump to content

# PipeWire (Русский)

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

Ссылки по теме

- PipeWire/Examples (Русский)

PipeWire это новый низкоуровневый мультимедийный фреймворк. Он предназначен для захвата и воспроизведения аудио и видео с минимальной задержкой и поддерживает PulseAudio (Русский), JACK, ALSA и приложения, использующие GStreamer.

Данный фреймворк может быть использован как звуковой сервер (с поддержкой функционала PulseAudio и JACK), так и для захвата экрана.

PipeWire также поддерживает контейнеры по типу Flatpak и не зависит от пользовательских групп audio и video, а использует модель безопасности основанную на Polkit для запроса у Flatpak или Wayland разрешений для записи экрана или захвата звука.

## Установка

Установите pipewire из официальных репозиториев.

PipeWire использует systemd/User (Русский) для управления сервером и автоматической активации сокетов.

Опционально, вы можете установить pipewire-docs для просмотра документации. Другие пакеты, такие как pipewire-alsa, pipewire-pulse, и pipewire-jack используются PipeWire для управления вместо PulseAudio/JACK. Так же доступны 32-битные библиотеки lib32-pipewire и lib32-pipewire-jack.

### GUI

- Helvum — GTK обёртка для pipewire, вдохновленная подобным инструментом для JACK catia.

  https://gitlab.freedesktop.org/ryuukyu/helvum || helvum или helvum-gitAUR

## Использование

### Демонстрация экрана WebRTC

Большинство браузеров для работы WebRTC и захвата рабочего стола или отдельных приложений используют X11. На Wayland используется подход, основанный на механизме разрешений.

Для этого требуются пакет xdg-desktop-portal и один из следующий бэкэндов:

- xdg-desktop-portal-gtk для GNOME.
- xdg-desktop-portal-kde для KDE.
- xdg-desktop-portal-wlr для оболочек, использующих композитор wlroots (напр. Sway, dwl)

Firefox (84+) поддерживает данный механизм по умолчанию. Для Chromium (73+) нужно активировать поддержку вручную включением экспериментального флага:

    chrome://flags/#enable-webrtc-pipewire-capturer

Для работы `xdg-desktop-portal-wlr` требуется установить pipewire-media-session [1] и удостовериться, что указаны переменные окружения `XDG_CURRENT_DESKTOP=sway` [2] и `XDG_SESSION_TYPE=wayland` [3].

Совет: Для демонстрации отдельного монитора через `xdg-desktop-portal-wlr` необходимо использовать параметр `--output=Monitor` путем редактирования строки `ExecStart=` в юните systemd. Пример такой строки: `ExecStart=@libexecdir@/xdg-desktop-portal-wlr --output=eDP-1`

The factual accuracy of this article or section is disputed.

Reason: После внесения изменений в гит-репозитории следующее примечание, относящиеся к отдельным приложениям/демонстрации отдельных окон могут быть не действительны для xdg-desktop-portal-gtk. Подробнее можете узнать здесь [4]. (Discuss in Talk:PipeWire (Русский))

Обратите внимание, что захват поддерживается только демонстрация экрана, а не для отдельного окна/приложения [5][6].

### Видео

Несмотря на то, что PipeWire не является стандартным средством, вы можете без опасения использовать его, например для захвата с вебкамеры. Так как большинство приложений используют GStreamer для этих целей, вы можете использовать плагин GStreamer#PipeWire.

### Аудио

PipeWire может быть использован как звуковой сервер наподобие PulseAudio и JACK. Он нацелен их на полную замену путем предоставления реализации PulseAudio-совместимого сервера и ABI-совместимых библиотек для клиентов JACK. Подробнее смотерть здесь.

#### Поддержка ALSA/Legacy

Установите pipewire-alsa для перенаправления приложений, использующих ALSA API, через PipeWire.

#### Поддержка PulseAudio

Установите pipewire-pulse. Этот пакет заменит установленные pulseaudio и pulseaudio-bluetooth. Необходимо перезагрузиться или выполнить `systemctl start --user pipewire-pulse.service` для работы.

Как правило, этого достаточно для дальнейшей работы, так как сервис `pipewire-pulse.socket` должен быть автоматически включен. Для проверки работоспособности, выполните следующую команду и изучите вывод:

    $ pactl info

    ...
    Server Name: PulseAudio (on PipeWire 0.3.16)
    ...

Если PipeWire не работает после запуска системы, убедитесь что systemd/User (Русский) сервисы `pipewire-pulse.service`, `pipewire.service`, и `pipewire-media-session.service` включены и работают. Имейте в виду, что `pipewire-pulse.service` и `pipewire-pulse.socket` используют `ConditionUser`, а не работают под рут пользователем.

#### Поддержка JACK

Установите pipewire-jack и используйте `pw-jack` для запуска JACK-совместимых приложений заместо `libjack*`:

    pw-jack application

Также вы можете использовать другой размер буфера путем установления нужного соотношения размера буфера и частоты дискретизации (что равно задержке в секнудах):

    PIPEWIRE_LATENCY="128/48000" pw-jack application

В качестве альтернативы, вы можете установить pipewire-jack-dropinAUR или удалить jackAUR/jack2 для автоматического использования библиотек приложениями использующими JACK.

Выполните `ldd` для проверки правильности линковки библиотек:

    $ ldd /usr/bin/qjackctl | grep -i libjack

    libjack.so.0 => /usr/lib/pipewire-0.3/jack/libjack.so.0 (0x00007f7e5080a000)

#### Bluetooth устройства

Для управления Bluetooth audio устройствами PipeWire использует pipewire-pulse. Говоря более конкретно, сервис PipeWire проверяет наличие `/etc/pipewire/media-session.d/with-pulseaudio` и подключает модуль `bluez5` автоматически, если он установлен в системе.

#### Работа PipeWire поверх JACK

PipeWire также может работать как клиент JACK, если это необходимо. Подробнее смотреть здесь

## Постобработка аудио

### EasyEffects

EasyEffects (ранее PulseEffects) это GTK утилита предоставляющая большой набор аудио эффектов и фильтров для использования в потоках отдельных приложений и микрофона. Присутствуют большинство основных эффектов, таких как эквалайзер, выравнивание громкости, усиления низких частот, дэ-эссер и подавления шумов. Полный список эффектов и фильтров можно посмотреть на GitHub.

Для использования установите easyeffects. Так же можете посмотреть коллекцию пользовательских пресетов для настройки.

Примечание: Про легаси версию PulseEffects читать здесь PulseAudio#PulseEffects.

### NoiseTorch

NoiseTorch это альтернативный способ для шумоподавления. Для использования установите noisetorchAUR, либо одну из этих версий пакета noisetorch-binAUR noisetorch-gitAUR

После запуска модуля требуется выбрать нужный микрофон. Имеется возможность выбора нужного порога активации. Для того, что бы не фильтровать голос, установите максимальный уровень.

### Плагины LADSPA, LV2 и VST

Если вы хотите использовать плагины LADSPA, LV2 и VST, вы можете применить их используя виртуальный аудиовход Pulseaudio и хост Jack Carla. Установите pipewire-pulse, pipewire-jack и carla. Для начала создайте новый аудиовход в Pulseaudio под названием `default_null_sink`.

    pactl load-module module-null-sink object.linger=1 media.class=Audio/Sink sink_name=default_null_sink channel_map=FL,FR

Запустите Carla через PipeWire `pw-jack carla-rack`. Во вкладке Rack добавьте плагины по желанию. Удостоверьтесь, что они имеют тип stereo. Вы можете поменять их очередность, в которой они будут работать, начиная с верха списка. После этого переместитесь во вкладку Patchbay и подключите `default_null_sink` к вводу Carla, а вывод Carla к нужному устройству воспроизведения (наушники, колонки, HDMI и т.п.). Сохраните конфигурацию в домашнюю директорию, напр. в `~/Documents/carla_sink_effects.carxp`.

Вы можете протестировать эффекты в любом медиа приложение, производящем звук, например просмотром видео в браузере. Есть два способа сделать это. Открыть в Carla вкладку Patchbay, и перенаправить соединения нужного приложения к `default_null_sink`. Второй способ через pavucontrol, так же перенаправить аудио поток нужного приложения к аудиовходу `default_null_sink` (Этот способ запомнит перенаправление, поэтому последующие экземпляры приложения автоматически перенаправится на `default_null_sink`).

Для применения вышеописанных настроек, необходимо создать два пользовательских systemd юнита:

    ~/.config/systemd/user/jack-carla-rack.service

    [Unit]
    Description=Load Carla Rack JACK host

    [Service]
    PassEnvironment="PIPEWIRE_LINK_PASSIVE=true"
    Type=exec
    ExecStart=/usr/bin/pw-jack carla-rack -n

    [Install]
    WantedBy=default.target

    ~/.config/systemd/user/pulseaudio-null-sink@.service

    [Unit]
    Description=Load %i Pulseaudio null sink
    Before=jack-carla-rack.service
    After=pipewire-pulse.service

    [Service]
    Type=oneshot
    ExecStart=/usr/bin/pactl load-module module-null-sink object.linger=1 media.class=Audio/Sink sink_name=%i channel_map=FL,FR
    ExecStop=/usr/bin/pactl unload-module module-null-sink
    RemainAfterExit=yes

    [Install]
    WantedBy=default.target

Затем измените сервис jack-carla-rack, указав полный путь к вашему сохраненному файлу конфигурации в строке Environment:

    ~/.config/systemd/user/jack-carla-rack.service.d/override.conf

    Environment="CARLA_CONFIG_FILE=/home/username/Documents/carla_sink_effects.carxp"
    ExecStart=
    ExecStart=/usr/bin/pw-jack carla-rack -n $CARLA_CONFIG_FILE

И наконец, включите созданные сервисы, указав `default_null_sink` как аргумент для сервиса pulseaudio-null-sink:

    systemctl --user enable pulseaudio-null-sink@default_null_sink.service
    systemctl --user enable jack-carla-rack.service

Обратите внимание, если вы установите `default_null_sink` как устройство по умолчанию, все приложения будут автоматически перенаправляться к этому аудиовходу и клавиши громкости будут менять его уровень, а не громкость устройств воспроизведения. Для того, чтобы изменять клавишами уровень громкости устройства, необходимо оставить его по умолчанию и перенаправлять аудиопоток приложения к `default_null_sink` через pavucontrol. (PipeWire запомнит перенаправление и использует его для последующих экземпляров приложений).

### Шумоподавление для голоса

Установите noise-suppression-for-voiceAUR и смотрите https://github.com/werman/noise-suppression-for-voice#pipewire для настройки. После, установите источник подавления шумов по умолчанию в настройках аудио. Возможно потребуется перезапустить приложение.

## Решение проблем

This article or section is out of date.

Reason: Стандартные конфигурационные фалы перемещены с /etc/pipewire в /usr/share/pipewire. Системные настройки все еще находятся в /etc/pipewire и пользовательские в $HOME/.config/pipewire/, но файлы должны быть скопированы с /usr/share/pipewire. Подробнее: https://gitlab.freedesktop.org/pipewire/pipewire/-/commit/1609126bcd720304b7a4c81b87cc3e70ae91ff44 (Discuss in Talk:PipeWire (Русский))

### PipeWire не видит микрофон

Модуль `alsa-monitor` по умолчанию использует alsa-card-profiles для обнаружения устройств. Если этот метод не работает, попробуйте выключить `api.alsa.use-acp` и/или включить `api.alsa.use-ucm` в `/etc/pipewire/media-session.d/alsa-monitor.conf`, под строкой `rules` -> первое правило -> `actions` -> `update-props`:

    ...
    update-props = {
        api.alsa.use-acp = false
    ...

Затем перезапустите pipewire и проверьте доступные устройства:

    $ pw-record --list-targets

    Available targets ("*" denotes default): 62
    	58: description="Built-in Audio" prio=1872
    	60: description="Built-in Audio" prio=2000
    *	62: description="Built-in Audio (Loopback PCM)" prio=1984

### Нет звука после подключения Bluetooth устройства

По состоянию на 12-07-2020, если у вас нет звука после подключения Bluetooth устройства, вам скорее всего потребуется переключить стандартный аудиопоток или перенаправить его к требуемому. Воспользуйтесь `pactl list sinks` для просмотра доступных потоков и `pactl set-default-sink` для смены стандартного потока на bluetooth устройство. Можно автоматизировать через udev используя данный скрипт как пример.

Обсуждение данной проблемы можно посмотреть здесь. По словам автора скрипта, профиль гарнитуры (HSP) все еще может иметь проблемы.

### Маленькая громкость

После замены PulseAudio на Pipewire громкость была как задумано, но после перезагрузки звук невыносимо тихий.

Откройте `alsamixer`, нажимайте `F6` для выбора нужной звуковой карты и удостоверьтесь, что уровень громкости стоит на 100%. `alsactl` должен сохранить настройки после перезагрузки.

### Увеличение RLIMIT_MEMLOCK

    Dec 13 11:11:11 HOST pipewire-pulse[99999]: Failed to mlock memory 0x7f4f659d8000 32832: This is not a problem but for best performance, consider increasing RLIMIT_MEMLOCK

Установите realtime-privileges и добавьте пользователя в группу `realtime`.

Также, увеличение memlock с 64кБ до 128кБ должно хватить для решение проблемы. Если вы запускаете `pipewire-pulse` через systemd/User (Русский), допишите:

    имя_пользователя	soft	memlock	64
    имя_пользователя	hard	memlock	128

в `/etc/security/limits.d/username.conf`

### Изменение частоты дискретизации

По умолчанию PipeWire глобально устанавливает частоту дискретизации равную 48КГц. Если вы хотите изменить ее (например если ваш ЦАП поддерживает более высокое значение) редактированием строки `default.clock.rate = 48000` в файле конфигурации `/etc/pipewire/pipewire.conf`. Например, если вы хотите частоту дискретизации в 192КГц, раскомментируйте строку и поменяйте значение `48000` на `default.clock.rate = 192000`.

### Внешняя звуковая карта не включается после переподключения

Проверьте `~/.config/pipewire-media-session/default-profile`. Если присутствуют значения с стандартным профилем "off", удалите их. Если же это не поможет, удалите все файлы из `~/.config/pipewire-media-session/` и перезапустите PipeWire используя `systemctl --user restart pipewire.service`.

### Нет звука или pactl info показывает Failure: Connection refused

Эта ошибка говорит о том, что приложение не может присоединиться к службе PipeWire-Pulse, удостоверьтесь что `/etc/pipewire/pipewire-pulse.conf` существует и файл не пустой, а после перезапустите PipeWire-Pulse используя `systemctl --user restart pipewire-pulse.service`.

Если этот способ не исправит ошибку, запустите `strace -f -o /tmp/pipe.txt pactl info` для дебага и используйте `/tmp/pipe.txt` для помощи в IRC чате #pipewire или списках рассылки.

### Низкое качество звука через Bluetooth

В случае, если звук через Bluetooth заикается, проверьте `pipewire.service` используя `systemctl --user status pipewire.service`. Если у вас есть ошибки по типу:

    Feb 17 18:23:01 HOST pipewire[249297]: (bluez_input.18:54:CF:04:00:56.a2dp-sink-60) client too slow! rate:512/48000 pos:370688 status:triggered

проверьте используемый кодек командой `pactl list sinks` и попробуйте поменять его изменением `bluez5.codecs` на один из следующих `sbc aac ldac aptx aptx_hd` в

    /etc/pipewire/media-session.d/bluez-monitor.conf

    ...
    properties = {
      ...
      bluez5.codecs = [sbc]
    ...

Также попробуйте включить поддержку mSBC (исправляет проблему с микрофоном на Sony 1000XM3):

    /etc/pipewire/media-session.d/bluez-monitor.conf

    ...
    rules = [
      ...
      actions = {
        ...
        update-props = {
         ...
         bluez5.msbc-support = true
    ...

Перезапустите PipeWire командой `systemctl --user restart pipewire.service` для применения изменений.

### Нет обнаруженных устройств после обновления PipeWire и его перезагрузки (git / >=0.3.23)

В коммите 012a68f8[7] была добавлена новая служба, которая отключена по умолчанию. Что приводит к тому что `pipewire-media-session` не запускается после старта системы. Чтобы активировать службу, используйте команду `systemctl --user enable --now pipewire-media-session.service`

Если пользователь или пакетный менеджер не исправил конфигурационные файлы после обновления, то скорее всего другой экземпляр `pipewire-media-session` запущен в pipewire.service. Чтобы проверить это, используйте: `systemctl --user status pipewire.service`

Если вывод говорит о том, что pipewire и pipewire-media-session запущены, обновите системные и/или пользовательские конфигурации:

    /etc/pipewire/pipewire.conf and/or ~/.config/pipewire/pipewire.conf

    context.exec = {
      ...
      # Line below should be commented out
      #"/usr/bin/pipewire-media-session" = { args = "" }
      ...
    }

### Заметная задержка звука при воспроизведении

Обычно это происходит после отключения узла в период неактивности. Плановое отключение можно отключить, отредактировав `/etc/pipewire/media-session.d/*-monitor.conf` в зависимости от того, где происходит задержка, заменив значение на 0 или экспериментами с другими значениями. Либо же закомментируйте строку `suspend-node` в `/etc/pipewire/media-session.d/media-session.conf`. После перезагрузите службы `pipewire` и `pipewire-pulse` для применения изменений, или перезагрузитесь.

### Проподание звука при проигрывании других потоков

Обычно проблему можно диагностировать командой `journalctl --user -b -u pipewire-pulse` и присутствуют такие строки:

    pipewire-pulse[21740]: pulse-server 0x56009b9d5de0: [Nightly] UNDERFLOW channel:0 offset:370676 underrun:940

Согласно официальному гайду PipeWire по решению проблем, нужно отредактировать `/etc/pipewire/media-session.d/alsa-monitor.conf`, раскомментировать строку `api.alsa.headroom = 0` и поменять значение на `1024`.

### Искаженный звук

- Для микрофонов, найдите проблемную звуковую карту в `alsamixer` и уменьшите уровень "Mic Boost" или "Internal Mic Boost".
- Раскомментируйте строку `default.clock.rate = 48000` в `/etc/pipewire/pipewire.conf` и уменьшите значение до `44100`.

### Различные проблемы после простоя

Если звук пропал или исказился после пробуждения системы после сна, возможно потребуется реинициализировать ALSA:

    # alsactl init

## Смотреть также

- Wiki — PipeWire вики на Freedesktop GitLab
- Pipewire Update Blog Post — Пост в блоге от января 2018 с описанием состояния разработки на тот момент
- PipeWire Late Summer Update 2020 — Пост в блоге от сентября 2020

Category:

- Sound (Русский)

Hidden categories:

- Pages or sections flagged with Template:Accuracy
- Pages or sections flagged with Template:Out of date