फिर भी एक और सिंक स्विचर स्क्रिप्ट
Ubuntu 16.04 पर परीक्षण किया गया
लेकिन यह आपको केवल आपके इच्छित एप्लिकेशन के ऑडियो को स्विच करने देता है।
उपयोग: उस एप्लिकेशन पर ध्यान केंद्रित करें, जिसे आप इसके सिंक को बदलना चाहते हैं और इस स्क्रिप्ट को चलाना चाहते हैं। बस!!!
यह स्क्रिप्ट उस एप्लिकेशन का पता लगाती है जो फ़ोकस पर है, सभी ऑडियोज़ को इससे खेलते हुए पाता है, और उन्हें अगले उपलब्ध सिंक पर स्विच करता है।
https://gist.github.com/madacol/1a0d8569166886d2d98f073f7f5c5fe3
स्क्रिप्ट की व्याख्या करते हुए
हमें फोकस पर एप्लिकेशन के पीआईडी को खोजने की आवश्यकता है
लेकिन पहले हमें xid की आवश्यकता है
xprop -root _NET_ACTIVE_WINDOW
फिर $xidआवेदन की पाइड प्राप्त करने के लिए इसे यहां डालें
xprop -id $xid _NET_WM_PID
अब हमें उस PID से संबंधित सिंक-इनपुट की आवश्यकता है
पहले pacmd list-sink-inputsएक पंक्ति में एक सिंक-इनपुट को सूचीबद्ध करने के लिए कमांड के आउटपुट को रैखिक करें , उसी लाइन पर अपना इंडेक्स, सिंक और पिड दिखाते हुए
pacmd list-sink-inputs | grep -E 'index:|sink:|process.id' | tr '\n' ' ' | tr -d '"' | sed -e 's/index:/\n/g' | tail -n +2
आइए इसका विश्लेषण चरण दर चरण करें:
grep -E 'index:|sink:|process.idकेवल उन पंक्तियों को रखें जिनमें शामिल हैं index:, sink:याprocess.id
tr '\n' ' ' सभी लाइनों में मिलती है
tr -d '"'सभी "वर्णों को निकालता है । उद्धरण के बिना पिड प्राप्त करने के लिए आवश्यक है
sed -e 's/index:/\n/g'index:एक नई पंक्ति वर्ण के साथ सभी घटनाओं को प्रतिस्थापित करता है\n
tail -n +2 खाली होने के कारण पहली पंक्ति निकालता है
और परिणाम कुछ इस प्रकार है:
180 sink: 0 <alsa_output.pci-0000_00_00.1.hdmi-stereo-extra1> application.process.id = 3521
181 sink: 1 <alsa_output.pci-0000_00_01.0.analog-stereo> application.process.id = 2733
182 sink: 0 <alsa_output.pci-0000_00_00.1.hdmi-stereo-extra1> application.process.id = 13752
आइए एक पंक्ति का विश्लेषण करें कि इसका क्या अर्थ है:
# 182 sink: 0 <alsa_output.pci-0000_00_00.1.hdmi-stereo-extra1> application.process.id = 13752
182सिंक-इनपुट इंडेक्स है, 0सिंक इंडेक्स है, और 13752अंत में, संबंधित एप्लिकेशन का पाइड है
फिर हम प्रत्येक पंक्ति के माध्यम से पुनरावृति करते हैं
... | while IFS= read -r line || [ -n "$line" ]; do
sink_input_pid=$(echo $line | awk '{print $NF}')
और अंत में केवल सिंक-इनपुट के पीआईडी को फ़िल्टर करें जो फ़ोकस किए गए ऐप के पीआईडी से मेल खाता है
if [ $sink_input_pid = $app_pid ]; then
डेटा निकालना
साथ awkहम तत्वों प्राप्त कर सकते हैं हम जरूरत
sink_input_index=$(echo $sink_input | awk '{print $1}')
current_sink_index=$(echo $sink_input | awk '{print $3}')
सिंक की संख्या प्राप्त करें, यह जानने के लिए कि सिंक के रोटेशन को 0 से फिर से शुरू करना चाहिए।
sink_list_size=${#sink_list_array[@]}
अगला सिंक ढूंढते हुए, हमें सिंक की सूची के माध्यम से पुनरावृति करनी है, यह जानने के लिए कि कौन सी वर्तमान_sink_index से मेल खाती है और अगले सिंक का सूचकांक जानने के लिए।
i=0
for sink in "${sink_list_array[@]}"; do
i=$((($i+1)%sink_list_size)) # i++ mod(#sinks)
if [ $sink = $current_sink_index ]; then
next_sink_index=${sink_list_array[i]}
break
fi
done
और अंत में, हम नेक्स -इनपुट को next_sink_index में चलाने के लिए स्थानांतरित करते हैं
pacmd move-sink-input $sink_input_index $next_sink_index
Ubuntu 16.04 पर ध्यान दें:
शॉर्टकट कुंजी को कॉन्फ़िगर करते समय, मैं इसे ubuntu के शॉर्टकट मैनेजर के साथ काम नहीं कर सका। इसलिए मुझे compizconfig-settings-manager स्थापित करना पड़ा
sudo apt-get install compizconfig-settings-manager