কমান্ড লাইন থেকে ব্লুটুথ ডিভাইসে সংযুক্ত করুন


22

পটভূমি: আমি আমার ব্লুটুথ হেডসেটটি অডিও আউটপুট হিসাবে ব্যবহার করছি। আমি ব্লুটুথহেডসেট সম্প্রদায় ডকুমেন্টেশনের উপর দীর্ঘ নির্দেশাবলীর সাহায্যে এটি কাজ করতে সক্ষম হয়েছি এবং অন্য প্রশ্নের জন্য ধন্যবাদ, আমি একটি স্ক্রিপ্টে হেডসেটটি ডিফল্ট অডিও আউটপুট হিসাবে সক্রিয় করার প্রক্রিয়াটি স্বয়ংক্রিয় করে নিয়েছি ।

তবে, যেহেতু আমি হ্যান্ডসেট চালু হওয়ার সাথে সাথে ফোনটি সংযোগটি "চুরি" না করার জন্য আমার ফোন এবং কম্পিউটার উভয়ই (এবং হেডসেটটি দুটি ইনপুট সংযোগগুলি সমর্থন করে না) সাথে ব্লুটুথ হেডসেটটি ব্যবহার করি, তাই আমি হেডসেটটিকে একটিতে বাধ্য করি কম্পিউটারে সংযোগ করার সময় আবিষ্কারের মোড (ফোনটি স্বয়ংক্রিয়ভাবে এর সাথে সংযুক্ত হয়ে যায়)।

সুতরাং যদিও হেডসেটটি ঠিকঠাক করা হয়েছে এবং "স্বাভাবিক" দৃশ্যের সাথে স্বতঃসংযোগ স্থাপন করা হয়েছে, তবুও আমাকে সর্বদা আমার ডিভাইসে সংযোগ করার জন্য বিজ্ঞপ্তি অঞ্চলে সামান্য ব্লুটুথ আইকনটি ব্যবহার করতে হবে (স্ক্রিনশট দেখুন)।

আমি যা এড়াতে চাই: জ্ঞাত এবং জোড়াযুক্ত ব্লুটুথ ডিভাইসে সংযোগ করার জন্য এই জিইউআই :

আইকনটি ব্যবহার করে ব্লুটুথ হেডসেটের সাথে সংযুক্ত

পরিবর্তে আমি যা চাই : আমি কেবল কমান্ড লাইন ব্যবহার করে জিইউআইয়ের সংযোগ আইটেমটি ক্লিক করে ব্লুটুথকে ঠিক তেমন করতে চাই। আমি কমান্ড লাইনটি ব্যবহার করতে চাই যাতে আমি ক্রিয়াকলাপের জন্য একটি একক কীপ্রেস শর্টকাট তৈরি করতে পারি এবং আমি যখনই ডিভাইসে সংযোগ স্থাপন করতে চাইছি ততবার GUI নেভিগেট করতে হবে না।

প্রশ্ন: কীভাবে আমি কমান্ড লাইন থেকে নির্দিষ্ট, পরিচিত এবং জোড়যুক্ত ব্লুটুথ ডিভাইসে সংযোগ করার চেষ্টা করতে পারি ?

আরও প্রশ্ন: সংযোগটি সফল হয়েছিল কিনা তা আমি কীভাবে বলব?


এটি কোন ট্রে সরঞ্জাম? এটি কি ব্লুম্যান ম্যানেজার ট্রে আইকন? ব্লুম্যান ম্যানেজারের ট্রে অ্যাপলেট তালিকাতে ব্লুটুথ ডিভাইস যুক্ত করা উচিত?
সিপ্রিকাস

উত্তর:


10

ব্লুটুথ ডেমন

ডিফল্ট ইনস্টলেশনটিতে একটি ডেমন ( ব্লুটুথড ) ব্যাকগ্রাউন্ডে চলে (ফাইল থেকে চালানো /etc/init.d/bluetooth)। এই ডিমন জ্ঞাত ব্লুটুথ ডিভাইসগুলি সনাক্ত করতে এবং সংযুক্ত করার বিষয়ে যত্ন নেয় এবং এতে কনফিগারেশন ফাইলগুলির সাথে সংযুক্ত থাকতে পারে /etc/bluetooth। একটি হেডসেট অটোকনেটিংয়ের জন্য নিম্নলিখিত লাইনটি নিরবিচ্ছিন্ন audio.confহওয়া উচিত (সরান #):

AutoConnect=true

ডিমন টাইপ পুনরায় আরম্ভ করতে sudo /etc/init.d/bluetooth restart

মন্তব্য: কমান্ড লাইন সরঞ্জামটি sudo hcitool cc <MAC-Adress>পরীক্ষা করার সময় ডেমন চলমান থাকাকালীন পরীক্ষার পরিবেশে পরিচিত ডিভাইসের সাথে একটি স্থিতিশীল সংযোগ স্থাপন করতে পারে না।


DBus

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

#!/usr/bin/python
# Toggles headset connection

import dbus
from dbus.mainloop.glib import DBusGMainLoop

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

#Get dbus interface for headset
manager = bus.get_object('org.bluez', '/')
iface_m = dbus.Interface(manager, 'org.bluez.Manager')
adapterPath = iface_m.DefaultAdapter()
adapter = bus.get_object('org.bluez', adapterPath)
iface_a = dbus.Interface(adapter, 'org.bluez.Adapter')
devicePath = iface_a.ListDevices()[0]  # assuming first device
device = bus.get_object('org.bluez', devicePath)
iface_h = dbus.Interface(device, 'org.bluez.Headset')

#Check state of connection
connected = iface_h.IsConnected()
print 'Toggling connection. Please wait'
# toggle connection
if not connected:
    try:
        iface_h.Connect()
        print 'Connecting: ', devicePath
    except:
        print 'Device not found'
else:
    iface_h.Disconnect()
    print 'Disconnecting: ', devicePath

আমাদের একাধিক ব্লুটুথ ডিভাইস থাকলে devicePathঅবশ্যই অবশ্যই যথাযথভাবে মানিয়ে নিতে হবে । উপরের উদাহরণটি একটি সংযুক্ত করবে Headset। অন্য কোনও পরিষেবার জন্য উদাহরণস্বরূপ ইন্টারফেসটিকে একটি আলাদা প্রোটোকলে পরিবর্তন করুন (উদাঃ AudioSink)।


Pulseaudio

আপনি যদি নিজের ব্লুটুথ ডিভাইসের ম্যাক ঠিকানা জানেন তবে আপনি এটিকে পালসওডিওর আউটপুট সিঙ্ক হিসাবে সংযুক্ত করতে পারেন:

pacmd set-default-sink bluez_sink.xx_xx_xx_xx_xx_xx

যেখানে এক্সএক্সএক্সএক্সএক্সএক্সএক্সএক্সএক্সএক্সএক্সএক্সএক্সএক্সএক্সএ ম্যাক ঠিকানা (এটির স্বীকৃতি দেওয়ার জন্য পালসওডিওর জন্য '_' দ্বারা ':' প্রতিস্থাপন করুন)।

আরও দেখুন এই উত্তরটি আরো বিস্তারিত জানার জন্য।


আমি ঠিকানাটি জানি না এবং আমি এটির সাথে এক্সএক্স প্রতিস্থাপন করেছি। আমি কেবল Sink bluez_sink.xx_xx_xx_xx_xx_xx does not exist.বড় হাতের অক্ষর এবং ছোট হাতের উভয়ই চেষ্টা করি ।
ইলারি কাজস্তে

1
হ্যাঁ, পালসওডিও-মডিউল-ব্লুটুথ হল অভ্যন্তর। না, কিছুই মিলছে না btবা blueতালিকাভুক্ত নেই pacmd list-sinks। (এটি কেবলমাত্র 1 টি
বেসিন

2
সুতরাং এটি স্বীকৃত নয়। কমান্ডলাইন দ্বারা সংযোগ করতে সক্ষম হওয়া এটি পূর্বশর্ত। বিটি পুনরায় চালু করার চেষ্টা করুন বা পালসৌদিও পুনরায় চালু করার চেষ্টা করুন। কেন কখনও কখনও এটি সনাক্ত করা যায় না তা আমি এখনও খুঁজে পাইনি।
তাক্কাত

তাই না? সুতরাং এটি এমন অবস্থায় থাকতে পারে যে জিইউআই থেকে সংযোগ করা সম্ভব, তবে সিএলআই থেকে নয়?
ইলারি কাজস্তে

1
@ তক্কাত ওহ, হ্যাঁ, ভাল কথা। আমার খারাপ! আমি আরও আবিষ্কারে হেডসেটটি ব্যবহার করছি, সুতরাং এটি স্বয়ংক্রিয়ভাবে সংযুক্ত হবে না। এটি প্রতিফলিত করার জন্য আমি প্রশ্নটি সম্পাদনা করেছি। আপনাকে ভুল পথে নিয়ে যাওয়ার জন্য দুঃখিত
ইলারি কাজস্টে

6

আমি আমার ব্লুটুথ অডিও ডিভাইস সংযোগ করতে এই স্ক্রিপ্টটি ব্যবহার করি। আপনার হেডসেট ইতিমধ্যে যুক্ত করা হলে, আপনি একই ভাবে ব্যবহার করে আপনার হেডসেট সংযোগ স্থাপন করতে সক্ষম হওয়া উচিত org.bluez.Headset.Connect / সংযোগ বিচ্ছিন্ন স্থানে org.bluez.Audiosink.Connect / সংযোগ বিচ্ছিন্ন করুন

#!/bin/bash

MAC_ADD="C8:84:47:10:11:CD"

MAC_ADD="dev_${MAC_ADD//:/_}"
BT_ADAPTER=`dbus-send --system --print-reply --dest=org.bluez / \
org.bluez.Manager.DefaultAdapter|awk '/object path/ {print $3}'`

BT_ADAPTER="${BT_ADAPTER//\"/}/$MAC_ADD"
echo "Connecting to $BT_ADAPTER..."

if [ "$1" == "on" ]; then
    dbus-send --print-reply --system --dest=org.bluez $BT_ADAPTER org.bluez.AudioSink.Connect
elif [ "$1" == "off" ]; then
    dbus-send --print-reply --system --dest=org.bluez $BT_ADAPTER org.bluez.AudioSink.Disconnect
fi

আছে HTH!


এটি আমার পক্ষেও কাজ করেছে 16.04, আপনাকে ধন্যবাদ! অন্যরা, onস্ক্রিপ্টে বিকল্পটি পাস করতে ভুলবেন না !
মিন্নার

2

আমি উইন্ডো ম্যানেজার হিসাবে আই 3 ব্যবহার করি যাতে আমার কাছে ব্লুটুথ ট্রে আইকনটি উপলব্ধ না থাকে। কিছু কারণে unityক্য সেটিংসে চেক বোতামটি সংবেদনশীল নয় এবং তাই যখন আমার হেডফোনগুলি সংযোগ না করে তখন সময়ে সময়ে এটি করার আমার একটি উপায় প্রয়োজন।

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

দেখে মনে হচ্ছে bluezএটি তাদের ডিবিএস এপিআই বদলেছে । উত্তর ব্যবহার করে org.bluez.Managerআর কাজ হবে না। পরিবর্তে, এটি ব্যবহার করার পরামর্শ দেওয়া হয় ObjectManager

এখানে একটি আপডেটড পাইথন স্ক্রিপ্ট রয়েছে যা এটি আবিষ্কার করে এমন প্রথম সংযোগযুক্ত ব্লুটুথ হেডসেটটি সংযুক্ত করবে (সম্ভবত তালিকায় সমস্ত জোড়াযুক্ত ডিভাইস অন্তর্ভুক্ত রয়েছে?):

#!/usr/bin/env python
# Toggles headset connection

from __future__ import print_function
from __future__ import unicode_literals

import dbus
from dbus.mainloop.glib import DBusGMainLoop

def find_headset(bus):
  manager = dbus.Interface(bus.get_object("org.bluez", "/"),
                           "org.freedesktop.DBus.ObjectManager")
  objects = manager.GetManagedObjects()

  for path, ifaces in objects.items():
    if ("org.bluez.Device1" in ifaces and
        "org.freedesktop.DBus.Properties" in ifaces):
      iprops = dbus.Interface(
          bus.get_object("org.bluez", path),
          "org.freedesktop.DBus.Properties")
      props = iprops.GetAll("org.bluez.Device1")
      # Looking for a headset. Could also match on other properties like
      # "Name". See bluez docs for whats available.
      if props.get("Class") == 0x240404:
        if props.get("Connected"):
          print("Found headset {} ({}) but it is already connected"
                .format(props.get("Name"), props.get("Address")))
          continue
        return path

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

if hpath:
  adapter = dbus.Interface(
      bus.get_object("org.bluez", hpath), "org.bluez.Device1")
  adapter.Connect()

এই উদাহরণটি, এই থ্রেডের অন্যান্য dbusউদাহরণগুলির মতো পাইথন প্যাকেজ ব্যবহার করে । উবুন্টু 16.04 এ আমি এটির মাধ্যমে ইনস্টল করেছি apt-get install python-dbus

আপনি যদি অন্যান্য মানদণ্ডের সাথে মেলে করতে চান তবে এই নথিতে এমন বৈশিষ্ট্যগুলির একটি তালিকা প্রদর্শিত হবে যা ডিবিএস-এ অনুসন্ধান করা যেতে পারে।

আমার এই স্ক্রিপ্টটি সংরক্ষিত আছে ~/.local/bin/bt-connect-headsetযা আমার রয়েছে PATHতাই আমি এটি আই 3 লঞ্চার থেকে চালাতে পারি। আপনি chmod +x bt-connect-headsetযদি এটি কোনও আদেশ হিসাবে ব্যবহার করার পরিকল্পনা করেন তবে এটি কার্যকর করুন ( ) করুন ।

এই স্ক্রিপ্টটি কেবলমাত্র 09/28/2018 তারিখে 16.04 সালের একটি আপ-টু-ডেট উবুন্টুতে পরীক্ষা করা হয়েছে।


1
উবুন্টু 18.10 এ আপনার স্ক্রিপ্ট ব্যবহার করেছে। ধন্যবাদ!
ব্রম্বম্বম্ব

1
সুপার, এটি আমার জন্য লিনাক্স মিন্ট 19 দারুচিনিতে কাজ করেছিল। তবে আমি এর 2360344পরিবর্তে একটি ডিভাইস ক্লাস ব্যবহার করেছি 0x240404
dom_watson

1
মিন্ট এক্সফেস 19.2-তে যেমন কাজ করে। আমি নিশ্চিত এটি জুবুন্টুতে কাজ করে। - ব্লুটুথ সংযোগ বিচ্ছিন্ন করার জন্য কোনও স্ক্রিপ্ট কী?
সিপ্রিকাস

1
@ সিপ্রিকাস এটি সঠিক, এবং ইতিমধ্যে উত্তরে উল্লেখ করা হয়েছে। আপনার আরও কিছু উন্নতমানের প্রয়োজন হলে (যেমন কোনও নামের সাথে কোনও ডিভাইসের সাথে মিল রেখে) কীভাবে অন্যান্য মানদণ্ডের সাথে মেলে সে সম্পর্কে উত্তরের একটি লিঙ্ক রয়েছে। এই লিঙ্কটিতে এই ইন্টারফেসে উপলব্ধ পদ্ধতির একটি তালিকাও রয়েছে। সংযোগ বিচ্ছিন্ন করতে, আমার অনুমান Disconnect()পদ্ধতিটি ব্যবহার করা is আমি এটি চেষ্টা করি নি, তবে এটি সম্ভবত একটি নিরাপদ বাজি;)।
cheshirekow

আমি ভৃল ছিলাম. আমি ভেবেছিলাম পেয়ারড ডিভাইসের তালিকায় এটি কখনই প্রথম ছাড়িয়ে যায় না, তবে তা হয়। আপনি যে কথাটি বলেছিলেন তা আমিও মিস করেছি first unconnected bluetooth headset : ব্লুটুথ স্পিকারের মতো (ডিভাইসের কোনও অবস্থানই বিবেচনা না করে) অন্যান্য ডিভাইসের আগে এটি কি সর্বদা হেডসেটটি (যদি চালিত হয়) ব্যবহার করবে ? আমার ক্ষেত্রে এটিই ঘটে। - এছাড়াও, সংযোগ বিচ্ছিন্ন করার জন্য আমি কেবল শেষ লাইনে পরিবর্তন করে এটি করতে পারি না adapter.Disconnect()))
সিপ্রিকাস

1

উপরের কয়েকটি চেষ্টা করার পরে (স্ক্রিপ্টগুলি আমার পক্ষে কাজ করে না) আমি নিম্নলিখিত সমাধানটি পেয়েছি।

প্রথমে আপনি যে ডিভাইসে সংযোগ করতে চান তার ম্যাক-অ্যাড্রেসটি সন্ধান করুন

bluetoothctl

এটি শেলটি প্রবেশ করবে এবং অ্যাড্রেস সহ সমস্ত উপলব্ধ ডিভাইস তালিকাভুক্ত করবে। (শেল থেকে প্রস্থান করতে এবং প্রম্পটে ফিরে আসার জন্য "প্রস্থান করুন")

তারপরে XX: XX: XX: XX: XX: XX ব্লুটুথ ডিভাইসের সাথে সংযুক্ত করুন:

echo -e 'connect XX:XX:XX:XX:XX:XX' | bluetoothctl

সংযোগ বিচ্ছিন্ন করতে

echo -e 'disconnect XX:XX:XX:XX:XX:XX' | bluetoothctl

বেশ কিছুক্ষণ অনুসন্ধান করে যাচ্ছিলাম - কিছুই কাজ করছে বলে মনে হচ্ছিল না, আমি যখন জানতে পেরেছি তখন এতটাই স্বস্তি অনুভব করেছি। ভেবেছিলেন অন্যরাও এটি সম্পর্কে জানতে চান। :))


কীভাবে আপনি ডিভাইসের ঠিকানা পাবেন তা যুক্ত করতে আপনার উত্তর সম্পাদনা করতে পারেন, তাহলে উত্তরটি আরও সম্পূর্ণ?
ব্যবহারকারী 3140225

1
@ user3140225 সবেমাত্র করেছে।
জোসেফ

আমি পেতে ~$ bluetoothctl Agent registered [UE BOOM 2]#। তারপরে disconnect "UE BOOM 2" Device UE BOOM 2 not available
সিপ্রিকাস

@ সিপ্রিকাস @ ব্যবহারকারী 31১40০২২২ আপনি কি এর আউটপুট পোস্ট করতে পারবেন bluetoothctl? আপনাকে ডিভাইসের ম্যাক-অ্যাড্রেস দিয়ে কমান্ডগুলি খাওয়াতে হবে - এটি XX: XX: XX: XX: XX: XX, যেখানে X হয় কোনও অক্ষর বা একটি সংখ্যা H
জোসেফ

আমি এখানে বলেছি ম্যাক দেখতে পারেন । তারপরে, echo -e 'connect CC:AF:78:AF:59:03' | bluetoothctlআমি চেষ্টা করছি:Agent registered [bluetooth]# connect CC:AF:78:AF:59:03 Device CC:AF:78:AF:59:03 not available
সিপ্রিকাস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.