ऑटोकनेक्टिंग ब्लूटूथ डिवाइस


28

क्या उबंटू में ब्लूटूथ सेट करने का एक तरीका यह है कि इसे चालू करने पर इसे जोड़े जाने वाले उपकरणों को ऑटोकनेक्ट करने के लिए। इसके अलावा, क्या कनेक्शन पर एक ब्लूटूथ हेडसेट में ध्वनि आउटपुट को स्वचालित रूप से बदलने का एक तरीका है?

जवाबों:


26

Pulseaudio> = 1.0

संपादन करके /etc/pulse/default.paहम pulseaudio साउंड सर्वर को प्रस्तुत करते ही pulseaudio मॉड्यूल मॉड्यूल-स्विच-ऑन को एक ऑडियो सिंक में लोड कर सकते हैं । हमें निम्नलिखित पंक्ति सम्मिलित करने की आवश्यकता है

load-module module-switch-on-connect

Pulseaudio के पिछले संस्करण

जैसे ही वे मौजूद होते हैं, पल्सएडियो में ब्लूटूथ डिवाइस को पहचान लिया जाता है। हालाँकि कनेक्शन को ऑडियो सेटिंग्स में मैन्युअल रूप से बनाया जाना चाहिए। एक 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 जारी किया गया है। कृपया वहां बग या सुझाव दर्ज करें। परीक्षण के लिए धन्यवाद।


3
अतिरिक्त जानकारी जोड़ने के लिए आपको कोई टिप्पणी पोस्ट करने की आवश्यकता नहीं है। आप इसके बजाय बस इसे मूल उत्तर में संपादित कर सकते हैं और इसे एक ही स्थान पर रख सकते हैं।

धन्यवाद, पहला समाधान मेरे लिए Ubuntu 14.04 पर काम किया। हालांकि ध्यान दें, sudo service pulseaudio restartपरिवर्तन को प्रभावी बनाने के लिए आपको अभी भी चलाने या रिबूट करने की आवश्यकता है ।
सेरिन

0

दुर्भाग्य से, मैंने केवल अब तककाट से उत्तर देखा है, यह मेरी तुलना में बेहतर तरीका है।

मुझे लगता है कि यह पल्सीडियो <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()
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.