无法将配置文件更改为耳机头单元

D. *_*Joe 33 bluetooth headset

我通过蓝牙将 Sony MDR-ZN770BN 连接到我的 PC。但我只能使用A2DP。当我将它切换到 HSP 时,我收到消息“无法将配置文件更改为耳机_head_unit”,因此无法拨打 Skype 电话。任何帮助家伙?:/

小智 49

我在使用 Galaxy Earbuds+ 的 Ubuntu 18.04 上遇到了类似的问题,这是我解决的方法:

我的耳塞配置文件是 A2DP、AVRCP 和 HFP,不支持 HSP。Pulseaudio 仅支持开箱即用的 HSP。这就是我无法切换到 HSP/HFP 的原因。为了使 HSP/HFP 工作,您必须在需要 ofono 的pulseaudio 上启用 HFP。

  1. 安装ofono

    sudo apt install ofono
    
    Run Code Online (Sandbox Code Playgroud)
  2. 配置pulseaudio以使用ofono:

  • Goto/etc/pulse/default.pa找到该行load-module module-bluetooth-discover并将其更改为load-module module-bluetooth-discover headset=ofono.

  • 将用户添加pulse到组bluetooth以授予权限:(sudo usermod -aG bluetooth pulse可能已经正确了)

  • 非常重要:要授予权限,请将其添加到/etc/dbus-1/system.d/ofono.conf(之前</busconfig>):

      <policy user="pulse">
        <allow send_destination="org.ofono"/>
      </policy>
    
    Run Code Online (Sandbox Code Playgroud)
  1. 提供phonesimofono. 为了使ofono工作,您必须为其提供调制解调器!您可以安装一个名为 phonesim(由 ofono 实现)的调制解调器模拟器以使其工作:

请注意,该命令可以是phonesim. 为了确保phonesim正确启动,你可以克隆ofono repo并使用他们的测试脚本:

cd /tmp
git clone git://git.kernel.org/pub/scm/network/ofono/ofono.git
cd ofono/test
./list-modems
Run Code Online (Sandbox Code Playgroud)

您应该会在结果中看到调制解调器。您可能必须首先通过在同一目录中执行enable-modemonline-modem脚本来启用调制解调器。

  • 启用调制解调器后,您应该能够启用 HFP 配置文件。
  1. 自动启动phonesim。由于您手动执行了phonesim,因此每次重新启动后您都应该再次执行它。相反,您可以安装ofono-phonesim-autostart它将作为服务启动 phonesim。

参考:

  • 感觉教程到最后都不完整,“ofono-phonesim -p 12345 /usr/share/phonesim/default.xml”就挂了。在哪里启用调制解调器,哪个目录留给可怜的读者决定。发现 100 个 ofono 污染目录。期望 ubuntu 在 2021 年开箱即用地支持 airpods 是可耻的。有一天......我们说过去30年。删除所有这些伏都教软件包并接受我将不得不切换到 USB 耳机才能说话。 (5认同)
  • 听从命令时我从未如此无知,但它确实让我的华为 Freelace 耳机开始工作了!非常感谢。 (4认同)
  • `ofono-phonesim-autostart` 并不适合我。我该如何设置? (4认同)
  • 当我尝试运行 `./enable-modem` 时,出现以下错误:`File "/usr/lib/python3/dist-packages/dbus/connection.py", line 652, in call_blocking reply_message = self.send_message_with_reply_and_block ( dbus.exceptions.DBusException: org.ofono.Error.Failed: Operation failed` 这是什么意思,我该如何解决? (3认同)
  • 这为我在 Ubuntu 18.04 上使用 AirPods 解决了这个问题,谢谢! (2认同)
  • 我不得不使用 `./enable-modem /phonesim` 和 `./online-modem /phonesim` 来使耳机麦克风工作,但输出质量变得很差,所以我更喜欢使用内置 Microfone 并放弃这个解决方案。 (2认同)

Zol*_*tán 10

我最初将此作为对@alisabzevari 帖子的编辑发布,但该编辑被拒绝:( 我仍然认为这些信息非常有价值,我不想丢失它,所以我将其发布为答案:

截至 2020 年 10 月 17 日,在 Ubuntu 20.04ofono-phonesim-autostart中不可用。您可以做的是创建以下systemd单元以在启动时将其作为守护程序启动:

ofono-phonesim -p 12345 /usr/share/phonesim/default.xml在启动时作为 systemd 单元运行,请/etc/systemd/system/ofono-phonesim.service使用以下内容创建文件(以 root 身份):

[Unit]
Description=Run ofono-phonesim in the background
    
[Service]   
ExecStart=ofono-phonesim -p 12345 /usr/share/phonesim/default.xml
Type=simple
RemainAfterExit=yes

[Install]   
WantedBy=multi-user.target
Run Code Online (Sandbox Code Playgroud)

之后ofono-phonesim运行,你还需要启用并把phonesim调制解调器联机。我(@Zoltán)通过创建另一个systemd依赖于上述ofono-phonesim systemd单元的单元文件来做到这一点。将以下内容放入/etc/systemd/system/phonesim-enable-modem.service

[Unit]
Description=Enable and online phonesim modem
Requires=ofono-phonesim.service
    
[Service]
ExecStart=/<path-to-cloned-ofono-git-repo>/test/enable-modem /phonesim
ExecStart=/<path-to-cloned-ofono-git-repo>/test/online-modem /phonesim
Type=oneshot
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target
Run Code Online (Sandbox Code Playgroud)

然后运行以下命令来运行两个守护进程:

[Unit]
Description=Run ofono-phonesim in the background
    
[Service]   
ExecStart=ofono-phonesim -p 12345 /usr/share/phonesim/default.xml
Type=simple
RemainAfterExit=yes

[Install]   
WantedBy=multi-user.target
Run Code Online (Sandbox Code Playgroud)

检查服务是否正在运行

[Unit]
Description=Enable and online phonesim modem
Requires=ofono-phonesim.service
    
[Service]
ExecStart=/<path-to-cloned-ofono-git-repo>/test/enable-modem /phonesim
ExecStart=/<path-to-cloned-ofono-git-repo>/test/online-modem /phonesim
Type=oneshot
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target
Run Code Online (Sandbox Code Playgroud)

最后,重新启动pulseaudiopulseaudio -k。现在您应该能够将配置文件切换到headset_head_unit.


1nf*_*rn0 7

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

这是我为解决这个问题而写的详细文章,我也在此处添加了其中的步骤。您可以遵循它,并且很可能能够解决您的问题。

未检测到蓝牙耳机麦克风

打开您的终端并按照以下步骤操作:

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

    sudo add-apt-repository ppa:pipewire-debian/pipewire-upstream
    
    Run Code Online (Sandbox Code Playgroud)
  2. 要更新系统中的 PPA 包,请执行以下操作:

    sudo apt update
    
    Run Code Online (Sandbox Code Playgroud)
  3. 安装软件包:

    sudo apt install pipewire
    
    Run Code Online (Sandbox Code Playgroud)
  4. 还有一个依赖需要和Pipewire一起安装,否则会出现“安装pipewire后蓝牙耳机无法连接”的问题。通过以下方式安装依赖项:

    sudo apt install libspa-0.2-bluetooth
    
    Run Code Online (Sandbox Code Playgroud)
  5. 现在,安装客户端库:

    sudo apt install pipewire-audio-client-libraries
    
    Run Code Online (Sandbox Code Playgroud)
  6. 重新加载守护进程:

    systemctl --user daemon-reload
    
    Run Code Online (Sandbox Code Playgroud)
  7. 禁用 PulseAudio:

    systemctl --user --now disable pulseaudio.service pulseaudio.socket
    
    Run Code Online (Sandbox Code Playgroud)
  8. 如果您使用的是 Ubuntu 20.04,您还需要通过以下方式“屏蔽”PulseAudio:

    systemctl --user mask pulseaudio
    
    Run Code Online (Sandbox Code Playgroud)

我不确定,但如果可能,您也可以尝试在其他版本上运行它。
9. Pipewire 新的更新后,还需要启用pipewire-media-session-service

   systemctl --user --now enable pipewire-media-session.service
Run Code Online (Sandbox Code Playgroud)
  1. 您可以确保 Pipewire 现在正在运行:

    pactl info
    
    Run Code Online (Sandbox Code Playgroud)

    此命令将提供以下输出,在服务器名称中您可以看到:

    PulseAudio (on PipeWire 0.3.28)
    
    Run Code Online (Sandbox Code Playgroud)

    现在应该一切正常,您可以看到您的麦克风。

如果它没有出现,请尝试通过以下命令重新启动 Pipewire:

systemctl --user restart pipewire
Run Code Online (Sandbox Code Playgroud)

此外,如果安装了 ofono 和 ofono-phonesim,则需要卸载它们。

sudo apt remove ofono
sudo apt remove ofono-phonesim
Run Code Online (Sandbox Code Playgroud)

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

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

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

systemctl --user unmask pulseaudio
systemctl --user --now enable pulseaudio.service pulseaudio.socket
Run Code Online (Sandbox Code Playgroud)

  • 对于连接失败: systemctl --user restart pipeline-pulse 在 systemctl --user restart pipeline 之后丢失 (6认同)
  • 所有作品。但配置文件 HSP、HFP 不存在 (3认同)
  • 谢谢,这应该是公认的答案!只有一件事,在您的 Medium 帖子上,连字符自动更正/格式破坏了“systemctl”命令,例如它看起来像“systemctl — user daemon-reload”而不是“systemctl --user daemon-reload” (2认同)
  • 这应该是公认的答案,它对我来说非常有用,与第一个答案相反...... Ubuntu 在 2021 年默认情况下不支持蓝牙耳机电话作为即插即用,这是怎么回事??? (2认同)