Решение проблем PulseAudio и PipeWire: различия между версиями
Дым (обсуждение | вклад) |
Дым (обсуждение | вклад) |
||
Строка 296: | Строка 296: | ||
===Wireplumber=== | ===Wireplumber=== | ||
Если | Если используете wireplumber, создайте новый файл для переопределения настроек по умолчанию: | ||
{{cmd|$ mcedit ~/.config/wireplumber/main.lua.d/51-disable-suspension.lua}} | {{cmd|$ mcedit ~/.config/wireplumber/main.lua.d/51-disable-suspension.lua}} | ||
Строка 304: | Строка 304: | ||
{{cmd|# mcedit /usr/share/wireplumber/main.lua.d/51-disable-suspension.lua}} | {{cmd|# mcedit /usr/share/wireplumber/main.lua.d/51-disable-suspension.lua}} | ||
приведя содержимое файла к следующему виду: | |||
table.insert (alsa_monitor.rules, { | table.insert (alsa_monitor.rules, { | ||
matches = { | matches = { |
Версия от 13:17, 30 октября 2023
Решение проблем PulseAudio и PipeWire
PulseAudio
PipeWire
PipeWire не видит микрофон
Если у вас PipeWire не видит микрофон, попробуйте выключить в конфигурационном файле параметр api.alsa.use-acp и/или включить api.alsa.use-ucm.
Если используется pipewire-media-session
Откройте через текстовый редактор от рута
/etc/pipewire/media-session.d/alsa-monitor.conf
/usr/share/pipewire/media-session.d/alsa-monitor.conf
И приведите выделенные параметры к указанным значениям:
... rules = [ { ... actions = { update-props = { ... api.alsa.use-acp = false ...
Проверка доступных устройств
Для проверки доступных устройств ввода используйте команду:
$ pw-link -iol | grep input
Если используется wireplumber
Откройте через текстовый редактор от рута
/etc/wireplumber/main.lua.d/50-alsa-config.lua или
~/.config/wireplumber/main.lua.d/50-alsa-config.lua
/usr/share/wireplumber/main.lua.d/50-alsa-config.lua
... alsa_monitor.rules = { { ... apply_properties = { -- Использование устройств ALSA-Card-Profile. Они используют UCM или -- конфигурацию профиля для настройки параметров устройства и микшера. -- ["api.alsa.use-acp"] = true, -- Использование UCM вместо profile по возможности. Можно отключить, -- чтобы не пытаться использовать профиль UCM. ["api.alsa.use-ucm"] = true, ...
Затем перезапустите PipeWire и проверьте список доступных устройств:
$ systemctl --user --now enable pipewire-media-session.service
Проверка доступных устройств
Для проверки доступных устройств ввода скомандуйте: $ wpctl status
Если отсутствует, установите её: # apt-get install /usr/bin/wpctl
Звук не переключается автоматически при подключении нового устройства
Чтобы автоматически переключаться на вновь подключенные устройства, раскомментируйте следующую строку (выделена жирным):
/usr/share/pipewire/pipewire-pulse.conf (или добавьте в ~/.config/pipewire/pipewire.conf)
... context.exec = [ { path = "pactl" args = "load-module module-always-sink" } { path = "pactl" args = "load-module module-switch-on-connect" } #{ path = "/usr/bin/sh" args = "~/.config/pipewire/default.pw" } ] ...
Перезапустите пользовательские службы pipewire.service и pipewire-pulse.service для применения изменений: $ systemctl --user restart pipewire{,-pulse}
Звук не переключается автоматически на наушники Bluetooth
# apt-get install /usr/bin/pactl
# apt-get install /usr/bin/wpctl
Выполните: $ pactl load-module module-switch-on-connect и настройте среду рабочего стола на автоматический запуск этой команды при входе в систему.
Возможно, ещё потребуется выполнить:
$ wpctl set-default <id>.
Найти <id> можно следующим способом:
$ wpctl status
Вывод:
$ wpctl status |
---|
PipeWire 'pipewire-0' [0.3.71, petr@atk, cookie:1976916996] └─ Clients: 32. pipewire-media-session [0.3.71, petr@atk, pid:10780] 33. pipewire-media-session [0.3.71, petr@atk, pid:10780] 39. pipewire [0.3.71, petr@atk, pid:10781] 49. wpctl [0.3.71, petr@atk, pid:11459] 50. pipewire [0.3.71, petr@atk, pid:10781] Audio ├─ Devices: │ 41. Built-in Audio [alsa] │ ├─ Sinks: │ * 42. Built-in Audio Analog Stereo [vol: 0.74] <-- Здесь <id> = 42 │ ├─ Sink endpoints: │ ├─ Sources: │ * 43. Built-in Audio Analog Stereo [vol: 0.74] <-- Здесь <id> = 43 │ ├─ Source endpoints: │ └─ Streams: Video ├─ Devices: │ ├─ Sinks: │ ├─ Sink endpoints: │ ├─ Sources: │ ├─ Source endpoints: │ └─ Streams: Settings └─ Default Configured Node Names: 0. Audio/Sink alsa_output.pci-0000_00_05.0.analog-stereo |
Нет звука после подключения устройства Bluetooth
По состоянию на 2020-12-07, если у вас нет звука после подключения Bluetooth устройства, вам скорее всего потребуется переключить стандартный аудиопоток или перенаправить его к требуемому.
Для просмотра доступных потоков скомандуйте:
$ pactl list sinks |
---|
Аудиоприёмник №42 Состояние: SUSPENDED Имя: alsa_output.pci-0000_00_05.0.analog-stereo Описание: Built-in Audio Analog Stereo Драйвер: PipeWire Спецификация отсчётов: s16le 2-канальный 4800 Схема каналов: front-left,front-right Модуль-владелец: 4294967295 Звук выключен: нет Громкость: front-left: 48287 / 74% / -7,96 dB, front-right: 48287 / 74% / -7,96 dB баланс 0,00 Базовая громкость: 65536 / 100% / 0,00 dB Мониторный источник: alsa_output.pci-0000_00_05.0.analog-stereo.monitor Задержка: 0 мкс, настроено на 0 мкс Флаги: HARDWARE HW_MUTE_CTRL HW_VOLUME_CTRL DECIBEL_VOLUME LATENCY Свойства: object.path = "alsa:pcm:0:front:0:playback" api.alsa.path = "front:0" api.alsa.pcm.card = "0" api.alsa.pcm.stream = "playback" audio.channels = "2" audio.position = "FL,FR" device.routes = "2" alsa.resolution_bits = "16" device.api = "alsa" device.class = "sound" alsa.class = "generic" alsa.subclass = "generic-mix" alsa.name = "Intel 82801AA-ICH" alsa.id = "Intel ICH" alsa.subdevice = "0" alsa.subdevice_name = "subdevice #0" alsa.device = "0" alsa.card = "0" alsa.card_name = "Intel 82801AA-ICH" alsa.long_card_name = "Intel 82801AA-ICH with AD1980 at irq 21" alsa.driver_name = "snd_intel8x0" device.profile.name = "analog-stereo" device.profile.description = "Analog Stereo" card.profile.device = "4" device.id = "41" factory.name = "api.alsa.pcm.sink" priority.driver = "1009" priority.session = "1009" media.class = "Audio/Sink" node.nick = "Intel 82801AA-ICH" node.name = "alsa_output.pci-0000_00_05.0.analog-stereo" device.description = "Built-in Audio" device.icon_name = "audio-card-analog" device.bus = "pci" device.bus_path = "pci-0000:00:05.0" device.form_factor = "internal" node.pause-on-idle = "false" factory.id = "18" clock.quantum-limit = "8192" client.id = "33" node.driver = "true" factory.mode = "merge" audio.adapt.follower = "" library.name = "audioconvert/libspa-audioconvert" object.id = "42" object.serial = "42" device.enum.api = "udev" api.alsa.card = "0" api.alsa.card.name = "Intel 82801AA-ICH" api.alsa.card.longname = "Intel 82801AA-ICH with AD1980 at irq 21" device.plugged.usec = "5422646" sysfs.path = "/devices/pci0000:00/0000:00:05.0/sound/card0" device.subsystem = "sound" device.vendor.id = "0x8086" device.vendor.name = "Intel Corporation" device.product.id = "0x2415" device.product.name = "82801AA AC'97 Audio Controller" device.name = "alsa_card.pci-0000_00_05.0" device.nick = "Intel 82801AA-ICH" api.alsa.use-acp = "true" api.acp.auto-profile = "false" api.acp.auto-port = "false" api.dbus.ReserveDevice1 = "Audio0" device.string = "0" Порты: analog-output;output-amplifier-on: Analog Output / Amplifier (тип: Аналоговый, приоритет: 9910, доступность неясна) analog-output;output-amplifier-off: Analog Output / No Amplifier (тип: Аналоговый, приоритет: 9900, доступность неясна) Активный порт: analog-output;output-amplifier-on Форматы: pcm |
и $ pactl set-default-sink для смены стандартного потока на bluetooth устройство.
Пример использования: $ pactl set-default-sink 42
Можно автоматизировать через udev, используя данный скрипт как пример.
Обсуждение данной проблемы можно посмотреть здесь. По словам автора скрипта, профиль гарнитуры (HSP) все еще может иметь проблемы.
Низкая громкость
После замены PulseAudio на Pipewire громкость звука может быть как задумано, но после перезагрузки она становится очень низкой.
Для исправления данной проблемы откройте в консоли alasmixer, используйте F6 для выбора звуковой карты (выберите стрелками нужную карту и нажмите Enter).
Клавишами вверх/вниз установите громкость ALSA в колонке Master на значение 100%.
Нажмите Esc для выхода и выполните alsactl для сохранения параметров ALSA после перезагрузки.
Изменение частоты дискретизации по умолчанию
По умолчанию PipeWire устанавливает фиксированную глобальную частоту дискретизации 48 кГц. Если вам нужно изменить его (например, у вас есть ЦАП (цифро-аналоговый преобразователь), поддерживающий более высокое значение), вы можете установить новое значение по умолчанию:
Если хотите изменить общесистемные параметры, откройте о суперпользователя: # mcedit /etc/pipewire/pipewire.conf
Если только для себя, то от своего пользователя: $ mcedit ~/.config/pipewire/pipewire.conf
Найдите
... context.properties = { ... ## Properties forr the DSP configuration. #default.clock.rate = 48000 ...
Раскомментируйте строчку default.clock.rate и замените 48000 на свое значение.
Изменение разрешённых частот дискретизации
PipeWire также может динамически изменять выходную частоту дискретизации, поддерживаемую вашим ЦАП. Частота дискретизации соответствует частоте дискретизации воспроизводимого аудиопотока.
/etc/pipewire/pipewire.conf (или ~/.config/pipewire/pipewire.conf)
... context.properties = { ... default.clock.allowed-rates = [ частота_1 частота_2 частота_3 ... ] ...
Например, [ 44100 48000 88200 96000 ]. Поддерживаемые значения должны быть описаны в инструкции к вашему ЦАП.
По словам разработчиков, PipeWire допускает до 16 различных частот дискретизации и переключается по возможности. Это означает, что с приведёнными выше настройками передискретизация не производится, если используемая в аудиопотоке частота поддерживается устройством.
Нет звука или pactl info показывает «Ошибка подключения: Соединение отвергнуто»
Данная ошибка говорит о том, что приложение не может присоединиться к службе PipeWire-Pulse.
Убедитесь, что файл /etc/pipewire/pipewire-pulse.conf существует и файл не пустой:
$ cat /etc/pipewire/pipewire-pulse.conf
И перезапустите пользовательскую службу pipewire-pulse.service: $ systemctl restart --user pipewire-pulse.service
Если файла нет, попробуйте переустановить пакет pipewire и перезапустить систему (перезапуск pipewire и pipewire-pulse помог мне лишь частично): # apt-get install --reinstall pipewire
Заметная задержка звука при воспроизведении
Обычно данная проблема возникает после отключения узла в период неактивности.
Pipewire
Если вы используете pipewire-media-session, отключить задержку можно путём редактирования одного из файлов /usr/share/pipewire/media-session.d/*-monitor.conf в зависимости от того, где происходит задержка.
Например: # mcedit /usr/share/pipewire/media-session.d/alsa-monitor.conf
Для этого нужно заменить значение session.suspend-timeout-seconds на 0 для отключения или поэкспериментировав с другими значениями.
Либо закомментируйте строку suspend-node в файле /usr/share/pipewire/media-session.d/media-session.conf:
# mcedit /usr/share/pipewire/media-session.d/media-session.conf
Перезапустите службы pipewire и pipewire-pulse для применения изменений или перезагрузитесь.
$ systemctl restart --user pipewire.service pipewire-pulse.service
Wireplumber
Если используете wireplumber, создайте новый файл для переопределения настроек по умолчанию:
$ mcedit ~/.config/wireplumber/main.lua.d/51-disable-suspension.lua
или
# mcedit /usr/share/wireplumber/main.lua.d/51-disable-suspension.lua
приведя содержимое файла к следующему виду:
table.insert (alsa_monitor.rules, { matches = { { -- Соответствует всем источникам. { "node.name", "matches", "alsa_input.*" }, }, { -- Соответствует всем выводам. { "node.name", "matches", "alsa_output.*" }, }, }, apply_properties = { ["session.suspend-timeout-seconds"] = 0, -- 0 выключает приостановку }, })
Вместо полного отключения приостановки можно задать желаемое количество секунд задержки перед приостановкой.
Пропадание звука при проигрывании других потоков
Обычно проблему можно диагностировать в журнале пользовательской службы pipewire-pulse.service
$ journalctl --user -u pipewire-pulse.service
в котором могут обнаружиться такие строки:
pipewire-pulse[21740]: pulse-server 0x56009b9d5de0: [Nightly] UNDERFLOW channel:0 offset:370676 underrun:940
Согласно официальному гайду PipeWire по решению проблем, для решения данной проблемы при использовании pipewire-media-session необходимо изменить следующие настройки:
/usr/share/pipewire/media-session.d/alsa-monitor.conf (или ~/.config/pipewire/media-session.d/alsa-monitor.conf
$ su - # mcedit /usr/share/pipewire/media-session.d/alsa-monitor.conf
или
$ mcedit ~/.config/pipewire/media-session.d/alsa-monitor.conf
В одном из указанных выше файлов нужно раскомментировать/изменить значение параметра
api.alsa.headroom = 1024
При использовании wireplumber:
/usr/share/wireplumber/main.lua.d/50-alsa-config.lua (или ~/.config/wireplumber/main.lua.d/50-alsa-config.lua)
$ su - # mcedit /usr/share/wireplumber/main.lua.d/50-alsa-config.lua
или
$ mcedit ~/.config/pipewire/media-session.d/alsa-monitor.conf
В одном из указанных выше файлов нужно внести следующие параметры:
apply_properties = { ["api.alsa.headroom"] = 1024, },
Искажённый звук
- Для микрофонов, найдите проблемную звуковую карту в alsamixer и уменьшите уровень "Mic Boost" или "Internal Mic Boost".
- Попробуйте уменьшить частоту дискретизации до 44100 (44.1 кГц), как описано в разделе "Изменение частоты дискретизации".
Различные проблемы после простоя
Если звук пропал или исказился после пробуждения системы после сна, возможно потребуется реинициализировать ALSA:
# alsactl init