আমার হেডফোনগুলি প্লাগ আউট করা অবস্থায় কীভাবে ভিএলসি প্লেব্যাক থামানো সম্ভব? আমি ALSA এর মাধ্যমে স্পিকারগুলিকে নিঃশব্দ করতে পারি, তবে আমি স্মার্টফোনে যেমন স্বাভাবিক হয় তেমন প্লেব্যাক বন্ধ করতে প্লাগ ট্রিগার ব্যবহার করতে চাই।
আমার হেডফোনগুলি প্লাগ আউট করা অবস্থায় কীভাবে ভিএলসি প্লেব্যাক থামানো সম্ভব? আমি ALSA এর মাধ্যমে স্পিকারগুলিকে নিঃশব্দ করতে পারি, তবে আমি স্মার্টফোনে যেমন স্বাভাবিক হয় তেমন প্লেব্যাক বন্ধ করতে প্লাগ ট্রিগার ব্যবহার করতে চাই।
উত্তর:
ঠিক আছে, তাই আমি এখান থেকে যা শিখেছি তার ভিত্তিতে , আমি এসিপিআই ব্যবহার করে একটি নতুন পদ্ধতির চেষ্টা করছি।
ভিএলসিকে বিরতি দেওয়া এবং আনপুজ করার জন্য একটি স্ক্রিপ্ট তৈরি করুন:
sudo touch /etc/acpi/headphone_jack.sh
sudo chmod +x /etc/acpi/headphone_jack.sh
এবং এই ফাইলটিতে নিম্নলিখিতটি রাখুন:
_pid=`pgrep vlc`
_pid="${_pid% *}"
DBUS_SESSION_BUS_ADDRESS=`grep -z DBUS_SESSION_BUS_ADDRESS /proc/$_pid/environ | sed -e 's/DBUS_SESSION_BUS_ADDRESS=//'`
_username=`grep -z USER= /proc/$_pid/environ |sed 's/.*=//'`
if [ "$3" = unplug ]; then
su $_username -c "DBUS_SESSION_BUS_ADDRESS=$DBUS_SESSION_BUS_ADDRESS dbus-send --print-reply --session --dest=org.mpris.MediaPlayer2.vlc /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.Pause"
else
su $_username -c "DBUS_SESSION_BUS_ADDRESS=$DBUS_SESSION_BUS_ADDRESS dbus-send --print-reply --session --dest=org.mpris.MediaPlayer2.vlc /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.Play"
fi
এখন আসুন একটি ইভেন্ট ট্রিগার তৈরি করুন ( vim
আপনার প্রিয় পাঠ্য সম্পাদকটি দিয়ে প্রতিস্থাপন করুন ):
sudo vim /etc/acpi/events/headphones
এবং নিম্নলিখিত যোগ করুন:
event=jack/headphone
action=/etc/acpi/headphone_jack.sh %e
শেষ পর্যন্ত, এসিপিআই ডেমন পুনরায় চালু করুন:
sudo service acpid restart
আমি মনে করি আপনার পোলিং জড়িত না করে আপনার যা প্রয়োজন ঠিক তা হওয়া উচিত। এই প্রয়োগের সাথে আমি খুঁজে পেতে পারি কেবলমাত্র ত্রুটিটি যদি আপনার একই সাথে ভিএলসি চালিত একাধিক ব্যবহারকারী থাকে। আমি মনে করি, সেক্ষেত্রে কী ঘটতে পারে তা হল এই পদ্ধতির এলোমেলোভাবে তাদের মধ্যে একটিকে বিরতি দেওয়া এবং পুনরায় চালু করা হবে (বা এটি সম্ভবত কাজ করবে না)।
আমাকে এসিপিআই ইভেন্ট পরিচালনা সংক্রান্ত গুরুত্বপূর্ণ জ্ঞান প্রদানের জন্য @ ইন্দু_আউ এবং @ স্নিটারে বড় কুডোস। পদ্ধতিটি সরলকরণে সহায়তার জন্য @ ব্যবহারকারী 3073656 পর্যন্ত থাম্বও করুন।
grep -z USER /proc/$_pid/environ
যাতে এটি মেশিনে সমস্ত ব্যবহারকারীর জন্য কাজ করে (একক চলমান সেশন / ভিএলসি সহ)। আমি এই জাতীয় বিকল্প খুঁজছিলাম।
ঠিক আছে, সুতরাং এর জন্য আপনাকে কয়েকটি জিনিস করতে হবে:
(1) এবং (3) এর জন্য: আপনি এখানে যা দেখানো হয়েছে তা ব্যবহার করতে পারেন । এই উত্তরটিতে একটি প্লাগড এবং প্লাগযুক্ত জ্যাকের মধ্যে পার্থক্য এবং আপনার ক্ষেত্রে অনুসারে আপনি সংশোধন করতে পারেন এমন একটি স্ক্রিপ্ট রয়েছে।
(2) এবং (4) এর জন্য: আপনার ভিএলসির ডিবিস ইন্টারফেস ব্যবহার করা উচিত। সম্পর্কিত কোডটি এটি হওয়া উচিত:
dbus-send --print-reply --session --dest=org.mpris.vlc /Player org.freedesktop.MediaPlayer.Pause
dbus-send --print-reply --session --dest=org.mpris.vlc /Player org.freedesktop.MediaPlayer.Play
বিরতি এবং যথাক্রমে খেলুন।
এখন, স্ক্রিপ্ট সম্পর্কে। আপনার ক্ষেত্রে এটির মতো দেখতে হবে:
#!/bin/bash
# This scripts detecs unplugging headphones.
oldstatus="unrelated string"
while [ 1 ]; do
# The following line has to be changed depending on the difference (use diff) in '/proc/asound/card0/code#0'
status=$(grep -A 4 'Node 0x16' '/proc/asound/card0/codec#0' | grep 'Amp-Out vals: \[0x80 0x80\]')
if [ "$status" != "$oldstatus" ]; then
if [ -n "$status" ]; then
echo "Plugged in"
dbus-send --print-reply --session --dest=org.mpris.vlc /Player org.freedesktop.MediaPlayer.Play
oldstatus="$status"
else
echo "Unplugged"
dbus-send --print-reply --session --dest=org.mpris.vlc /Player org.freedesktop.MediaPlayer.Pause
oldstatus="$status"
fi
fi
# Now sleep for 250 milli-seconds as per @Serg's request (who learnt if from @Fabby)
# sleep is timer-based so doesn't use *any* processor cycles while sleeping.
sleep 0.25
done
আপনার স্টার্টআপ অ্যাপ্লিকেশনগুলিতে এই পরিবর্তিত স্ক্রিপ্টটি যুক্ত করুন এবং আপনি সেট হয়ে গেছেন। আমি মনে করি এটি আপনি যা করতে চান তা করা উচিত।
পিএস - নোট করুন যে এটি করার আরও কার্যকর উপায় রয়েছে যেমন inotify
ইভেন্টের পরিবর্তনগুলি সনাক্ত করতে ব্যবহার করা (এবং সম্ভবত অন্যান্য পদ্ধতিরও হতে পারে) তবে এইটি আপনাকে শুরু করা উচিত (এবং অন্যরা আমার দক্ষতার স্তর এবং অভিজ্ঞতার aboveর্ধ্বে)। আমি মনে করি আপনি এই "হ্যাকিশ" পদ্ধতির সাহায্যে শুরু করতে পারেন এবং এখান থেকে তৈরি করতে পারেন।
sleep 0.25
শেষে একটি যোগ করতে পারেন , যা দ্বিতীয় বিলম্বের এক চতুর্থাংশ। এটি সিপিইউতে সহজ হয়ে যায় এবং এখনও যথেষ্ট দ্রুত কাজ করে। আমি এটি কখনও কখনও আমার নিজের স্ক্রিপ্টগুলিতেও ব্যবহার করি