যখন কোনও ব্লুটুথ ডিভাইস সংযুক্ত হয় আমি কীভাবে স্ক্রিপ্ট চালাব?


16

আমার ব্লুটুথ হেডসেটটি যখন আমার কম্পিউটারে সংযুক্ত হয় তখন আমি আমার সংগীত প্লেয়ার (ক্লিমেন্টাইন) শুরু করতে চাই। আমি কীভাবে ব্লুটুথ ডিভাইস সংযোগ স্থাপন করতে পারি যাতে আমি প্লেয়ারটি শুরু করতে স্ক্রিপ্ট চালাতে পারি?

উত্তর:


12

আমি ভোটদানের পদ্ধতির পছন্দ করি না, তাই আমি ব্লুজ এবং ডিবাসে কিছু খনন করেছি। আমি নিম্নলিখিত স্ক্রিপ্ট লিখে শেষ করেছি:

#!/usr/bin/python

import dbus
from dbus.mainloop.glib import DBusGMainLoop
import gobject

import subprocess

# ID of the device we care about
DEV_ID = '00_1D_54_AB_DC_72'

dbus_loop = DBusGMainLoop()
bus = dbus.SystemBus(mainloop=dbus_loop)

# Figure out the path to the headset
man = bus.get_object('org.bluez', '/')
iface = dbus.Interface(man, 'org.bluez.Manager')
adapterPath = iface.DefaultAdapter()

headset = bus.get_object('org.bluez', adapterPath + '/dev_' + DEV_ID)
    # ^^^ I'm not sure if that's kosher. But it works.

def cb(iface=None, mbr=None, path=None):

    if ("org.bluez.Headset" == iface and path.find(DEV_ID) > -1):
        print 'iface: %s' % iface
        print 'mbr: %s' % mbr
        print 'path: %s' % path
        print "\n"
        print "matched"

        if mbr == "Connected":
            subprocess.call(["clementine", "--play"])
            print 'conn'

        elif mbr == "Disconnected":
            subprocess.call(["clementine", "--stop"])
            print 'dconn'

headset.connect_to_signal("Connected", cb, interface_keyword='iface', member_keyword='mbr', path_keyword='path')
headset.connect_to_signal("Disconnected", cb, interface_keyword='iface', member_keyword='mbr', path_keyword='path')

loop = gobject.MainLoop()
loop.run()

অবশ্যই ব্লুজ, এবং পালস অডিও পলিং ডিবিসের মাধ্যমে পরিচালনা করে। আপনার হেডসেটটি ডিফল্ট অ্যাডাপ্টার হিসাবে যতক্ষণ না এটি বেশিরভাগ ক্ষেত্রেই ঠিক কাজ করবে। আপনি কিছু শুনতে চাইলে আপনি পালস অডিওকেও হেডসেটের সাথে সংযুক্ত করেছেন তা নিশ্চিত করুন। আপনার সমাধান ভাগ করে নেওয়ার জন্য আপনাকে ধন্যবাদ :)
তাক্কাত

আপনি যদি DEV_IDসংযোগের পূর্বের বিষয়টি জানেন তবে তা দুর্দান্ত but তবে যদি আপনি সমস্ত সংযোগের ইভেন্ট সম্পর্কে অবহিত হতে চান তবে কী হবে?
pstanton

4

একটি সফলভাবে প্রতিষ্ঠিত ব্লুটুথ সংযোগটি আবিষ্কার করতে আমরা চালাতে পারি

sdptool browse xx:xx:xx:xx:xx:xx

এর দ্বারা প্রদত্ত MAC ঠিকানার সংযোগের জন্য এসডিবি সংযোগ পরীক্ষা করা হবে। ব্রাউজ করার সময় যেমন কোনও ত্রুটি রয়েছে তা না হওয়া পর্যন্ত এটি যথেষ্ট সময় নিতে পারে

Failed to connect to SDP server on 00:0C:78:4F:B6:B5: Host is down

আমরা আপনার স্ক্রিপ্টের সঠিক উদ্দেশ্যটি জানি না, তবে সম্ভবত আপনি যখন হেডসেটটি সংযুক্ত ছিলেন তখন আপনি ক্লিমেটিনের মাধ্যমে অডিও খেলতে চান।

তারপরে আমরা কেবল দেখতে পেলাম যে সেখানে একটি ব্লুটুথ অডিও সিঙ্ক রয়েছে কিনা

pacmd list-sinks | grep xx_xx_xx_xx_xx_xx

xx_xx_xx_xx_xx_xxম্যাক ঠিকানাটি কোথায় ( :এটির সাথে প্রতিস্থাপন করা দরকার _)। তারপরে আউটপুট আপনাকে জানাবে যে কোনও ব্লুটুথ অডিও সিঙ্ক উপলব্ধ আছে কি না কিছু নেই।

এই সিঙ্কে অডিও কীভাবে স্যুইচ করা যায় তার এই উত্তরটি দেখুন ।


Stream2ip

সঙ্গে stream2ip আমরা শেল কমান্ড অথবা পরে একটি সংযোগ স্থাপিত হয় চালানোর জন্য একটি স্ক্রিপ্ট বর্ণনা করতে পারেন। কোনও সংযোগ স্থাপনের পরে একটি সমর্থিত মিডিয়া প্লেয়ার স্বয়ংক্রিয়ভাবে শুরু করার জন্য একটি বিকল্প রয়েছে:

এখানে চিত্র বর্ণনা লিখুন

সংযোগ বিঘ্নিত হলে স্ট্রিম 2ip বর্তমানে চলমান প্লেব্যাক স্ট্রিমটিকে ব্লুটুথ অডিও ডিভাইসে পুনরায় সংযোগ দেওয়ার চেষ্টা করবে।


আপনার উত্তরের জন্য ধন্যবাদ. আপনি পরামর্শ দিচ্ছেন যে আমি sdptool browse <device-id>0 টি রিটার্ন কোড না পাওয়া পর্যন্ত আমার সাথে পোল করা উচিত এবং তারপরে আমার স্ক্রিপ্টটি বন্ধ করব, তাই না? পোলিং না করে কী করার উপায় আছে?
এরিগামি

এসডিপটোল ধীর গতির। আমি পালসওডিও যাব। আপনার একটি লুপ দরকার কারণ আপনার ডিভাইসটি কখন আছে তা আমরা জানি না।
তাক্কাত

2

@ এরিগামি আপনার উত্তরটি অনেক সাহায্য করেছে তবে এটি কার্যকর করতে আমি কিছু পরিবর্তন করতে চাই। আমি উবুন্টু 14.04 ব্যবহার করছি।

#!/usr/bin/python

import dbus
from dbus.mainloop.glib import DBusGMainLoop
import gobject

import subprocess

# ID of the device we care about
DEV_ID = 'CC:C3:EA:A5:16:90'.replace(":", "_")

dbus_loop = DBusGMainLoop()
bus = dbus.SystemBus(mainloop=dbus_loop)

# Figure out the path to the headset
man = bus.get_object('org.bluez', '/')
iface = dbus.Interface(man, 'org.bluez.Manager')
adapterPath = iface.DefaultAdapter()

print(adapterPath + '/dev_' + DEV_ID)
headset = bus.get_object('org.bluez', adapterPath + '/dev_' + DEV_ID)
# ^^^ I'm not sure if that's kosher. But it works.

def cb(*args, **kwargs):
    is_connected = args[-1]
    if isinstance(is_connected, dbus.Boolean) and is_connected:
        print("Connected")
    elif isinstance(is_connected, dbus.Boolean) and not is_connected:
        print("Disconnected")

headset.connect_to_signal("PropertyChanged", cb, interface_keyword='iface', member_keyword='mbr', path_keyword='path')

loop = gobject.MainLoop()
loop.run()

তবুও যদি এটি কাজ না করে তবে সিস্টেম ডিবিএস ব্যবহার ও নিরীক্ষণ করুন।

dbus-monitor --system

d-feetআরও ব্যবহার করা যেতে পারে। এটি ডিবিএস অবজেক্টগুলি দেখার জন্য জিইউআই সরঞ্জাম।


1
আপনি যদি অন্য উত্তরটি উন্নত করতে চান তবে দয়া করে এটিকে সম্পাদনার পরামর্শ দিন এবং কোনও নতুন উত্তর তৈরি করবেন না।
ডেভিড ফোস্টার

1

সমস্ত ব্লুটুথ ডিভাইস নিরীক্ষণের জন্য এখানে আরেকটি উদাহরণ। এটি নির্দিষ্ট ম্যাক ঠিকানা নির্দিষ্ট করার প্রয়োজন হয় না। আপনার ব্লুটুথ ডিভাইসটি লগইন / আউট, স্থগিত / জাগ্রত এবং সংযোগ / সংযোগ-সংযোগ করার পরেও এই পদ্ধতিরটি এক্সপুট সেটিংসকে স্থির করে তোলে।

আমার কাছে একটি থিঙ্কপ্যাড কমপ্যাক্ট ব্লুটুথ কীবোর্ড রয়েছে এবং আমি যখনই কীবোর্ডটিকে ট্র্যাকপয়েন্টের গতি সামঞ্জস্য করতে সংযুক্ত করা হয় তখনই একটি এক্সপিন্ট কমান্ড চালাতে চাই। পদক্ষেপগুলি এখানে।

  1. গিথুব ব্লুটুথ-রুনার থেকে কোড ডাউনলোড করুন । ক্রেডিটগুলি এখানে দেওয়া হয়েছিল কে প্রথমে এটি রাস্পবেরি পাই এর জন্য লিখেছিল। আপনার কাস্টম কোম্যান্ডস চালাতে কোডের নিম্নলিখিত বিভাগটি সংশোধন করুন।

    subprocess.call(['xinput', 'set-prop',
                     'ThinkPad Compact Bluetooth Keyboard with TrackPoint',
                     'Device Accel Constant Deceleration', '0.6'])

    আমার ক্ষেত্রে এটি টার্মিনাল থেকে কল করার সমতুল্য।

    $ xinput set-prop 'ThinkPad Compact Bluetooth Keyboard with TrackPoint' 'Device Accel Constant Deceleration' 0.6
  2. পরিবর্তনটি সংরক্ষণ করুন। দ্বারা আপনার স্ক্রিপ্ট চালানোর চেষ্টা করুন

    $ python bluetooth-runner.py

    আপনার ব্লুথুথ যন্ত্রটি সংযুক্ত করুন এবং সংযোগ বিচ্ছিন্ন করুন। আপনার স্ক্রিনে প্রিন্ট করা সম্পর্কিত বার্তাটি দেখতে হবে।

  3. এখন, আপনার ফাইল এক্সিকিউটেবল করতে এবং আপনার ডিরেক্টরি এক কপি $PATHবলতে ~/bin/

    $ chmod +x bluetooth-runner.py
    $ mkdir ~/bin # if you dont have it yet
    $ cp bluetooth-runner.py ~/bin
  4. এখন, আপনি টার্মিনালের যে কোনও জায়গা থেকে স্ক্রিপ্টটি চালাতে পারবেন তা নিশ্চিত করুন (এটি আপনার অনুসন্ধানের পথে রয়েছে কিনা তা নিশ্চিত করুন)।

  5. Startup Applicationsউবুন্টু মেনু থেকে আগুন জ্বলুন। আপনার স্ক্রিপ্টগুলি শুরুতে যুক্ত করুন Add

    প্রারম্ভিক অ্যাপ্লিকেশন যুক্ত করুন

  6. এখন, কেবলমাত্র একটি সমস্যা বাকি আছে, আপনি লগইন করার সময়, স্ক্রিপ্টগুলি সম্ভবত প্রথম ব্লুটুথ ইভেন্টটি ধরতে পারে না । এটি কারণ আপনার স্ক্রিপ্টটি পটভূমিতে আরম্ভ করার আগে আপনার ব্লুটুথ ডিভাইস সংযুক্ত থাকতে পারে।

    এটি সমাধানের জন্য আপনার কাস্টম কমান্ডটি সরাসরি এতে যুক্ত করুন Startup Applications। আমার ক্ষেত্রে এটি অনুসরণ আদেশটি:

     xinput set-prop 'ThinkPad Compact Bluetooth Keyboard with TrackPoint' 'Device Accel Constant Deceleration' 0.6

এবং এখন আপনি উবুন্টু দিয়ে আপনার ব্লুটুথ ডিভাইস উপভোগ করতে পারবেন।


পাইথন স্ক্রিপ্ট ব্লুটুথ সংযোগগুলি নিরীক্ষণ করে না।
পাওলো পেদ্রোসো

0

আপনি যখন লিখেন "যখন আপনার হেডসেটটি আপনার কম্পিউটারের সাথে সংযুক্ত হয়"। কীভাবে এটি স্বয়ংক্রিয়ভাবে হয়? যখন আপনাকে এটিকে ম্যানুয়ালি ট্রিগার করতে হবে, আপনি সম্ভবত এটি একটি স্ক্রিপ্ট তৈরি করতে পারেন এবং তারপরে সংযোগ স্থাপনের পরে আপনার স্ক্রিপ্টটি চালান run আমি আমার ব্লুটুথ রিসিভারে ডিফল্ট আউটপুট ডিভাইস সেট করতে এটিই করেছি (যাতে আমি হার্ডওয়্যার কীগুলির সাহায্যে ভলিউমটি পরিবর্তন করতে পারি):

bluetooth-connect && pactl set-default-sink bluez_sink.0C_A6_94_9A_37_4D

যেখানে bluetooth-connectদেখতে এটির মতো দেখায়: https://github.com/sblask/dotfiles/blob/c39d37ad67947b358b4a079cb41ae6f9e4a081d8/.bin/bluetuth-connect.symlink এটি ধরেছে যে সবকিছু জুটিবদ্ধ হয়েছে এবং সংযোগের জন্য প্রস্তুত। আপনি ব্ল্যাকম্যানে বা pacmd list-sinks | grep -e 'name:' -e 'index'ব্লুটুথ ডিভাইস সংযুক্ত হওয়ার পরে দৌড়ে ম্যাকের ঠিকানাটি খুঁজে পান । আপনি রান চান bluetooth-connect && your-scriptyour-scriptসংযোগটি সফলভাবে প্রতিষ্ঠিত হলেই চালানো হবে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.