অভ্যন্তরীণ এবং এইচডিএমআই স্পিকারগুলির মধ্যে স্বয়ংক্রিয়ভাবে স্যুইচ করুন


18

আপনি কীভাবে জানেন যে আপনি যখন আপনার ল্যাপটপের অ্যাক্স জ্যাকটিতে হেডফোনগুলি প্লাগ করেন, অভ্যন্তরীণ স্পিকারগুলি স্বয়ংক্রিয়ভাবে নিঃশব্দ হয়ে যায় এবং আপনার হেডফোনগুলি থেকে শব্দগুলি বেরিয়ে আসে? আমি ঠিক এইচডিএমআই-এর জন্য চাই।

আমি কখনও কখনও ভিডিও দেখতে আমার ল্যাপটপে অন্তর্নির্মিত স্পিকারের সাথে একটি মনিটরে সংযোগ স্থাপন করি। ভিডিওটি মনিটরে থাকাকালীন খুব অদ্ভুত হয় (যা আমার ডেস্ক থেকে 3 মিটার দূরে স্থাপন করা হয়) তবে আমার ল্যাপটপের অভ্যন্তরীণ স্পিকারগুলির মধ্যে শব্দটি আসে (ল্যাপটপ ডেস্কে বসে)।

অবশ্যই, আমি কেবল শব্দ সেটিংসে যেতে পারি এবং আউটপুট চ্যানেলটি এইচডিএমআইতে স্যুইচ করতে পারি। তবে এরপরে, যখন আমি কয়েক ঘন্টা আগে এইচডিএমআই কেবলটি সরিয়ে ফেলেছিলাম এবং এমনকি এটি একেবারে পৃথক স্থানে থাকতে পারে তখন শব্দটি বাজবে না কারণ সাউন্ড সার্ভারটি এখনও এইচডিএমআই এর মাধ্যমে এটি চালানোর চেষ্টা করে তবে এর সাথে কোনও সংযুক্ত নেই isn't ।

কোনও ডিভাইস এইচডিএমআইয়ের মাধ্যমে সংযুক্ত না থাকা অবস্থায় স্বয়ংক্রিয়ভাবে অভ্যন্তরীণ স্পিকারগুলিতে ফিরে যাওয়া আরও গুরুত্বপূর্ণ তবে কোনও ডিভাইস সংযুক্ত থাকাকালীন HDMI এর মাধ্যমে সাউন্ড আউটপুটে স্যুইচ করা এখনও খুব সুন্দর হবে।

এটি স্পষ্টতই ১১.১০ নিয়ে কাজ করেছে তবে এটি 16.04 এর সাথে কাজ করে না।


শব্দটি টগল করতে একটি শর্ট-কাট কী থাকা আপনার পক্ষে ভাল সমাধান হতে পারে। এই থ্রেডের দ্বিতীয় উত্তরটি তা করে: Askubuntu.com/questions/41858/…
WinEunuuchs2Unix

আমি এখনও এটির সমাধান খুঁজছি (16.04 এ; প্রস্তাবিত সমাধানগুলির কোনওটিই কাজ করে না)। সমস্যাটি পুদিনা ফোরামেও আলোচনা করা হয় ।
হিরো নায়ক

@ হিরোপ্রোটোগোননিস্ট হ্যাঁ, আমিও। দেখে মনে হচ্ছে এখানে উত্তর বেশিরভাগ ক্ষেত্রে কাজ করে তবে সব ক্ষেত্রে নয়।
ইউটিএফ -8

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

উত্তর:


8

পটভূমি

স্থগিত / পুনরারম্ভের সময় আমার একইরকম সমস্যা হয়েছিল যখন এইচডিএমআই টিভি থেকে ল্যাপটপ স্পিকারগুলিতে শব্দটি স্যুইচ করবে। পুনরায় শুরু হওয়ার পরে শব্দটি ল্যাপটপ স্পিকারগুলিতে থাকবে এবং আমাকে System Settings-> এ টিভিতে ম্যানুয়ালি রিসেট করতে হবে Sound

উবুন্টু 14.04 থেকে 16.04 এ আপগ্রেড করার সাথে এটি আমার প্রথম বিরক্তিকর অভিজ্ঞতাগুলির মধ্যে একটি এবং মূলটি পালস অডিও 8 এ আপগ্রেড করা হয়েছিল যা 16.04 এলটিএস সহ আসে

অনেক অনুসন্ধানের পরে আমি একটি স্ক্রিপ্ট তৈরি করেছি TV-sound। যদিও আমি নিজের মতো করে টিভি প্লাগ এবং আনপ্লাগ করি না, তবুও আমি কিছু গুগল অনুসন্ধান করেছি এবং আপনার পরিস্থিতিতে কাজ করার জন্য স্ক্রিপ্টটির একটি প্রকরণ তৈরি করেছি। আমি এটি পরীক্ষা করেছি এবং এটি কাজ করে।

পদক্ষেপ 1: সংযুক্ত ডিভাইসের মধ্যে অডিও পরিবর্তন করতে স্ক্রিপ্ট তৈরি করুন

আমরা একটি স্ক্রিপ্ট তৈরি করব যাকে বলা hotplugtvহয় ইউদেব। এই একই স্ক্রিপ্ট যদিও অনেক জায়গায় বলা যেতে পারে। উদাহরণস্বরূপ, পরীক্ষার সময় আমি এটি ব্যবহার করেছি lock-screen-timerযেখানে স্ক্রীন লক চলাকালীন শব্দগুলি ল্যাপটপে ফিরে গেছে।

cd /usr/local/bin
sudo touch hotplugtv
sudo chmod +x hotplugtv
gksu gedit hotplugtv

সম্পাদক যখন খালি স্ক্রিনের সাথে খোলে, নিম্নলিখিতগুলিকে এতে অনুলিপি করুন এবং পেস্ট করুন:

#! /bin/bash

# NAME: hotplugtv
# PATH: /usr/local/bin
# DESC: Update pulseaudio output device when HDMI TV plugged / unplugged
# CALL: called from /etc/udev/rules.d/99-monitor-hotplug.rules
# DATE: Created Nov 26, 2016.
# NOTE: logs output using log-file
# UPDT: Dec 14, 2016 - Sometimes /sys/class/drm/card0 & sometimes /sys/class/drm/card1
#       so use /sys/class/dmcard* instead.

if [[ $(cat /sys/class/drm/card*-HDMI-A-1/status | grep -Ec "^connected") -eq 1 ]]; then
#        log-file "HDMI TV connected" ~/bin/log-hotplugtv;
        /bin/sleep 2;
        export PULSE_RUNTIME_PATH="/run/user/1000/pulse/";
        sudo -u rick -E pacmd set-card-profile 0 output:hdmi-stereo;
else
#        log-file "HDMI TV disconnected" ~/bin/log-hotplugtv;
        export PULSE_RUNTIME_PATH="/run/user/1000/pulse/";
        sudo -u rick -E pacmd set-card-profile 0 output:analog-stereo;
fi

exit 0

rickআপনার নিজের দুটি ব্যবহারকারীর আইডি, অর্থাৎ UTF-8, ইত্যাদির সাথে দুটি ঘটনাকে প্রতিস্থাপন করতে হবে

আমি জানি এটি ব্যবহারকারীর নামটি স্বয়ংক্রিয়ভাবে ব্যাশ ভেরিয়েবলের সাথে সেট হওয়ার সাথে আরও পেশাদার হতে পারে তবে আমি এখনও তেমন দক্ষ নই :( যাইহোক, ফাইলটি সংরক্ষণ করুন এবং প্রস্থান করুন gedit

পদক্ষেপ 2: ইউদেব বিধি তৈরি করুন

আপনি যখন এইচডিএমআই মনিটর প্লাগ ইন করেন এবং আনপ্লাগ করেন তখন ইউদেব হটপ্লাগ ইভেন্টগুলি পর্যবেক্ষণ করে। একটি নতুন নিয়ম তৈরি করতে নিম্নলিখিত টাইপ করুন।

cd /etc/udev/rules.d
sudo cp 70-persistent-net.rules 99-hotplugtv.rules
gksu gedit 99-hotplugtv.rules

দ্রষ্টব্য:70-persistent-net.rules আপনার ডিরেক্টরিতে যদি ফাইলটি বিদ্যমান না থাকে তবে সেখানে অন্য কোনও ফাইল অনুলিপি করুন। আমাদের ফাইল সামগ্রীগুলি প্রয়োজন নেই, কেবল আমাদের ফাইলগুলি একই রয়েছে তা নিশ্চিত করার জন্য ফাইল অনুমতিগুলি।

সম্পাদক অপ্রাসঙ্গিক পাঠের একগুচ্ছ প্রদর্শন করবে, এটি হাইলাইট করবে এবং এটি মুছবে। তারপরে নীচের কোডটি হাইলাইট করুন এবং এডিটরটিতে এটি আটকে দিন:

# NAME: 99-hotplugtv.rules
# PATH: /etc/udev/rules.d
# DESC: Update pulseaudio output device when HDMI TV plugged / unplugged
# CALL: automatically called on system events
# DATE: Created Nov 26, 2016.
# NOTE: in future may requre systemd service hooks

ACTION=="change", SUBSYSTEM=="drm", ENV{HOTPLUG}=="1", RUN+="/usr/local/bin/hotplugtv"

ফাইল এবং সংরক্ষণ করে প্রস্থান করুন।

নিয়ম সক্ষম করতে (রিবুট ছাড়াই) আমাদের ইউদেব পুনরায় লোড করতে হবে:

sudo udevadm control --reload-rules

এখন আপনি আপনার এইচডিএমআই মনিটর / টিভি প্লাগ এবং আনপ্লাগ করতে পারেন এবং শব্দটি যথাযথভাবে স্যুইচ করতে পারেন।

বিচারকার্য স্থগিত রাখার আদেশ

আমার সিস্টেমে যখন এইচডিএমআই আনপ্লাগ করা থাকে তখন শব্দটি স্বয়ংক্রিয়ভাবে ল্যাপটপ স্পিকারগুলিতে ফিরে আসে। আপনার সিস্টেমে এটি হয়নি। এইচডিএমআই আনপ্লাগড থাকা অবস্থায় যদি আপনার ল্যাপটপ স্পিকারগুলিতে শব্দ না যায় তবে কোডে আরও বর্ধনের প্রয়োজন হতে পারে। কীভাবে জিনিসগুলি কাজ করে / কার্যকর হয় না তা নীচের মন্তব্যের মাধ্যমে জবাব দিন।

সিএলআই-তে দ্রুত পরীক্ষা করা

আপনি ব্যবহার করে দ্রুত টার্মিনালে কোড পরীক্ষা করতে পারেন:

    export PULSE_RUNTIME_PATH="/run/user/1000/pulse/";
  • এইচডিএমআই / টিভিতে স্যুইচ করুন:

        sudo -u rick -E pacmd set-card-profile 0 output:hdmi-stereo;
  • বিল্ট স্পিকারগুলিতে ফিরে যান:

        sudo -u rick -E pacmd set-card-profile 0 output:analog-stereo;
  • rickআপনার ব্যবহারকারীর নাম দিয়ে প্রতিস্থাপন মনে রাখবেন ।

  • প্রাথমিক exportলাইন সম্ভবত প্রয়োজনীয় নয় তবে আমি এটি নিরাপদ থাকার জন্য অন্তর্ভুক্ত করেছি।
  • আপনার যদি একাধিক সাউন্ড কার্ড থাকে, বা hdmi-stereoআপনার স্ক্রিপ্টটি লেখার আগে সঠিক প্যারামিটারগুলি সন্ধানের জন্য টুইঙ্কের বাইরে অন্য কোনও কিছু স্পষ্টতই প্রয়োজন।

পালস অডিওতে আপনার ডিভাইসের নামটি বোঝা যাচ্ছে

নীচের কোডটি একই কমান্ডটি দু'বার ব্যবহার করে। একবার যখন শব্দটি বাহ্যিক এইচডিএমআই টিভিতে সেট করা থাকে। দ্বিতীয়বার যখন শব্দটি ল্যাপটপের বিল্ট স্পিকারগুলিতে সেট করা থাকে। প্রতিবার আপনি পালস অডিও নামে যে নামটি ব্যবহার করেছেন তা দেখবেন:

$ pacmd list-sinks | grep -e 'name:' -e 'index'
  * index: 28
    name: <alsa_output.pci-0000_00_1b.0.hdmi-stereo>
───────────────────────────────────────────────────────────────────────────────
$ pacmd list-sinks | grep -e 'name:' -e 'index'
  * index: 30
    name: <alsa_output.pci-0000_00_1b.0.analog-stereo>

যখন আপনার একাধিক সাউন্ড কার্ড থাকবে

আপনার aplay -lনম্বর 0 এর চেয়ে বেশি কার্ড রয়েছে কিনা তা দেখতে কমান্ডটি ব্যবহার করুন যদি তাই হয় তবে আপনার স্ক্রিপ্টগুলিতে আপনাকে উপযুক্ত কার্ড নম্বর ব্যবহার করতে হবে। উদাহরণ স্বরূপ:

$ aplay -l
**** List of PLAYBACK Hardware Devices ****
card 0: PCH [HDA Intel PCH], device 0: 92HD91BXX Analog [92HD91BXX Analog]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 0: PCH [HDA Intel PCH], device 3: HDMI 0 [HDMI 0]
  Subdevices: 0/1
  Subdevice #0: subdevice #0

উপরের উদাহরণে সমস্ত কার্ড নম্বর বিভিন্ন আউটপুট উত্স সহ 0 হয়। আপনার যদি ইউএসবি স্পিকার থাকে তবে তাদের 0 টির চেয়ে আলাদা কার্ড নম্বর থাকতে পারে।

ডিসেম্বর 2, 2016 সম্পাদনা করুন

কোনও অজানা কারণে লিপিটি আজ ভেঙে গেছে। উপরের কোডটি পড়তে ব্যবহৃত হত: "$ (বিড়াল / সিএস / শ্রেণি / ড্রাম / কার্ড0-এইচডিএমআই-এ -১ / স্ট্যাটাস)" তবে আমাকে পরিবর্তন card0করতে হয়েছিল card1এবং উপরের কোডটি এইভাবে সংশোধন করা হয়েছে। আমি কী পরিবর্তন করেছি তা ব্যাখ্যা করতে পারছি না 26 নভেম্বর, 2016 থেকে নিয়মিত উবুন্টু আপডেটগুলি ব্যতীত আমার সিস্টেমে।

14 ডিসেম্বর, 2016 সম্পাদনা করুন

উপরের কোডটিতে আবার ফিরে যেতে হবে: "cat (বিড়াল / সিএস / শ্রেণি / ড্রিম / কার্ড0-এইচডিএমআই-এ -১ / স্ট্যাটাস)"। বুটের মধ্যে কোড সংশোধন করার পরিবর্তে card0এবং card1প্রোগ্রামের সংশোধন করে card*উভয় পরিস্থিতি ক্যাপচারের জন্য রেফারেন্স করুন ।


আমি অনুলিপি করতে পারি না 70-persistent-net.rulesকারণ এটি বিদ্যমান নেই। /etc/udev/rules.dকেবলমাত্র একটি একক ফাইল রয়েছে 39-smfp_samsung.rules
ইউটিএফ -8

ওহ ভাল 30-smfp_samsung.rules অনুলিপি করুন, কেবলমাত্র আমাদের নতুন ফাইলের জন্য আমাদের সঠিক অনুমতি আছে তা নিশ্চিত করার জন্য আমাদের ফাইলের সামগ্রীগুলির প্রয়োজন নেই। একটি বিদ্যমান ফাইল অনুলিপি করা সহজ উপায় (যাইহোক আমার জন্য)।
WinEunuuchs2Unix

1
এটি আমার সিস্টেমে কাজ করে না। @ যে ব্যক্তি ইতিমধ্যে এই উত্তরটিকে অগ্রাহ্য করেছেন: এটি কি আপনার কাজ করে? | আমি প্রথমে রিবুট না করে চেষ্টা করেছিলাম কিন্তু এটি কার্যকর হয়নি। এটি রিবুট করার পরেও কার্যকর হয় না। আমি এইচডিএমআই সংযোগ বিচ্ছিন্ন করে দিয়ে রিবুট করার আগে অভ্যন্তরীণ স্পিকারগুলিতে শব্দটি সেট করেছিলাম। রিবুট করার পরে, আমি কিছু সংগীত প্লে করেছি এবং আমার এইচডিএমআই কেবলটি সংযুক্ত করেছি। সংগীত এখনও (কেবল) অন্তর্নির্মিত স্পিকারগুলির বাইরে এসেছিল। আপনার ব্যবহারকারীর ব্যবহারের 2 টি উপস্থিতি ব্যতীত অন্য কিছু পরিবর্তন করতে হবে? cat /sys/class/drm/card0-HDMI-A-1/statusসঠিক স্থিতি দেখায় (আমি বেশ কয়েকবার চেষ্টা করেছি)।
ইউটিএফ -8

@ ইউটিএফ -8 আমি একটি নতুন বিভাগ যুক্ত করেছি যেখানে আপনি কমান্ড লাইনে স্যুইচিং পরীক্ষা করতে পারেন। আপনি কি এটি চালাতে পারেন এবং দয়া করে ত্রুটিগুলি বেরিয়ে আসে কিনা তা দেখতে পারেন?
WinEunuuchs2Unix

নেই বলে মনে হচ্ছে output:analog-stereo: পেস্টবিন.ইন 5 বিএইচএইচসিএম এটি আরও অযৌক্তিক করে তোলে কারণ তখন আমি আশা করব যে শব্দটি সর্বদা এইচডিএমআই এর মাধ্যমে বাজানো হবে। যখন HDMI সংযুক্ত থাকে এবং যখন HDMI সংযুক্ত থাকে না তখন আমার শব্দ সেটিংসের স্ক্রিনশট । সম্পাদনা: আমি ইতিমধ্যে এটি চেষ্টা করেছি তবে আমাকে এই মন্তব্যটি পোস্ট করতে আরও কয়েক মিনিট সময় লেগেছে কারণ আমাকে স্ক্রিনশটগুলি আপলোড করতে হয়েছিল।
ইউটিএফ-8
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.