Настройка pipewire в Ubuntu
Установка
apt-get install pipewire pipewire-pulse pipewire-audio-client-libraries wireplumber pulseaudio-utils
Удалить pulse
apt-get purge pulseaudio
apt autoremove
Создайте папку для конфигов
mkdir -p /etc/pipewire/pipewire.conf.d
mkdir -p /etc/pipewire/pipewire-pulse.conf.d
Анонимный сокет
Создайте файл /etc/pipewire/pipewire-pulse.conf.d/60-pulse-socket.conf
context.modules = [
{
name = libpipewire-module-protocol-pulse
args = {
server.address = [
"unix:/tmp/pulse-socket"
]
}
}
]
context.exec = [
{ path = "/bin/chmod" args = "777 /tmp/pulse-socket" }
]
На другом пользователе в файле
nano /home/otheruser/.config/pulse/client.conf
default-server = unix:/tmp/pulse-socket
В /etc/environment нужно добавить
PULSE_SERVER=/tmp/pulse-socket
Убрать шум микрофона
Создайте файл /etc/pipewire/pipewire-pulse.conf.d/60-usb-audio-echo-cancel.conf
context.modules = [
{
name = libpipewire-module-echo-cancel
args = {
library.name = aec/libspa-aec-webrtc
aec.args = {
webrtc.gain_control = false
webrtc.extended_filter = false
webrtc.analog_gain_control = false
webrtc.digital_gain_control = false
#webrtc.experimental_agc = true
#webrtc.noise_suppression = true
}
}
}
]
Модуль echo cancel будет работать для микрофона выбранного по умолчанию.
Проверка звукового сервера
Проверить какой сервер сейчас работает можно командой
LANG=C pactl info | grep '^Server Name'
Статус сервера:
wpctl status
Перезапустить можно командой:
systemctl --user restart pipewire
Скрипт переключения аудио сервера
Данный скрипт позволяет переключиться с pipewire на pulseaudio и наоборот без перезагрузки компьютера
#!/bin/bash
RETVAL=0
case "$1" in
pulse)
systemctl --user disable pipewire
systemctl --user disable pipewire-pulse
systemctl --user disable pipewire.socket
systemctl --user disable pipewire-pulse.socket
systemctl --user stop pipewire
systemctl --user stop pipewire-pulse
systemctl --user stop pipewire.socket
systemctl --user stop pipewire-pulse.socket
systemctl --user enable pulseaudio.service
systemctl --user enable pulseaudio.socket
systemctl --user start pulseaudio.service
systemctl --user start pulseaudio.socket
LANG=C pactl info | grep '^Server Name'
;;
pipewire)
pulseaudio -k
systemctl --user disable pulseaudio.service
systemctl --user disable pulseaudio.socket
systemctl --user stop pulseaudio.service
systemctl --user stop pulseaudio.socket
systemctl --user enable pipewire
systemctl --user enable pipewire-pulse
systemctl --user enable pipewire.socket
systemctl --user enable pipewire-pulse.socket
systemctl --user start pipewire
systemctl --user start pipewire-pulse
LANG=C pactl info | grep '^Server Name'
;;
*)
echo "Usage: $0 {pulse|pipewire}"
RETVAL=1
esac
exit $RETVAL