Apakah ada cara untuk mengatur Bluetooth di Ubuntu untuk autoconnect ke perangkat yang dipasangkan ketika dihidupkan. Selain itu, apakah ada cara untuk secara otomatis mengubah output suara ke headset Bluetooth saat koneksi?
Apakah ada cara untuk mengatur Bluetooth di Ubuntu untuk autoconnect ke perangkat yang dipasangkan ketika dihidupkan. Selain itu, apakah ada cara untuk secara otomatis mengubah output suara ke headset Bluetooth saat koneksi?
Jawaban:
Dengan mengedit, /etc/pulse/default.pa
kita dapat memuat modul-modul-switch-on-connect modul pulseaudio ke audio sink segera setelah disajikan ke server suara pulseaudio. Kita perlu memasukkan baris berikut
load-module module-switch-on-connect
Perangkat Bluetooth dikenali di PulseAudio segera setelah hadir. Namun koneksi harus dibuat secara manual dalam pengaturan audio. Ada GUI yang memungkinkan koneksi sekali klik ke perangkat BT ( stream2ip ).
Sunting: Dari versi 0.2.5 stream2ip memungkinkan penyambungan otomatis ke perangkat Bluetooth.
Sunting: Anda dapat mengatur perangkat bluez Anda sebagai perangkat default (misalnya dengan menggunakan pactl atau dalam pengaturan konfigurasi) dengan mundur ke audio internal jika tidak ada perangkat bluetooth.
Sunting: Ini adalah skrip Python cepat dan kotor untuk memberi Anda ide tentang cara melakukan pekerjaan:
#!/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()
Cukup salin skrip ini dan simpan sebagai bt-autoconnect.py . Jadikan skrip tersebut dapat dieksekusi atau jalankan dari baris perintah (disarankan) dengan cd /script/directory
lalu ketik:
python bt-autoconnect.py [MAC] [timeout]
Ganti MAC dengan MAC perangkat Bluetooth Anda (mis. 00: 0C: 78: 4F: B6: B5) dan atur batas waktu yang diinginkan (mis. 10) dalam hitungan detik ketika skrip mencari perangkat tersebut. Script ini kemudian akan mendengarkan MAC yang diberikan setiap detik waktu habis untuk perangkat Bluetooth dan menghubungkannya ke PulseAudio jika ada. Script akan berjalan selamanya sampai terbunuh atau terminal virtual ditutup.
Kadang-kadang PulseAudio tampaknya tidak menyadari perangkat yang hadir lagi setelah perangkat mati. Dengan beberapa harapan pulseaudio -k
membuatnya muncul kembali.
Tidak suka, tidak ada GUI tapi setidaknya dalam pengaturan saya itu berfungsi ok
Edit untuk mereka yang tertarik: bt-autoconnect dengan GUI untuk pengaturan yang nyaman dirilis. Silakan ajukan bug atau saran di sana. Terima kasih telah menguji.
sudo service pulseaudio restart
atau mem-boot ulang untuk melakukan perubahan.
Sayangnya, saya baru sekarang melihat jawaban dari Takkat, Sepertinya ini cara yang lebih baik daripada saya.
Saya kira ini mungkin masih relevan untuk Pulseaudio <1.0. Itu tidak menggunakan polling, tetapi mendengarkan acara Bluetooth di dbus:
#!/usr/bin/python
# based on monitor-bluetooth
# Changes by Domen Puncer <domen@cba.si>
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 __name__ == '__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()