আমি শেলটি ব্যবহার করে কীভাবে বিভিন্ন অডিও আউটপুট হার্ডওয়্যারটির মধ্যে স্যুইচ করতে পারি?


34

আমি আমার ল্যাপটপটি একটি বাহ্যিক মনিটরের সাথে ব্যবহার করি যার স্পিকার রয়েছে। যখন মনিটরটি এইচডিএমআইয়ের মাধ্যমে সংযুক্ত থাকে আমি স্বাভাবিক ল্যাপটপ অডিও আউটপুট এবং মনিটরের আউটপুটটির মধ্যে (জিইউআই: সাউন্ড সেটিং -> হার্ডওয়্যার ব্যবহার করে) স্যুইচ করতে পারি।

আমি এই পদ্ধতিটি অনেক সময় পুনরাবৃত্তি করি এবং আমি ভাবতে শুরু করি যে আমি কী এটি স্বয়ংক্রিয় করতে পারি বা, যাইহোক, শেলটি ব্যবহার করে এটি দ্রুততরভাবে চালিত করতে পারি।

আমার ডিস্ট্রোটি জিনোম 3 সহ উবুন্টু 12.04।

সম্পাদনা করুন:

আমি প্যাকএমডি ব্যবহার করার চেষ্টা করেছি, তবে তালিকাগুলি আমাকে বর্তমানে কেবলমাত্র ডিভাইসটি ব্যবহার করছে:

pacmd list-sinks | grep name:
name: <alsa_output.pci-0000_00_1b.0.hdmi-stereo>

জিইউআই থেকে একটি স্যুইচ করার পরে:

pacmd list-sinks | grep name:
name: <alsa_output.pci-0000_00_1b.0.analog-stereo>

এবং আমি যদি এটির পরিবর্তনের চেষ্টা করি তবে আমি পেয়ে যাব:

pacmd set-default-sink alsa_output.pci-0000_00_1b.0.hdmi-stereo
Welcome to PulseAudio! Use "help" for usage information.
Sink alsa_output.pci-0000_00_1b.0.hdmi-stereo does not exist.

উত্তর:


28

এক্ষেত্রে কার্ড সবসময় একই থাকে। একটি স্যুইচ এবং অন্যটির মধ্যে কী পরিবর্তন হচ্ছে তা হ'ল "কার্ড-প্রোফাইল"।

সুতরাং সমাধানটি যা বাস্তবে কাজ করেছিল তা হ'ল:

pacmd set-card-profile <cardindex> <profilename>

আমার ক্ষেত্রে আমি এর সাথে সমস্ত কার্ডের প্রোফাইল পেয়েছি:

pacmd list-cards

এবং আমি এর সাথে মনিটর এবং ল্যাপটপ স্পিকারগুলির মধ্যে স্যুইচ করতে পারি:

pacmd set-card-profile 0 output:hdmi-stereo

এবং:

pacmd set-card-profile 0 output:analog-stereo+input:analog-stereo

যেখানে 0 কার্ডের সূচক:

pacmd list-cards
Welcome to PulseAudio! Use "help" for usage information.
>>> 1 card(s) available.
    index: 0
    name: <alsa_card.pci-0000_00_1b.0>

এবং অবশেষে, স্যুইচটি দ্রুততর করার জন্য, আমি আমার .bashrc ফাইলে দুটি উপন্যাস সেট আপ করেছি:

alias audio-hdmi='pacmd set-card-profile 0 output:hdmi-stereo+input:analog-stereo'
alias audio-laptop='pacmd set-card-profile 0 output:analog-stereo+input:analog-stereo'

এইভাবে আমি মনিটর থেকে বা শেলটিতে টাইপ করা ল্যাপটপ (হেডফোন) থেকে অডিওর মধ্যে স্যুইচ করতে পারি: অডিও-এইচডিএমআই বা অডিও-ল্যাপটপ


হুঁ। আমার প্যাকএমডিতে 'তালিকা-কার্ড' বিকল্প নেই ...
ka3ak

5

আমি একটি ছোট সূচক অ্যাপলেট লিখেছি যা আপনাকে সাউন্ড আউটপুট স্যুইচ করতে দেয়। কোনও শেল স্ক্রিপ্ট নয় তবে সম্ভবত আপনার বা অন্যান্য পাঠকদের জন্য সহায়ক।

https://github.com/lkettenb/sound-output-switcher

স্ক্রিনশট


3

আমি পূর্ববর্তীগুলির উপর ভিত্তি করে একটি খুব ছোট স্ক্রিপ্ট তৈরি করেছি, যা কেবল অডিওকেই নয়, ভিডিও আউটপুটটিকেও স্যুইচ করে। এটি ডিসপ্লেগুলির মধ্যে স্যুইচ করতে ডিস্পার ব্যবহার করে।

কোডটি এখানে:

#!/bin/bash

CURRENT_PROFILE=$(pacmd list-cards | grep "active profile" | cut -d ' ' -f 3-)

if [ "$CURRENT_PROFILE" = "<output:hdmi-stereo>" ]; then
        pacmd set-card-profile 0 "output:analog-stereo+input:analog-stereo"
        disper -s
else 
        pacmd set-card-profile 0 "output:hdmi-stereo"
        disper -S        
fi

আমার জন্য এটি বিশেষত কার্যকর যেহেতু আমি প্রদর্শনগুলি ক্লোন করতে পছন্দ করি না। আমি হয় একটি বা অন্য ব্যবহার। আপনার অডিও প্রোফাইলগুলি আপনার নির্দিষ্ট সিস্টেমে মানিয়ে নিতে হবে need


2

আপনি pactlআরও তথ্যের জন্য এর ম্যান পৃষ্ঠাটি ব্যবহার করতে পারেন , পড়তে পারেন ।


2

একটি নোটিফায়ার অ্যাপলেট কার্যকর করার জন্য লুকাসের পাইথন স্ক্রিপ্ট ( https://github.com/lkettenb/sound-output-switcher , উপরে পোস্ট করা) কার্যকর হয়েছে। এটি অ্যাপিনডিকেটর প্যাকেজ প্রয়োজন। এটি দিয়ে ইনস্টল করা যেতে পারে

sudo apt-get install python-appindicator

3
আপনার উত্তরে কমপক্ষে কয়েকটি শব্দ অন্তর্ভুক্ত করুন যাতে স্ক্রিপ্টটি কী এবং এটি কেন সহজ expla
ডার্বোবার্ট


0

আমি যেমন এখানে বলেছি (সম্ভবত একটি সদৃশ), সাউন্ড সুইচার সূচকটির বিকল্প (যা পিপিএ যুক্ত করার প্রয়োজন রয়েছে):

এক লাইনে

আমার ক্ষেত্রে ছিল hdmi-stereo-extra1+input, প্রোফাইল তাই এক লাইন হতে হবে: [[ $(pacmd list-cards | grep "active profile" | cut -d " " -f 3-) = "<output:hdmi-stereo-extra1+input:analog-stereo>" ]] && pacmd set-card-profile 0 "output:analog-stereo+input:analog-stereo" || pacmd set-card-profile 0 "output:hdmi-stereo-extra1+input:analog-stereo"

এটির সাথে চালিত করার জন্য আপনি একটি কাস্টম শর্টকাট ব্যবহার করতে পারেন bash -c(অন্য শর্টকাটের সাথে যদি কোনও বিরোধ হয় তবে আপনাকে সতর্ক করবে):

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

এছাড়াও আপনি একটি যোগ করতে পারেন aliasআপনার টু .bashrc

একটি স্ক্রিপ্টে

আমি @ ব্যবহারকারীর উপর ভিত্তি করে কিছু পরিবর্তন করেছি 829996 (এবং এখানে @ ব্যবহারকারী 576655) উত্তর:

#!/bin/bash
set -euo pipefail # strict mode

activeProfile() { pacmd list-cards | grep "active profile" | cut -d " " -f 3-; }
CURRENT_PROFILE="$(eval activeProfile)"

# If it doesn't work run  pacmd list-cards  and try the other outputs from profile section
ANALOG_PROFILE="output:analog-stereo+input:analog-stereo"
HDMI_PROFILE="output:hdmi-stereo-extra1+input:analog-stereo"

if [ "$CURRENT_PROFILE" = "<output:hdmi-stereo-extra1+input:analog-stereo>" ] ; then
  pacmd set-card-profile 0 "$ANALOG_PROFILE"
else
    pacmd set-card-profile 0 "$HDMI_PROFILE"
fi

activeProfile

0

আমি নিম্নলিখিত পাইথন স্ক্রিপ্ট তৈরি করেছি যা নিম্নলিখিতগুলি করে:

  1. আইডি এর নির্বিশেষে তালিকার পরবর্তী ডিভাইসে ডিফল্ট ডিভাইসটি টগল করুন (চারপাশে মোড়ানো সহ)
  2. সমস্ত চলমান অ্যাপ্লিকেশনগুলি এই ডিভাইসে সরায়।
  3. ডিভাইসের নাম সহ জিইউআইতে একটি বিজ্ঞপ্তি প্রেরণ করে।
#!/usr/bin/env python3
import subprocess
# Toggle default device to the next device (wrap around the list)
cards_info = subprocess.run(['pacmd','list-sinks'], stdout=subprocess.PIPE)
card_indexes = subprocess.run(['grep', 'index'], stdout=subprocess.PIPE, input=cards_info.stdout)
indexes_list = card_indexes.stdout.decode().splitlines()
card_descriptions = subprocess.run(['grep', 'device.description'], stdout=subprocess.PIPE, input=cards_info.stdout)
indices = [i for i, s in enumerate(indexes_list) if '*' in s]
if (len(indices) != 1):
    print("Error finding default device")
    exit(1)
default_index = indices[0]
next_default = 0
if (default_index != (len(indexes_list) - 1)):
    next_default = default_index + 1
next_default_index =  (indexes_list[next_default].split("index: ",1)[1])
subprocess.run(['pacmd','set-default-sink %s' %(next_default_index)], stdout=subprocess.PIPE)

# Move all existing applications to the new default device
inputs_info = subprocess.run(['pacmd','list-sink-inputs'], stdout=subprocess.PIPE)
inputs_indexes = subprocess.run(['grep', 'index'], stdout=subprocess.PIPE, input=inputs_info.stdout)
inputs_indexes_list = inputs_indexes.stdout.decode().splitlines()
for line in inputs_indexes_list:
    input_index =  (line.split("index: ",1)[1])
    subprocess.run(['pacmd','move-sink-input %s %s' %(input_index, next_default_index)], stdout=subprocess.PIPE)

# Send notification to the GUI
descriptions_list = card_descriptions.stdout.decode().splitlines()
if (len(descriptions_list) == len(indexes_list)):
    description =  (descriptions_list[next_default].split("= ",1)[1])[1:-1]
    args = ["notify-send", "Default audio card changed", 'Default audio card was set to %s' %(description)]
    subprocess.run(args, stdout=subprocess.PIPE)

স্ক্রিপ্টে একটি কীবোর্ড শর্টকাট বরাদ্দ করা হয়েছে, এবং আমার জীবন এখন সুখী

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