আমি ব্যাশে একটি ছোট 'ডিমন' লিখেছি যা হেডফোনগুলি সনাক্ত করা হলে সেগুলিতে স্যুইচ করবে এবং যদি তা না হয় তবে পালস অডিও সহ কোনও বহিরাগত ইউএসবি স্পিকারে স্যুইচ করবে।
আমি যা খুঁজছি তা হ'ল ফাইলের পরিবর্তনের বিজ্ঞপ্তি পাওয়ার কিছু উপায় /proc/asound/card0/codec#0, ঠিক যেমন inotifywaitআসল ফাইলগুলিতেও হয় (/ প্রোক্টের অধীনে থাকা ফাইলগুলি "সিউডো-ফাইল" হিসাবে বিবেচনা করা হয়)।
আমি আমার কোড একটি বিট উন্মাদ কারণ এটি সঞ্চালিত হয় খুঁজে sleep 1সঙ্গে awkপুরো দিন, যে 86400 ওয়াক্ত জন্য :)
while sleep 1; do
_1=${_2:-}
_2=$(awk '/Pin-ctls/{n++;if(n==4)print}' '/proc/asound/card0/codec#0')
[[ ${_1:-} = $_2 ]] ||
if [[ $_2 =~ OUT ]]; then
use_speakers
else
use_internal
fi
done
আমি যা খুঁজছি তা হ'ল এই জাতীয় উদাহরণ (উদাহরণটি কার্যকর হয় না):
codec=/proc/asound/card0/codec#0
while inotifywait $codec; do
if [[ $(awk '/Pin-ctls/{n++;if(n==4)print}' $codec) =~ OUT ]]; then
use_speakers
else
use_internal
fi
done
এইভাবে লুপের ভিতরে থাকা কমান্ডগুলি কেবল তখনই চালিত হবে যখন $codecফাইলটিতে আসল পরিবর্তন হবে are
/proc, আপনি সম্ভবত একটি স্ক্রিনটিকে একটি ইউদেব নিয়ম দিয়ে ট্রিগার করতে পারেন , এটি বেশ আদর্শ। কম আদর্শ হ'ল উদেব নিয়মগুলি নিয়ে এটি কতটা ক্লান্তিকর হতে পারে;)
topGUI সিস্টেম মনিটরের মত বিষয়গুলি/procস্বল্প বিরতিতে এর চেয়ে অনেক বেশি পড়বে । অবশ্যই, তারা সম্ভবত এটি সঙ্কলিত এক্সিকিউটেবল হিসাবে আরও দক্ষতার সাথে করে তবে মূল কথাটি: তথ্যের জন্য ভোটদান একটি সাধারণ কাজ।