自动将声音输出设备切换到蓝牙耳机并在连接时强制使用 A2DP 配置文件

自动将声音输出设备切换到蓝牙耳机并在连接时强制使用 A2DP 配置文件

此处使用 Mint 17 + MATE。我的蓝牙耳机 (Plantronics Backbeat Go2) 与我的系统连接得很好,但我必须采取几个手动步骤才能完成这项工作,我非常希望将其自动化:

  1. 每次重新启动后,我都必须在终端中运行 pactl load-module module-bluetooth-discover 才能使设备完全连接。我尝试将其放入 shell 脚本中以在启动时运行,但没有骰子:(
  2. 我的耳机会自动连接,没有任何问题,但它始终默认为“电话双工”甚至“关闭”,而不是 A2DP;我尝试过几种不同的策略来强制 A2DP,但都失败了:(
  3. 强制 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(推荐)

    1. 禁用蓝牙/脉冲音频插件。
    2. 右键单击蓝牙图标,选择插件,然后取消选中脉冲音频插件。
    3. 重新开始。

抱歉,我无法解决您剩下的两个问题。

相关内容