蓝牙音箱:首选模式“高保真播放”(A2DP)无法保存。

2017年8月更新:我标记为接受的解决方案似乎在Ubuntu 15.10之前有效。对于16.04+,请选择更近期的解决方案之一。

对于16.04+,配置文件是/etc/bluetooth/main.conf而不是/etc/bluetooth/audio.conf。

我有一个蓝牙音箱,索尼SRS-BTX300,在Linux/Ubuntu 13.04中可以使用,但需要一些调整。(2013年12月更新:在13.10中仍存在相同问题)

每次打开电脑并重新连接音箱后,我都必须将首选带宽模式设置为“高保真播放”(A2DP)。

该模式每次都会重置为“电话/双工”(低带宽)。重置音箱需要大约20次点击(通过菜单点击、断开连接、重新连接、选择模式、测试),这绝对是太多的点击次数。

如何使“A2DP”模式成为默认模式,并且以持久的方式实现?

以下是一些屏幕截图。

在Unity顶部面板上点击蓝牙图标后选择此菜单...

Bluetooth Icon on panel

设置完这个之后...

A2DP

... 在重启/暂停计算机后,首选模式将被重置为此模式

Telephony Duplex


你可以尝试在/etc/bluetooth/audio.conf文件中调整设置。例如,如果你不使用任何耳机,将MaxConnected=1的设置改为0 - falconer
@falconer 这在15.04版上起作用了。谢谢。 - black
6个回答

在/etc/bluetooth/audio.conf中有一个选项叫做AutoConnect=true,被注释掉了。
sudo nano /etc/bluetooth/audio.conf

删除AutoConnect=true行开头的“#”符号。
我发现通过删除#来启用此选项,可以使我的蓝牙耳机正常连接。
重新启动蓝牙服务以使更改生效:
sudo service bluetooth restart

谢谢!- 在那个配置文件中,上面的注释文本对于那个选项来说相当冗长,并且有点误导性(“所以默认设置为true通常是一个好主意。”),而且它被注释掉了:#AutoConnect=true。--- 现在移除"#"符号似乎对我也起作用了,尽管我还没有重新启动(只是打开和关闭了扬声器)。 - knb
1刚开始还能运行,但现在不行了。还有什么其他的想法吗? - TIIUNDER
9在Ubuntu 15.10中找不到这个文件? - timr
和@tim一样,添加文件也没有帮助。 - Nathan J.B.
为什么这个没有得到所有的赞? - John Blackberry
8在16.04版本中也没有这个文件... - knocte
这对我的新Bose Quiet Control 30耳机/颈戴式耳塞(QC30)起了作用。之前它的声音很嘶嘶作响,让我疯狂,现在听起来就像是我对Bose期望的样子! - Elijah Lynn
8从Ubuntu 17.04开始,也没有这样的文件。我尝试修改main.conf,在文件的某个地方添加AutoConnect=true,但它并没有解决我的问题... - Johannes Lemonde
@JohannesLemonde - 在那个文件中取消注释Name = BlueZ,然后重新启动蓝牙,在Xfce(18.04)中解决了我的问题:https://askubuntu.com/a/1087118/925128 - cipricus
在Ubuntu 19.04上对我起作用,尽管我不得不重新配对我的耳机(Sony 700N)。 - Ryan Krage
/etc/bluetooth/main.conf的配置对我没有起作用。每次我的耳机或笔记本电脑关闭并重新打开时,自动重新连接的耳机都会进入“HSP/HFP”模式,无法设置为“A2DP Sink”模式。它们需要重新连接/修复。因此,我将其编写成了这个代码片段:https://gist.github.com/egelev/2e6b57d5a8ba62cf6df6fff2878c3fd4 - egelev
@knb 这是被注释掉的,因为true是默认的内置设置。 - Bachsau


难以置信的是,这起作用了。非常感谢你! - Avio
1嗯,别忘了执行 sudo restart bluetooth 命令以使设置生效。 - Avio
对于 Ubuntu 14.04 使用 Upstart:sudo restart --system bluetooth - DmitrySandalov
15.10不太有效。:( - Nathan J.B.
如果我这样做,扬声器就不再出现在声音设置中了。我该如何调试它? - Ciprian Tomoiagă
7适用于Ubuntu 16.04,但文件路径为/etc/bluetooth/main.conf - noe
这是解决在Ubuntu 14.04上使用Bose Quiet Control 30颈带式耳机(QC30)的另一半难题。另一半答案在问题中的这个回答里。http://askubuntu.com/a/563996/11929 - Elijah Lynn
2是的!适用于Ubuntu 16.04 --> /etc/bluetooth/main.conf。 - user584583
这对我在Ubuntu 17.04上有效。 我刚刚在文件/etc/bluetooth/main.conf中添加了Disable=Headset,然后使用sudo service bluetooth restart重新启动了蓝牙服务。 - jplandrain
我在18.04版本尝试过,当运行service bluetooth status时出现了这个错误:/etc/bluetooth/main.conf中的General组未知的键值Disable。 - Alfred Bez
在 main.conf 中添加这行代码对我有用,Ubuntu 22.04。 - Dan Abrey

对于那些想知道的人,我发现在Ubuntu 16.04中有一个微小的差异:
sudo gedit /etc/bluetooth/main.conf

更新以下行
#AutoEnable=false

AutoEnable=true

跟随着
sudo service bluetooth restart

对我来说,当连接蓝牙音频设备时,默认将音频配置文件设置为A2DP Sink。

1可以工作了,但我还添加了Disable=Headset并重新启动了电脑。 - wordsforthewise
不知道你在说什么,@cipricus。我想我是把Disable=Headset添加到了我的/etc/bluetooth/main.conf文件中。 - wordsforthewise
@wordsforthewise - 我想要弄清楚是否需要这两行代码,或者只需要其中一行就足够了,无论哪种方式都能正常工作。- 在尝试测试时,我发现实际上我两行代码都有。将Disable=Headset注释掉并重新启动蓝牙,一切正常。然后又注释掉AutoEnable=true并重新启动蓝牙:无法连接耳机。但是在重新启动系统后,我可以连接它,并且一切正常,尽管现在这两行代码都被注释掉了。奇怪。 - cipricus
仅仅因为这个方法在你身上偶然起作用,并不意味着它就是一个解决方案。AutoEnable 只是在启动时启用适配器,除此之外没有其他功能。 - Bachsau

我正在使用Gnome3,但是一段时间后我的耳机再也无法连接到A2DP了。我不得不停止Gnome创建一个pulseaudio守护进程,通过创建文件/var/lib/gdm3/.config/pulse/client.conf(作为root用户),并在其中添加以下行:
autospawn = no
daemon-binary = /bin/true

然后将所有者设置为gdm:
sudo chown gdm:gdm /var/lib/gdm3/.config/pulse/client.conf

然后注销/登录或查找以gdm用户身份运行的pulseaudio进程,使用ps aux | grep pulse命令。
修剪后的输出如下:
gdm       2943  10616 ?        S<l  Sep01   0:00 /usr/bin/pulseaudio..

然后使用kill <pid>命令杀死进程,对我来说是2943
运行bluetoothctl并重新连接后,我可以运行pacmd list-cards找到我的设备index: 2,然后使用pacmd set-card-profile 2 a2dp_sink切换到a2dp_sink。
最后终于又可以正常工作了!

为了在Ubuntu 14.04中连接时自动切换音频到A2DP蓝牙设备,我按照https://sandalov.org/blog/2146/上的说明进行操作,效果非常完美。
修改/etc/pulse/default.pa以自动将pulseaudio输出切换到Bluez:
.ifexists module-bluetooth-discover.so
load-module module-bluetooth-discover
load-module module-switch-on-connect  # Add this
.endif

修改/etc/bluetooth/audio.conf以自动选择A2DP配置文件(而不是HSP/HFP):
[General]
Disable=Headset # Add this

应用更改:
pulseaudio -k # Restarts pulseaudio
sudo service bluetooth restart # Restarts BT

更多信息请参见:https://wiki.archlinux.org/index.php/Bluetooth_headset

2无法在16.04版本上工作。这个答案会禁用所有音频输出源(在PulseAudio中创建故障)。 - stevenmc
这对我在Ubuntu 19.10上使用我的Sony WH-1000XM3耳机有效。(除了我将audio.conf的更改放在main.conf[Policy]下) - Vegard
顺便说一句,起初似乎是音频被禁用了,但过了一会儿又恢复了。重新启动可能会有帮助。 - Vegard

真正的问题在于,默认配置只允许每个设备一个配置文件。可以通过在“/etc/bluetooth/main.conf”中设置MultiProfilesinglemultiple来进行更改。之后重新启动蓝牙守护程序。然后您就可以随时更改配置文件了。