首页 文章

Pulseaudio未检测到蓝牙耳机[关闭]

提问于
浏览
2

我正在尝试将蓝牙耳机连接到我的RPI . 我的设置如下:

  • archlinux-arm,内核:linux-raspberrypi 3.12.23-1
    109 bluez4 4.101-4来自AUR,已构建并已安装

  • bluez-tools 0.1.38-3

  • bluez-utils 5.20-1

  • pulseaudio 5.0-1

  • pulseaudio-alsa 2-3

我扫描设备,成功配对,添加为可信任并连接它:

hcitool scan
bluez-simple-agent hci0 <MAC>
bt-device --set <MAC> Trusted 1
bt-audio -c <MAC>

此后,设备状态如下( bt-device -i <MAC> 输出):

[00:23:7F:2A:3B:24]
Name: PLT 510
Alias: PLT 510 [rw]
Address: 00:23:7F:2A:3B:24
Icon: audio-card
Class: 0x200404
Paired: 1
Trusted: 1 [rw]
Blocked: 0 [rw]
Connected: 1
UUIDs: [Headset, Handsfree]

所以,一切似乎都很棒,对吧?嗯,不太好 .
问题是当我尝试播放音频时,因为看起来PulseAudio没有 source t注册 sourcesink 条目:

[root@alarmpi bluetooth]# pactl list sources short
0   alsa_output.platform-bcm2835_AUD0.0.analog-stereo.monitor   module-alsa-card.c  s16le 2ch 44100Hz   IDLE
[root@alarmpi bluetooth]# pactl list sinks short
0   alsa_output.platform-bcm2835_AUD0.0.analog-stereo   module-alsa-card.c  s16le 2ch 44100Hz   SUSPENDED

我已经检查过 module-bluetooth-policymodule-bluetooth-discover 模块已加载 . 甚至试图卸载并重新加载:

pactl unload-module module-bluetooth-discover
pactl load-module module-bluetooth-discover

已成功加载模块,但仍未显示在 sourcessinks 列表中 .

我还尝试配置 /etc/bluetooth/audio.conf 以启用不同的选项,例如:

Enable=Source,Sink,Media,Socket
Enable=Source,Sink,Headset,Gateway,Control,Media,Socket
Enable=Source,Sink,Media
...

但它没有改变任何东西 .

我完全没有想法......为什么PulseAudio不能识别它?我错过了什么吗?我需要以一些特殊的方式配置I PulseAudio吗?

2 回答

  • 2

    老问题,但我在寻找上述解决方案时遇到了这个问题,所以我想我会来这里发布如何在我的设置中对其进行整理 .

    事实证明,Pulseaudio实际上并未打包或配置为作为系统守护程序运行,默认配置假定您将在会话中运行,理想情况下在X下运行 . 这对访问系统总线有直接影响:Pulseaudio期望会话DBus可以使用,而模块蓝牙发现依赖于此,以动态加载模块 - 蓝牙 - 设备并设置相应的接收器/源 .

    那么,您需要为DBus规则添加一个例外 . 本指南here建议将以下内容添加到/etc/dbus-1/system.d/pulse.conf:

    <!DOCTYPE busconfig PUBLIC
    "-//freedesktop//DTD D-BUS Bus Configuration 1.0//EN"
    "http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd">
    <busconfig>
      <policy user="root">
        <allow own="org.pulseaudio.Server"/>
        <allow send_destination="org.bluez"/>
        <allow send_interface="org.bluez.Manager"/>
      </policy>
      <policy user="pulse">
        <allow own="org.pulseaudio.Server"/>
        <allow send_destination="org.bluez"/>
        <allow send_interface="org.bluez.Manager"/>
      </policy>
      <policy context="default">
        <deny own="org.pulseaudio.Server"/>
        <deny send_destination="org.bluez"/>
        <deny send_interface="org.bluez.Manager"/>
      </policy>
    </busconfig>
    

    但在我的情况下(Raspbian Wheezy)这个文件不是空的,所以YMMV . 请注意,最后一部分(上下文默认,所有拒绝)都很关键,如果丢失,PA将不会从Dbus收到通知 .

    添加规则,然后:

    service dbus restart
     service bluetooth restart
     service pulseaudio restart
    

    和pactl应该在设备连接时列出bluez源 . 祝好运!

    ps:对不起,我没有精确的拱形解决方案,但我很确定以上内容适用(原始指南是为fedora编写的......)

  • 2

    在此期间,我设法解决了这个问题,以下是适用于我的步骤 .
    有问题的操作系统是 archlinux-arm .

    安装

    安装以下包:

    • bluez4-4.101-4

    • bluez-tools-0.1.38-3

    • bluez-utils 5.21-2

    • libpulse-4.0-6

    • pulseaudio-4.0-6

    • pulseaudio-alsa-2-2

    • alsa-utils

    注意:我已经设法让PulseAudio使用此处列出的特定软件包版本来检测我的蓝牙耳机 . 其他一些版本也有用,但我尝试的大多数组合都存在我无法解决的问题 . 大多数软件包都可以从AUR(bluez4,bluez-tools,...)构建和安装,其他软件包可以通过pacman轻松安装 .

    补充准备

    在我们安装这些软件包版本之后,我们不希望 pacman 在我们进行系统升级时更新它们 . 为了防止这种情况,我们将以下行添加到 /etc/pacman.conf

    IgnorePkg = libpulse pulseaudio pulseaudio-alsa bluez bluez-tools
    

    PulseAudio无法使用 bluez4 时出现问题,尤其是在使用 bluez4 版本4.1及更高版本和 pulseaudio 版本3.0或更高版本时无法切换到 A2DP 配置文件 . 这可以通过从 /etc/bluetooth/audio.conf 中的已启用列表中省略 Socket 参数来解决:

    # Enable=Headset,Sink,Source,Socket
    Enable=Headset,Sink,Source
    

    如果这还不够,请尝试添加其他行:

    Disable=Socket
    

    跑步

    是时候启用和启动 bluetooth 服务了:

    systemctl enable bluetooth
    systemctl start bluetooth
    

    我们可以通过 hcitoolbt-adapterbt-device 发现我们的设备,并连接到它 . 例如,使用后者:

    bt-device -d
    bt-device -c <MAC>
    bt-device --set <MAC> Trusted 1
    bt-audio -c <MAC>
    

    第一个命令发现设备,秒通过其MAC地址连接到它 . 第三个将它设置为可信任,以便我们可以在稍后的范围内自动连接到它 . 最后一个命令将其连接为音频设备 . 在此之后,它应该在 pulseaudio 中可用 .

    与PulseAudio一起使用

    通过 pulseaudio --start 启动PA .
    检查源和接收器是否被正确识别:

    pactl list sources short
    pactl list sinks short
    

    您应该看到列出了BT接收器和源,这意味着PA已经检测到它们 . 注意接收器和源旁边的ID值 . 使用它们将BT设置为默认接收器/源:

    pacmd set-default-source <BT_SOURCE_ID>
    pacmd set-default-sink <BT_SINK_ID>
    

    您可以使用 pacmd list-cards 找到BT卡ID及其支持的配置文件 . 您可能会看到至少列出了 A2DPHSP Profiles . 您可以像这样在它们之间切换:

    # pacmd set-card-profile <card_id> <profile_name>
    pacmd set-card-profile 1 a2dp
    pacmd set-card-profile 1 hsp
    

    Autoconnection

    包bluez-tools包含一个名为bt-monitor的工具,它捕获来自 bluetoothd 守护程序的D-Bus信号,并为检测到的设备启动连接 . 配对(和信任) . 运行 bt-monitor 并关闭并打开BT耳机进行测试 .

相关问题