自动连接蓝牙设备

Cas*_*ler 30 configuration sound pulseaudio bluetooth

有没有办法在 Ubuntu 中设置蓝牙以在它打开时自动连接到它配对的设备。此外,有没有办法在连接时自动将声音输出更改为蓝牙耳机?

Tak*_*kat 27

脉冲音频 >= 1.0

通过编辑/etc/pulse/default.pa我们可以加载pulseaudio模块module-switch-on-connect以在音频接收器呈现给pulseaudio声音服务器时自动连接到它。我们需要插入以下行

load-module module-switch-on-connect
Run Code Online (Sandbox Code Playgroud)

以前版本的pulseaudio

蓝牙设备一出现就会在 PulseAudio 中被识别。但是,需要在音频设置中手动进行连接。有一个 GUI 允许一键连接到 BT 设备 ( stream2ip )。

编辑:从 0.2.5 版开始,stream2ip 允许自动连接到蓝牙设备。

编辑:如果没有蓝牙设备,您可以将 bluez 设备设置为默认设备(例如,通过使用 pactl 或在配置设置中)并回退到内部音频。

编辑:这是一个快速而肮脏的 Python 脚本,可让您了解如何完成这项工作:

#!/usr/bin/env python
#-*- coding: utf-8 -*-
#
# bt-autoconnect
# Autoconnects Bluetooth Devices to PulseAudio
# (c) Takkat Nebuk
# Licence: GPLv3
# usage:
# bt-autoconnect <MAC> <timeout>

import subprocess
import time
import sys
import string

cli_options = sys.argv

def main():
    MAC = cli_options[1]
    timeout = cli_options[2]
    PMAC = string.replace(MAC,':','_') # PA don't know ':', needs '_'
    pa_args = ['pacmd set-default-sink bluez_sink.' + PMAC]
    bt_args = ['sdptool browse ' + MAC]
    err = False
    while err == False:
        if subprocess.call(bt_args, shell=True) == 0:
            err = subprocess.call(pa_args, shell=True)
        time.sleep(int(timeout))
    exit()

if __name__ == "__main__":
    main()
Run Code Online (Sandbox Code Playgroud)

只需复制此脚本并将其保存为bt-autoconnect.py。使脚本可执行或从命令行(推荐)运行它cd /script/directory,然后键入:

python bt-autoconnect.py [MAC] [timeout]
Run Code Online (Sandbox Code Playgroud)

MAC替换为您的蓝牙设备的 MAC(例如 00:0C:78:4F:B6:B5),并在脚本查找设备时以秒为单位设置所需的超时(例如 10)。然后,此脚本将每隔超时秒为蓝牙设备侦听给定的MAC,并将其连接到 PulseAudio(如果存在)。该脚本将永远运行,直到它被杀死或虚拟终端被关闭。

有时 PulseAudio 似乎没有意识到设备在关闭后再次出现。带着一些希望pulseaudio -k让它重新出现。

不花哨,没有 GUI,但至少在我的设置中它工作正常。

为感兴趣的人编辑:发布了带有 GUI 的bt-autoconnect以方便设置。请在那里提交错误或建议。感谢您的测试。

  • 您无需发表评论即可添加其他信息。您可以改为将其编辑为您的原始答案并将其全部放在一个地方。 (3认同)