PulseAudio 无法将卡配置文件设置为“a2dp_sink”。我如何查看日志并找出问题所在?

PulseAudio 无法将卡配置文件设置为“a2dp_sink”。我如何查看日志并找出问题所在?

我目前已安装 ubuntu 16.04,a2dp 以前在全新安装时可用,我更愿意将其作为最后的选择。当从蓝牙设置中删除配对并再次配对时,有时它会设法使用 a2dp 配置文件,但如果耳机断开连接然后重新连接,a2dp 配置文件将不再起作用(尽管它显示使用 a2dp),它仅在切换到 HSP/HSF 后才起作用,然后我无法将其设置为 a2dp。

我曾尝试做过:

 pacmd set-card-profile <index> a2dp_sink

但出现以下错误:

"Failed to set card profile to 'a2dp_sink'"

我对 Linux 相当不熟悉,所以我不知道如何获取日志或在其中寻找什么,但我从 pacmd list-cards 中得到了这个:

工作时:

name: <bluez_card.50_C9_71_97_A1_86>
driver: <module-bluez5-device.c>
owner module: 27
properties:
    device.description = "Jabra REVO a4.0.0"
    device.string = "50:C9:71:97:A1:86"
    device.api = "bluez"
    device.class = "sound"
    device.bus = "bluetooth"
    device.form_factor = "headset"
    bluez.path = "/org/bluez/hci0/dev_50_C9_71_97_A1_86"
    bluez.class = "0x240404"
    bluez.alias = "Jabra REVO a4.0.0"
    device.icon_name = "audio-headset-bluetooth"
    device.intended_roles = "phone"
profiles:
    headset_head_unit: Headset Head Unit (HSP/HFP) (priority 20, available: unknown)
    a2dp_sink: High Fidelity Playback (A2DP Sink) (priority 10, available: unknown)
    off: Off (priority 0, available: yes)
active profile: <a2dp_sink>
sinks:
    bluez_sink.50_C9_71_97_A1_86/#6: Jabra REVO a4.0.0
sources:
    bluez_sink.50_C9_71_97_A1_86.monitor/#10: Monitor of Jabra REVO a4.0.0
ports:
    headset-output: Headset (priority 0, latency offset 0 usec, available: unknown)
        properties:

    headset-input: Headset (priority 0, latency offset 0 usec, available: unknown)
        properties:

当不存在时:

name: <bluez_card.50_C9_71_97_A1_86>
driver: <module-bluez5-device.c>
owner module: 25
properties:
    device.description = "Jabra REVO a4.0.0"
    device.string = "50:C9:71:97:A1:86"
    device.api = "bluez"
    device.class = "sound"
    device.bus = "bluetooth"
    device.form_factor = "headset"
    bluez.path = "/org/bluez/hci0/dev_50_C9_71_97_A1_86"
    bluez.class = "0x240404"
    bluez.alias = "Jabra REVO a4.0.0"
    device.icon_name = "audio-headset-bluetooth"
    device.intended_roles = "phone"
profiles:
    headset_head_unit: Headset Head Unit (HSP/HFP) (priority 20, available: unknown)
    a2dp_sink: High Fidelity Playback (A2DP Sink) (priority 10, available: yes)
    off: Off (priority 0, available: yes)
active profile: <off>
ports:
    headset-output: Headset (priority 0, latency offset 0 usec, available: yes)
        properties:

    headset-input: Headset (priority 0, latency offset 0 usec, available: unknown)
        properties:

其所属模块为:

name: <module-bluez5-device>
argument: <path=/org/bluez/hci0/dev_50_C9_71_97_A1_86>
used: 0
load once: no
properties:
    module.author = "João Paulo Rechi Vita"
    module.description = "BlueZ 5 Bluetooth audio sink and source"
    module.version = "8.0"

我已经尝试修改 /etc/bluetooth/audio.conf 并安装 blueman,但没有成功。我还尝试重新安装 bluez 和 pulseaudio,但没有任何变化。

有什么方法可以让我了解问题所在并加以解决?

答案1

为了让您的系统被检测为 A2DP 接收器(例如通过计算机扬声器播放手机中的音乐),请Enable=Source,Sink,Media,Socket[General]下添加/etc/bluetooth/audio.conf

完成此操作后,重新启动蓝牙守护进程

systemctl restart bluetooth

连接耳机设备

bluetoothctl
connect <MAC>

检查您的卡并设置个人资料

pactl list cards short
pacmd set-card-profile <index> <profile>

答案2

根据“活动配置文件:<off>”行,声音配置文件未激活。

一个易于使用的更改配置文件的程序是 pavucontrol。您可以使用 安装它sudo apt install pavucontrol -y。然后从命令行运行 pavucontrol,或者如果您在 Kubuntu 上并输入 pavucontrol,请按 Alt+F2。

选择配置选项卡,然后尝试更改耳机的配置文件,看看是否能为您更新。Linux 中似乎仍存在蓝牙 a2dp 错误,它影响了我的两个 16.04 安装。如果它已经显示 A2DP,请将其更改为 OFF,断开蓝牙小程序中的设备,然后重新连接。最后继续将配置文件更改回 A2DP,它应该可以工作。

您还可以在命令行上尝试以下命令,它将为您完成大部分操作。将数字 2 替换为下面两个 pacmd 命令的当前索引号。

pacmd set-card-profile 2 off
bluetoothctl
disconnect 50:C9:71:97:A1:86
connect 50:C9:71:97:A1:86
pacmd set-card-profile 2 a2dp_sink

对于更复杂但自动化的方式,执行相同的操作,将配置文件循环关闭,然后返回到 a2dp,但不执行蓝牙设备的断开连接和连接

index=`pacmd list-cards | grep bluez_card -B1 | grep index | awk '{print $2}'`
pacmd set-card-profile $index off
pacmd set-card-profile $index a2dp_sink 

我还编写了一个可以工作但不太好的脚本来做同样的事情,但同时断开并重新连接蓝牙耳机。它会抓取配置文件索引,因为每次设备断开连接并重新连接时,索引都会发生变化。这是用上面列出的耳机的设备 ID 硬编码的

pacmd set-card-profile `pacmd list-cards | grep bluez_card -B1 | grep index | awk '{print $2}'` off
sleep 2
echo -e "disconnect 50:C9:71:97:A1:86\n quit"|bluetoothctl
sleep 5
echo -e "connect 50:C9:71:97:A1:86\n quit"|bluetoothctl
sleep 5
pacmd set-card-profile `pacmd list-cards | grep bluez_card -B1 | grep index | awk '{print $2}'` a2dp_sink

在测试过程中,我最终选择了 5 秒而不是 3 秒的睡眠时间,因为设备尚未准备好更改音频配置文件。您的结果可能会有几秒钟 +/- 5 秒的差异。编辑有关潜在陷阱的内容。我确实发现有时需要运行较大的脚本两次才能正常工作。我不确定增加睡眠时间是否有帮助,因为我还没有测试过。但我已经在两台装有同一品牌 BT 耳机的机器上使用了它,它正在做它应该做的事情,即自动执行让耳机上的声音正常工作的过程。

最终,该问题将在蓝牙软件包中得到修复,但似乎在 Ubuntu 的新版本以及其他版本的 Linux 中不断出现。但无论如何,希望这对你有所帮助

答案3

我在 Ubuntu 16.04.1 LTS 上遇到了这个问题,并应用了 GDM 解决方法https://wiki.debian.org/BluetoothUser/a2dp解决了。

具体来说,创建/编辑/var/lib/gdm3/.config/pulse/client.conf如下:

autospawn = no
daemon-binary = /bin/true

然后

sudo chown gdm:gdm /var/lib/gdm3/.config/pulse/client.conf

我还添加了/etc/pulse/default.pa

load-module module-switch-on-connect

尽管这可能不是绝对必要的。

重新启动后,我通过蓝牙管理器连接并能够成功将音频配置文件切换为a2dp_sink

答案4

拉格里米发布了脚本在启动板上基于Jamie S 的回答。

  • 在脚本内的变量中更改设备的 MAC 地址!(可以通过bluetoothctl--> 设备找到)

  • 使脚本可执行chmod a-x bluetooth_headphone_reactivation.sh

自动执行启动时(仅当耳机已打开时才有效):

  • 将脚本添加到 KDE 控制面板中的启动/关闭脚本中

对于快速手动执行:

  • 向应用程序启动器添加一个条目(您还可以设置键盘快捷键,如“CTRL+ALT+H”和/或将此启动器固定到窗口栏)

剧本:

#!/bin/sh  
device_mac='<your-devices-mac-address-here>' # From bluetoothctl info
pacmd set-card-profile "$(pacmd list-cards | grep bluez_card -B1 | grep index | awk '{print $2}')" off
sleep 2
echo "disconnect $device_mac\n quit" | bluetoothctl
sleep 5
echo "connect $device_mac\n quit" | bluetoothctl
sleep 5
pacmd set-card-profile "$(pacmd list-cards | grep bluez_card -B1 | grep index | awk '{print $2}')" a2dp_sink

相关内容