![自动将声音输出设备切换到蓝牙耳机并在连接时强制使用 A2DP 配置文件](https://linux22.com/image/61361/%E8%87%AA%E5%8A%A8%E5%B0%86%E5%A3%B0%E9%9F%B3%E8%BE%93%E5%87%BA%E8%AE%BE%E5%A4%87%E5%88%87%E6%8D%A2%E5%88%B0%E8%93%9D%E7%89%99%E8%80%B3%E6%9C%BA%E5%B9%B6%E5%9C%A8%E8%BF%9E%E6%8E%A5%E6%97%B6%E5%BC%BA%E5%88%B6%E4%BD%BF%E7%94%A8%20A2DP%20%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6.png)
此处使用 Mint 17 + MATE。我的蓝牙耳机 (Plantronics Backbeat Go2) 与我的系统连接得很好,但我必须采取几个手动步骤才能完成这项工作,我非常希望将其自动化:
- 每次重新启动后,我都必须在终端中运行 pactl load-module module-bluetooth-discover 才能使设备完全连接。我尝试将其放入 shell 脚本中以在启动时运行,但没有骰子:(
- 我的耳机会自动连接,没有任何问题,但它始终默认为“电话双工”甚至“关闭”,而不是 A2DP;我尝试过几种不同的策略来强制 A2DP,但都失败了:(
- 强制 BT 耳机作为默认输出设备。这里也尝试了几种策略...不幸的是,每次我连接耳机时,pacmd 的索引似乎都会改变,所以我无法以这种方式在 PA conf 文件 set-default-sink 中强制使用默认值。并且使用列出的名称似乎也不起作用 - 如果耳机不存在,它会切换到扬声器,并且如果耳机连接则不会切换回来:(
感谢您对解决这些问题提出的任何建议!
答案1
关于#3,我的解决方案是这样的:
- 添加一个合并所有其他设备的统一设备(同时输出到所有设备)
- 使用它作为默认输出设备
- 除 BT 耳机外,将所有其他物理输出保持静音
这样做的好处是,无论是否连接 BT 耳机,所有程序都可以向其发送输出。然后,一旦耳机连接,它就会开始接收声音。
如果您这样做,那么您还应该设置flat-volumes = no
为/etc/pulse/daemon.conf
并且仅使用音量控制键控制统一输出。
答案2
使用 udev 规则在连接时切换配置文件(或运行任何其他pulseaudio命令)的解决方案:
ACTION=="add", SUBSYSTEM=="input", ATTR{phys}=="<your headset addr>", RUN+="/usr/bin/su - <your username> -c '/usr/bin/pactl set-card-profile <your card id> a2dp_sink'"
其他配置文件选项包括“handsfree_head_unit”、“headset_head_unit”和“off”。
您可以通过以下方式获取卡的 ID:
pactl list cards short
答案3
出现第一个问题是因为 Pulse Audio 在启动后会卸载蓝牙模块,因此即使您将其放入启动脚本中,它仍然会在几秒钟后被卸载。
方案A
只需在脚本中添加启动延迟,例如:
sleep 10 && pactl load-module module-bluetooth-discover
方案B(推荐)
- 禁用蓝牙/脉冲音频插件。
- 右键单击蓝牙图标,选择插件,然后取消选中脉冲音频插件。
- 重新开始。
抱歉,我无法解决您剩下的两个问题。