जवाबों:
संपादन करके /etc/pulse/default.pa
हम pulseaudio साउंड सर्वर को प्रस्तुत करते ही pulseaudio मॉड्यूल मॉड्यूल-स्विच-ऑन को एक ऑडियो सिंक में लोड कर सकते हैं । हमें निम्नलिखित पंक्ति सम्मिलित करने की आवश्यकता है
load-module module-switch-on-connect
जैसे ही वे मौजूद होते हैं, पल्सएडियो में ब्लूटूथ डिवाइस को पहचान लिया जाता है। हालाँकि कनेक्शन को ऑडियो सेटिंग्स में मैन्युअल रूप से बनाया जाना चाहिए। एक GUI है जो BT उपकरणों ( स्ट्रीम 2ip ) से एक-क्लिक कनेक्शन की अनुमति देता है ।
संपादित करें: संस्करण 0.2.5 से स्ट्रीम 2ip ब्लूटूथ डिवाइसों को ऑटो-कनेक्ट करने की अनुमति देता है।
संपादित करें: यदि आप कोई ब्लूटूथ डिवाइस मौजूद नहीं है, तो आप अपने ब्लूज़ डिवाइस को डिफ़ॉल्ट डिवाइस के रूप में सेट कर सकते हैं (उदाहरण के लिए पैक्टल या कॉन्फिग सेटिंग में) पर फ़ॉलबैक के साथ।
संपादित करें: यहां आपको एक त्वरित और गंदे अजगर की स्क्रिप्ट दी गई है ताकि आप यह जान सकें कि काम कैसे करना है:
#!/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()
बस इस स्क्रिप्ट को कॉपी करें और इसे bt-autoconnect.py के रूप में सहेजें । स्क्रिप्ट को निष्पादन योग्य बनाएं या फिर उसे कमांड लाइन (अनुशंसित) से चलाएं cd /script/directory
और फिर टाइप करें:
python bt-autoconnect.py [MAC] [timeout]
अपने ब्लूटूथ डिवाइस के मैक द्वारा मैक को बदलें (उदाहरण 00: 0C: 78: 4F: B6: B5) और सेकंड में वांछित टाइमआउट (जैसे 10) सेट करें जब स्क्रिप्ट डिवाइस के लिए दिखता है। यह स्क्रिप्ट ब्लूटूथ डिवाइस के लिए दिए गए मैक को हर टाइमआउट सेकंड में सुनेगी और यदि मौजूद है तो इसे PulseAudio से कनेक्ट करती है। जब तक यह मारा जा रहा है या वर्चुअल टर्मिनल बंद था तब तक स्क्रिप्ट हमेशा के लिए चलेगी।
कभी-कभी पल्सएडियो को लगता है कि डिवाइस के फिर से चालू होने के बाद उसे मौजूद होने की जानकारी नहीं होगी। कुछ आशा के साथ pulseaudio -k
यह फिर से प्रकट होता है।
नहीं फैंसी, नहीं जीयूआई लेकिन कम से कम मेरी सेटिंग्स में यह ठीक काम किया।
उन लोगों के लिए संपादित करें : सुविधाजनक सेटअप के लिए GUI के साथ bt-autoconnect जारी किया गया है। कृपया वहां बग या सुझाव दर्ज करें। परीक्षण के लिए धन्यवाद।
sudo service pulseaudio restart
परिवर्तन को प्रभावी बनाने के लिए आपको अभी भी चलाने या रिबूट करने की आवश्यकता है ।
दुर्भाग्य से, मैंने केवल अब तककाट से उत्तर देखा है, यह मेरी तुलना में बेहतर तरीका है।
मुझे लगता है कि यह पल्सीडियो <1.0 के लिए अभी भी प्रासंगिक हो सकता है। यह मतदान का उपयोग नहीं करता है, लेकिन डब पर ब्लूटूथ घटनाओं को सुनता है:
#!/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()