मैंने बैश में एक छोटा सा 'डेमॉन' लिखा है जो हेडफ़ोन पर स्विच करेगा यदि उनका पता लगाया जाता है, और यदि नहीं, तो पल्सएडियो के साथ एक बाहरी यूएसबी स्पीकर पर स्विच करें।
मैं जिस चीज की तलाश कर रहा हूं /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
फाइल में असली बदलाव होंगे ।
/proc
, तो आप शायद एक udev नियम के साथ अपनी स्क्रिप्ट को ट्रिगर कर सकते हैं , जो बहुत ही आदर्श होगा। कम आदर्श यह है कि यह
top
और जीयूआई सिस्टम मॉनिटर/proc
छोटे अंतराल से एक पूरी बहुत अधिक पढ़ते हैं। बेशक, वे इसे संकलित निष्पादन योग्य के रूप में अधिक कुशलता से करते हैं, लेकिन मुद्दा यह है: सूचना के लिए मतदान एक सामान्य कार्य है।