Pulseaudio没有检测蓝牙耳机

时间:2014-07-04 19:51:29

标签: bluetooth raspberry-pi bluez pulseaudio archlinux-arm

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

  • archlinux-arm,kernel:linux-raspberrypi 3.12.23-1
  • 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似乎无法识别它并且没有注册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 个答案:

答案 0 :(得分:4)

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

安装

安装以下软件包:

  • bluez4-4.101-4
  • 的bluez工具-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

额外准备

在我们安装这些软件包版本之后,我们不希望{I} {}在我们进行系统升级时更新它们。为防止这种情况发生,我们将以下行添加到pacman

/etc/pacman.conf

PulseAudio无法与IgnorePkg = libpulse pulseaudio pulseaudio-alsa bluez bluez-tools 一起使用时出现问题,尤其是在使用bluez4 4.1及更高版本以及A2DP 3.0或更高版本时无法切换到bluez4配置文件。这可以通过从pulseaudio中的已启用列表中省略Socket参数来解决:

/etc/bluetooth/audio.conf

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

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

运行

是时候启用和启动Disable=Socket 服务了:

bluetooth

我们可以通过systemctl enable bluetooth systemctl start bluetooth hcitoolbt-adapter发现我们的设备,然后连接到它。例如,使用后者:

bt-device

第一个命令发现设备,秒通过其MAC地址连接到它。第三个将它设置为可信任,因此我们可以在稍后的范围内自动连接到它。最后一个命令将其连接为音频设备。在此之后,它应该在bt-device -d bt-device -c <MAC> bt-device --set <MAC> Trusted 1 bt-audio -c <MAC> 中可用。

与PulseAudio一起使用

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

pulseaudio --start

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

pactl list sources short
pactl list sinks short

您可以使用pacmd set-default-source <BT_SOURCE_ID> pacmd set-default-sink <BT_SINK_ID> 查找BT卡ID及其支持的配置文件。您可能会看到至少列出pacmd list-cardsA2DP个人资料。您可以像这样切换它们:

HSP

自动连接

bluez-tools 包含名为 bt-monitor 的工具,它捕获来自# pacmd set-card-profile <card_id> <profile_name> pacmd set-card-profile 1 a2dp pacmd set-card-profile 1 hsp 守护程序的D-Bus信号并启动检测到的连接配对(和受信任)的设备。运行bluetoothd并关闭并打开BT耳机进行测试。

答案 1 :(得分:3)

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

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

所以,你需要为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编写的......)