Замена Pulseaudio на Pipewire в Ubuntu 20.04
Поскольку я установил Ubuntu 20.04, у меня возникли проблемы с тем, что микрофон моей Bluetooth-гарнитуры не обнаруживается системой. Моя гарнитура отлично работала с Windows. Кроме того, я не могу переключиться на HFP с AD2P в Ubuntu. Поэтому моя последняя мысль - удалить pulseaudio и установить pipewire, надеясь, что это решит мои проблемы.
Может ли кто-нибудь указать шаги, чтобы сделать то же самое? Я искал его довольно много раз, но не смог добраться до правильных шагов.
Большое спасибо!
9 ответов
Я столкнулся с той же проблемой с выпуском Oneplus Wireless Z Bass. Микрофон моей гарнитуры не был обнаружен PulseAudio, и проблема в том, что мои наушники не имеют профиля HSP, а только профиль HFP. Пробуя 2 дня, я пришел к решению заменить PulseAudio звуковым сервером Pipewire, который сам по себе поддерживает HSP, HFP и A2DP. Таким образом, не будет необходимости устанавливать какую-либо другую утилиту, например,
phonesim
. Также следует отметить, что моя проблема не была решена даже после выполнения всех шагов по настройке
ofono
в ИмпульсАудио. Поэтому я придумал шаги по замене PulseAudio на PipeWire.
Вот подробная статья, которую я написал для решения этой проблемы, шаги которой я также добавляю сюда. Вы можете следовать ему и, скорее всего, сможете решить свою проблему.
Микрофон гарнитуры Bluetooth не обнаружен
Откройте терминал и выполните следующие действия:
Мы будем использовать PPA для добавления Pipewire в Ubuntu 20.04, который регулярно поддерживается:
sudo add-apt-repository ppa:pipewire-debian/pipewire-upstream
Чтобы обновить пакеты PPA в вашей системе, выполните следующие действия:
sudo apt update
Установите пакет:
sudo apt install pipewire
Также необходимо установить зависимость с Pipewire, в противном случае вы столкнетесь с проблемой «Bluetooth-гарнитура не будет подключаться после установки pipewire» . Установите зависимость:
sudo apt install libspa-0.2-bluetooth
Теперь, чтобы установить клиентские библиотеки:
sudo apt install pipewire-audio-client-libraries
Перезагрузите демон:
systemctl --user daemon-reload
Отключить PulseAudio:
systemctl --user --now disable pulseaudio.service pulseaudio.socket
Если вы используете Ubuntu 20.04, вам также необходимо «замаскировать» PulseAudio:
systemctl --user mask pulseaudio
Я не уверен, но, если возможно, вы можете попробовать запустить это и на других версиях.
9. После нового обновления Pipewire также необходимо включить
pipewire-media-session-service
:
systemctl --user --now enable pipewire-media-session.service
Вы можете убедиться, что Pipewire теперь работает через:
pactl info
Эта команда выдаст следующий вывод, в поле «Имя сервера» вы можете увидеть:
PulseAudio (on PipeWire 0.3.28)
Теперь все должно работать, и вы можете видеть свой микрофон.
Если он не отображается, попробуйте перезапустить Pipewire с помощью этой команды:
systemctl --user restart pipewire
Редактировать: вам необходимо удалить ofono и phonesim из вашей системы, если они у вас установлены.
sudo apt remove ofono
sudo apt remove ofono-phonesim
Если он по-прежнему не показывает ваш микрофон, вы можете попробовать перезагрузить его один раз, удалить и снова подключить устройство Bluetooth, чтобы проверить, работает ли оно сейчас.
Надеюсь, я помог вам решить вашу проблему.
Если вы хотите отменить все сделанные нами изменения, вы можете сделать это, используя:
systemctl --user unmask pulseaudio
systemctl --user --now disable pipewire{,-pulse}.{socket,service}
systemctl --user --now enable pulseaudio.service pulseaudio.socket
Чтобы добавить к ответу 1nfern0,
pactl info
давал мне сбой подключения после выполнения всех шагов. Я обошел это, запустив:
systemctl --user --now enable pipewire pipewire-pulse
.
Вам также может потребоваться перезагрузить систему один раз.
Ответы выше были важны, есть еще одна вещь, которая возможна: у вас есть старый файл конфигурации в
/etc/pipewire/pipewire.conf
что помешает правильной работе pipewire, я удалил весь
/etc/pipewire
каталог и переустановил
pipewire
а также
pipewire-pulse
чтобы решить проблемы, и теперь все работает.
Я столкнулся с проблемой отказа в подключении
Connection failure: Connection refused
pa_context_connect() failed: Connection refused
Я выполнил следующие измененные шаги и успешно заменил Pulseaudio на Pipewire.
Шаг 1: Добавьте PPA-репозиторий PipeWire
$ sudo add-apt-repository ppa:pipewire-debian/pipewire-upstream
Шаг 2: Установитеpipewire-audio-client-libraries
упаковка
$ sudo apt update
$ sudo apt install pipewire pipewire-audio-client-libraries
Шаг 3: Установите несколько дополнительных библиотек, чтобы использовать гарнитуру Bluetooth.
$ sudo apt install gstreamer1.0-pipewire libpipewire-0.3-{0,dev,modules} libspa-0.2-{bluetooth,dev,jack,modules} pipewire{,-{audio-client-libraries,pulse,media-session,bin,locales,tests}}
Шаг 4: Перезагрузите демон в systemd
$ systemctl --user daemon-reload
Шаг 5. Отключите PulseAudio в Ubuntu.
$ systemctl --user --now disable pulseaudio.service pulseaudio.socket
Шаг 6: Запустите PipeWire и включите
$ systemctl --user --now enable pipewire pipewire-pulse
Шаг 7: Команда, чтобы убедиться, что PipeWire
$ pactl info
После выполнения шагов, описанных в ответе 1nfern0 (когда PipeWire работает), вы можете использовать следующий сценарий Bash для переключения между A2DP (высококачественное воспроизведение с отключенным микрофоном) и mSBC (для использования в качестве гарнитуры с включенным микрофоном) :
#!/bin/bash
# Toggle your bluetooth device (e.g., Bose Headphones) between A2DP mode (high-fidelity playback with NO microphone) and HSP/HFP, codec mSBC (lower playback quality, microphone ENABLED)
function tbt {
current_mode_is_a2dp=`pactl list | grep Active | grep a2dp`
card=`pactl list | grep "Name: bluez_card." | cut -d ' ' -f 2`
if [ -n "$current_mode_is_a2dp" ]; then
echo "Switching $card to mSBC (headset, for making calls)..."
pactl set-card-profile $card headset-head-unit-msbc
else
echo "Switching $card to A2DP (high-fidelity playback)..."
pactl set-card-profile $card a2dp-sink
fi
}
Приведенный выше скрипт является адаптацией: https://bbs.archlinux.org/viewtopic.php?pid=1973205#p1973205 .
pactl info
давал мне отказ в подключении (после выполнения шага 9 из принятого ответа на Ubuntu 20.04 LTS). Я исправил с помощью
wireplumber
вместо
pipewire-media-session-service
.
У меня были проблемы (так много, что я даже не знаю, с чего начать).
Что сработало для меня:
Выполнив все описанные выше шаги, я отправил в Терминал следующее:
Чтобы перезапустить Pulse Audio:
systemctl --user restart pulseaudio
mv ~/.config/pulse/ ~/.config/pulse.old
pulseaudio --k && pulseaudio --start
Чтобы переустановить Pulse Audio:
sudo apt update
sudo apt install --reinstall -o Dpkg::Options::="--force-confmiss" pulseaudio
dpkg -L pulseaudio
rm $HOME/.config/pulse/*
Включение Pipewire
systemctl --global --now enable pipewire{,-pulse}.{socket,service}
sudo systemctl --global --now enable pipewire{,-pulse}.{socket,service}
sudo systemctl --global --now enable pipewire pipewire-pulse
sudo systemctl --user --now enable pipewire pipewire-pulse
sudo systemctl --user --now enable pulseaudio.service pulseaudio.socket
Nuking пульсадио снова:
sudo pkill pulseaudio
sudo /etc/init.d/bluetooth restart
Я действительно не знаю, кто из них сделал трюк... но теперь после:
pactl info
Я получил:
Строка сервера: /run/user/1000/pulse/native
Версия протокола библиотеки: 35
Версия протокола сервера: 35
Является локальным: да
Индекс клиента: 155
Размер плитки: 65472
Имя пользователя: *
Имя хоста: *
Имя сервера: PulseAudio (на PipeWire 0.3.58)
Версия сервера: 15.0.0
Спецификация образца по умолчанию: float32le 2ch 48000Hz
Карта каналов по умолчанию: передний левый, передний правый
Приемник по умолчанию: bluez_output.90_98_38_0B_87_BD.a2dp-sink
Источник по умолчанию: alsa_input.pci-0000_00_1b.0.analog-stereo
Куки: 2b71:d622
И все это работает, потому что теперь в настройках Ubuntu отображается кодек AAC для устройства Bluetooth.
Надеюсь, это поможет кому-то...
➜ / sudo systemctl --global --now enable pipewire{,-pulse}.{socket,service}
Failed to connect to bus: $DBUS_SESSION_BUS_ADDRESS and $XDG_RUNTIME_DIR not defined (consider using --machine=<user>@.host --user to connect to bus of other user)
➜ / sudo systemctl --global --now enable pipewire pipewire-pulse
Failed to connect to bus: $DBUS_SESSION_BUS_ADDRESS and $XDG_RUNTIME_DIR not defined (consider using --machine=<user>@.host --user to connect to bus of other user)
➜ / sudo systemctl --user --now enable pipewire pipewire-pulse
Failed to connect to bus: $DBUS_SESSION_BUS_ADDRESS and $XDG_RUNTIME_DIR not defined (consider using --machine=<user>@.host --user to connect to bus of other user)
➜ / sudo systemctl --user --now enable pulseaudio.service pulseaudio.socket
Failed to connect to bus: $DBUS_SESSION_BUS_ADDRESS and $XDG_RUNTIME_DIR not defined (consider using --machine=<user>@.host --user to connect to bus of other user)
➜ /
я попробовал все вышеперечисленные ответы, но все еще не получаю кодек mSBC
#bluez5.enable-sbc-xq = true #bluez5.enable-msbc = true #bluez5.enable-hw-volume = true#bluez5.enable-faststream = true
у меня они включены в bluez-monitor.conf