Замена 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 не обнаружен

Откройте терминал и выполните следующие действия:

  1. Мы будем использовать PPA для добавления Pipewire в Ubuntu 20.04, который регулярно поддерживается:

            sudo add-apt-repository ppa:pipewire-debian/pipewire-upstream
    
  2. Чтобы обновить пакеты PPA в вашей системе, выполните следующие действия:

            sudo apt update
    
  3. Установите пакет:

            sudo apt install pipewire
    
  4. Также необходимо установить зависимость с Pipewire, в противном случае вы столкнетесь с проблемой «Bluetooth-гарнитура не будет подключаться после установки pipewire» . Установите зависимость:

            sudo apt install libspa-0.2-bluetooth
    
  5. Теперь, чтобы установить клиентские библиотеки:

            sudo apt install pipewire-audio-client-libraries
    
  6. Перезагрузите демон:

            systemctl --user daemon-reload
    
  7. Отключить PulseAudio:

            systemctl --user --now disable pulseaudio.service pulseaudio.socket
    
  8. Если вы используете Ubuntu 20.04, вам также необходимо «замаскировать» PulseAudio:

            systemctl --user mask pulseaudio
    

Я не уверен, но, если возможно, вы можете попробовать запустить это и на других версиях.
9. После нового обновления Pipewire также необходимо включить pipewire-media-session-service:

         systemctl --user --now enable pipewire-media-session.service
  1. Вы можете убедиться, что 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

доступные кодекиpactl info

Другие вопросы по тегам