क्या मेरे कंप्यूटर से हर समय म्यूटिंग साउंड का एक तरीका है जो मैं अपने हेडफ़ोन को अनप्लग करता हूं (जैसे एक फोन करता है) ध्वनि को रोकने के लिए फिर मेरे स्पीकर से बाहर खेलने?
क्या मेरे कंप्यूटर से हर समय म्यूटिंग साउंड का एक तरीका है जो मैं अपने हेडफ़ोन को अनप्लग करता हूं (जैसे एक फोन करता है) ध्वनि को रोकने के लिए फिर मेरे स्पीकर से बाहर खेलने?
जवाबों:
मूल रूप से मेरे लिए क्या काम किया गया था:
# When plugged in:
cat /proc/asound/card0/codec#0 > pluggedin.txt
# When not plugged in:
cat /proc/asound/card0/codec#0 > notplugged.txt
# Then compare the differences
diff pluggedin.txt notplugged.txt
मेरे लिए अंतर 'एम्प-आउट वैल' के तहत 'नोड 0x16' में था:
Node 0x16 [Pin Complex] wcaps 0x40058d: Stereo Amp-Out Node 0x16 [PinComplex] wcaps 0x40058d: Stereo Amp-Out
Amp-Out caps: ofs=0x00, nsteps=0x00, stepsize=0x00, mute=1 Amp-Out caps:ofs=0x00, nsteps=0x00, stepsize=0x00, mute=1
Amp-Out vals: [0x80 0x80] | Amp-Out vals: [0x00 0x00]
इसलिए मैंने पाया अंतर के आधार पर पता लगाया।
इस ज्ञान के साथ आप एक स्क्रिप्ट पृष्ठभूमि में चल सकते हैं। यदि अनप्लग की गई स्क्रिप्ट आपके वक्ताओं का उपयोग करना पसंद करती है amixer sset Master playback 0%
(या कोई अन्य कमांड)।
#!/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"
amixer sset Master playback 80% # Set volume to 80%
oldstatus="$status"
else
echo "Unplugged"
amixer sset Master playback 0% # Mute
oldstatus="$status"
fi
fi
done
आप इसे chmod +x scriptname.sh
स्टार्टअप एप्लिकेशन के साथ निष्पादन योग्य बना सकते हैं और डाल सकते हैं । हालाँकि आपको अपना अंतर ढूंढकर अनप्लग डिटेक्शन को एडजस्ट करना होगा /proc/asound/card0/codec#0
।
सम्बंधित लिंक्स:
https://wiki.ubuntu.com/Audio/PreciseJackDetectionTesting
/unix/25776/detecting-headphone-connection-disconnection-in-linux
जब अन-प्लगिंग हेडफ़ोन को स्वचालित रूप से वॉल्यूम स्तर कैसे बदला जाए?
while
पृष्ठभूमि में लगातार चलने वाली एक अनंत लूप (थोड़ी नींद की शिक्षा के बिना) के साथ स्क्रिप्ट होना एक आदर्श समाधान से दूर है; यह एक सीपीयू और बैटरी किलर होने के अलावा एक बदसूरत और हैकी वर्कअराउंड है। मैंने इसे आज़माया और लगातार 5% cpu उपयोग (ब्राउज़र, स्पॉटिफ़, टर्मिनल, IDE, टेलीग्राम, और अन्य ऐप खुले) के साथ 45% निरंतर सीपीयू उपयोग की सामान्य स्थिति से चला गया।
acpi_listen
, जैसा कि इस उत्तर में दिए गए लिंक में से एक में सुझाया गया है।
इसने मेरे लिए Ubuntu 14.04 पर काम किया:
"हेडफ़ोन के साथ इसे म्यूट करें। हेडफ़ोन डालें और वॉल्यूम बढ़ाएं। हेडफ़ोन निकालें और म्यूट के लिए जांचें।"
श्रेय: https://www.reddit.com/r/LifeProTips/comments/369k76/lpt_request_automaticly_mute_laptop_after_headset पर RevDrStrangelove
Ubuntu-16.10 के लिए मैंने इस उत्तर में कुछ बदलाव किया ।
oldresult="Some Random String"
while [ 1 ]; do
# incase of plugged out result will contain some data
result=$(grep "EAPD 0x2: EAPD" /proc/asound/card0/codec#0)
# checking for oldresult if not same then only go inside
if [ "$oldresult" != "$result" ]; then
oldresult=$result
if [[ -z "$result" ]]; then
notify-send "Plugged In"
amixer sset Master playback 80% # Set volume to 80%
else
notify-send "Plugged Out"
amixer sset Master playback 0% # Set volume to 0%
fi
fi
done
यदि आपको मेरे उत्तर को देखने में होने वाली घटनाओं की समस्या है । यह भी है बिना डिवाइस कोड के रूप में ।/etc/acpi/handler.sh
Node 0x16