Existe-t-il un moyen de configurer Bluetooth dans Ubuntu pour qu'il se connecte automatiquement aux périphériques auxquels il est associé lorsqu'il est allumé. En outre, existe-t-il un moyen de changer automatiquement la sortie audio vers un casque Bluetooth lors de la connexion?
En éditant le /etc/Pulse/default.pa
, vous pouvez charger le module pulseaudio module-switch-on-connect afin de vous connecter automatiquement à un collecteur audio dès sa présentation au pulseaudio. son serveur. Nous devons insérer la ligne suivante
load-module module-switch-on-connect
Les appareils Bluetooth sont reconnus dans PulseAudio dès qu'ils sont présents. Cependant, la connexion doit être établie manuellement dans les paramètres audio. Il existe une interface utilisateur graphique qui permet la connexion en un clic aux périphériques BT ( stream2ip ).
Modifier: À partir de la version 0.2.5, stream2ip permet la connexion automatique à des périphériques Bluetooth.
Edit: vous pouvez configurer votre périphérique bluez en tant que périphérique par défaut (par exemple, en utilisant pactl ou dans les paramètres de configuration) avec un retour à l'audio interne si aucun périphérique Bluetooth n'est disponible. est présent.
Edit: Voici un script rapide et sale Python pour vous donner une idée de la procédure à suivre:
#!/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 __== "__main__":
main()
Copiez simplement ce script et enregistrez-le sous le nom bt-autoconnect.py . Rendez le script exécutable ou exécutez-le à partir de la ligne de commande (recommandé) par cd /script/directory
, puis tapez:
python bt-autoconnect.py [MAC] [timeout]
Remplacez MAC par l'adresse MAC de votre périphérique Bluetooth (par exemple, 00: 0C: 78: 4F: B6: B5) et définissez un délai d'attente souhaité (par exemple 10) en secondes lorsque le script recherche le périphérique. Ce script écoutera ensuite le MAC donné chaque délai d'attente pour un périphérique Bluetooth et le connectera à PulseAudio s'il est présent. Le script s'exécutera indéfiniment jusqu'à ce qu'il soit tué ou que le terminal virtuel soit fermé.
Parfois, PulseAudio ne semble pas se rendre compte de la présence de l'appareil après sa mise hors tension. Avec un peu d’espoir, pulseaudio -k
le fait réapparaître.
Pas sophistiqué, pas d’interface graphique, mais au moins dans mes paramètres, c’est bon.
Modifiez pour ceux que cela intéresse: bt-autoconnect avec une interface graphique pour une configuration pratique est disponible. S'il vous plaît déposer des bugs ou des suggestions ici. Merci pour les tests.
Malheureusement, je viens seulement de voir la réponse de Takkat, cela semble être le meilleur moyen que le mien.
Je suppose que cela pourrait toujours être pertinent pour Pulseaudio <1.0. Il n'utilise pas l'interrogation, mais écoute les événements Bluetooth sur dbus:
#!/usr/bin/python
# based on monitor-bluetooth
# Changes by Domen Puncer <[email protected]>
import gobject
import dbus
import dbus.mainloop.glib
import os
# we want this event: {AudioSource.PropertyChanged} [/org/bluez/16797/hci0/dev_00_24_7E_51_F7_52] State = playing
# and when that happens: pactl load-module module-loopback source=bluez_source.00_24_7E_51_F7_52 sink=alsa_output.pci-0000_00_1b.0.analog-stereo
def property_changed(name, value, path, interface):
iface = interface[interface.rfind(".") + 1:]
val = str(value)
print "{%s.PropertyChanged} [%s] %s = %s" % (iface, path, name, val)
if iface == "AudioSource" and name == "State" and val == "playing":
bt_addr = "_".join(path.split('/')[-1].split('_')[1:])
cmd = "pactl load-module module-loopback source=bluez_source.%s sink=alsa_output.pci-0000_00_1b.0.analog-stereo" % bt_addr
os.system(cmd)
def object_signal(value, path, interface, member):
iface = interface[interface.rfind(".") + 1:]
val = str(value)
print "{%s.%s} [%s] Path = %s" % (iface, member, path, val)
if __== '__main__':
dbus.mainloop.glib.DBusGMainLoop(set_as_default=True)
bus = dbus.SystemBus()
bus.add_signal_receiver(property_changed, bus_name="org.bluez", signal_name = "PropertyChanged", path_keyword="path", interface_keyword="interface")
mainloop = gobject.MainLoop()
mainloop.run()