পটভূমি
স্থগিত / পুনরারম্ভের সময় আমার একইরকম সমস্যা হয়েছিল যখন এইচডিএমআই টিভি থেকে ল্যাপটপ স্পিকারগুলিতে শব্দটি স্যুইচ করবে। পুনরায় শুরু হওয়ার পরে শব্দটি ল্যাপটপ স্পিকারগুলিতে থাকবে এবং আমাকে 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*
উভয় পরিস্থিতি ক্যাপচারের জন্য রেফারেন্স করুন ।