Pulseaudio未检测到蓝牙耳机[关闭]
Posted
技术标签:
【中文标题】Pulseaudio未检测到蓝牙耳机[关闭]【英文标题】:Pulseaudio not detecting bluetooth headset [closed] 【发布时间】:2014-07-04 19:51:29 【问题描述】:我正在尝试将蓝牙耳机连接到我的 RPI。我的设置如下:
archlinux-arm,内核: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 似乎无法识别它并且没有注册 source
和 sink
条目:
[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-policy
和 module-bluetooth-discover
模块是否已加载。甚至尝试卸载并重新加载:
pactl unload-module module-bluetooth-discover
pactl load-module module-bluetooth-discover
已成功加载模块,但仍未显示在 sources
或 sinks
列表中。
我还尝试配置 /etc/bluetooth/audio.conf
以启用不同的选项,例如:
Enable=Source,Sink,Media,Socket
Enable=Source,Sink,Headset,Gateway,Control,Media,Socket
Enable=Source,Sink,Media
...
但它并没有改变任何东西。
我完全没有想法...... 为什么 PulseAudio 无法识别它?有什么我错过的吗?我需要以一些特殊的方式配置I PulseAudio吗?
【问题讨论】:
我也遇到过这个问题,更多请参考@bugs.debian.org/cgi-bin/bugreport.cgi?bug=725610,通过删除启用选项中的Socket来更改audio.conf修复 【参考方案1】:与此同时,我已经设法解决了这个问题,以下是对我有用的步骤。 有问题的操作系统是 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
我们可以通过hcitool
、bt-adapter
或bt-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 及其支持的配置文件。您可能至少会看到那里列出的A2DP
和HSP
配置文件。你可以像这样在它们之间切换:
# pacmd set-card-profile <card_id> <profile_name>
pacmd set-card-profile 1 a2dp
pacmd set-card-profile 1 hsp
自动连接
bluez-tools 包中包含一个名为 bt-monitor 的工具,该工具从 bluetoothd
守护程序捕获 D-Bus 信号并为检测到的设备启动连接配对(且受信任)。运行 bt-monitor
并通过关闭和打开 BT 耳机进行测试。
【讨论】:
【参考方案2】:老问题,但我自己在寻找上述问题的解决方案时遇到了这个问题,所以我想我会来这里并发布我如何在我的设置中对其进行整理。
事实证明,Pulseaudio 真的没有打包或配置为作为系统守护进程运行,默认配置假定您将在会话中运行,理想情况下在 X 下运行。这具有直接影响用于访问系统总线:Pulseaudio 期望会话 DBus 可供其使用,并且 module-bluetooth-discover 依赖于此来动态加载 module-buetooth-device 并设置相应的接收器/源。
所以,您需要为 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:很抱歉我没有确切的 arch 解决方案,但我很确定以上内容适用(原始指南是为 fedora 编写的......)
【讨论】:
就我而言,在 Arch 上,这使我的默认蓝牙控制器无法访问。以上是关于Pulseaudio未检测到蓝牙耳机[关闭]的主要内容,如果未能解决你的问题,请参考以下文章
bluez5.50+pulseaudio实现蓝牙音响音频播放