在 Ubuntu 20.04 中用 Pipewire 替换 Pulseaudio

在 Ubuntu 20.04 中用 Pipewire 替换 Pulseaudio

自从我安装了 Ubuntu 20.04 以来,我一直面临系统无法检测到蓝牙耳机麦克风的问题。我的耳机在 Windows 上完美运行。此外,我无法在 Ubuntu 中从 AD2P 切换到 HFP。所以我的最终想法是删除 PulseAudio 并安装 pipewire,希望它能解决我的问题。

有人可以提供做同样事情的步骤吗?我搜索过好几次,但还是找不到正确的步骤。

答案1

我在使用 Oneplus Wireless Z Bass 版本时遇到了同样的问题。PulseAudio 无法检测到我的耳机麦克风,问题是我的耳机没有 HSP 配置文件,只有 HFP 配置文件。经过 2 天的尝试,我找到了解决方案,用 Pipewire 声音服务器替换 PulseAudio,它本身支持 HSP、HFP 和 A2DP。因此无需安装任何其他实用程序,例如ofonophonesim另外,需要注意的是,即使按照所有步骤在 PulseAudio 中配置后,我的问题仍未解决ofono。所以我想出了用 PipeWire 替换 PulseAudio 的步骤。

这是我写的解决此问题的详细文章,其中的步骤我也在这里添加。您可以按照它进行操作,很可能能够解决您的问题。

未检测到蓝牙耳机麦克风

打开终端并执行以下步骤:

  1. 我们将使用 PPA 将 Pipewire 添加到 Ubuntu 20.04,该 PPA 会定期维护:

    sudo add-apt-r-epository ppa:pipewire-debian/pipewire-upstream
    
  2. 要更新系统中的 PPA 包,请执行以下操作:

    sudo apt update
    
  3. 安装软件包:

    sudo apt install pipewire
    
  4. Pipewire 还需要安装依赖项,否则你将面临以下问题“安装 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
    
  10. 您可以确保 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

如果仍然没有显示您的麦克风,您可以尝试重新启动一次,然后移除并再次配对您的蓝牙设备,以检查它是否正常工作。

我希望我已经帮助您解决了您的问题。

如果您想回滚我们所做的所有更改,您可以使用以下命令:

systemctl --user unmask pulseaudio
systemctl --user --now disable pipewire{,-pulse}.{socket,service}    
systemctl --user --now enable pulseaudio.service pulseaudio.socket

答案2

补充一下 1nfern0 的回答,pactl info我按照所有步骤操作后,仍然出现连接失败。我通过运行以下命令解决了这个问题: systemctl --user --now enable pipewire pipewire-pulse

您可能还需要重新启动系统一次。

答案3

上面的答案很重要,还有另一件事可能,那就是你有一个旧的配置文件,/etc/pipewire/pipewire.conf它会阻止 pipewire 正常工作,我删除了整个/etc/pipewire目录并重新安装pipewirepipewire-pulse解决了问题,现在一切正常。

答案4

完成描述的步骤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

相关内容