มีวิธีการปิดเสียงจากคอมพิวเตอร์ของฉันทุกครั้งที่ฉันถอดปลั๊กหูฟัง (เหมือนโทรศัพท์ทำ) เพื่อหยุดเสียงจากนั้นจึงเปิดลำโพง
มีวิธีการปิดเสียงจากคอมพิวเตอร์ของฉันทุกครั้งที่ฉันถอดปลั๊กหูฟัง (เหมือนโทรศัพท์ทำ) เพื่อหยุดเสียงจากนั้นจึงเปิดลำโพง
คำตอบ:
โดยพื้นฐานแล้วสิ่งที่ได้ผลสำหรับฉันคือ:
# 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' ภายใต้ 'Amp-Out vals':
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
ลูปไม่สิ้นสุด(โดยไม่ต้องมีคำสั่งสลีปเล็กน้อย) ทำงานอย่างต่อเนื่องในพื้นหลังนั้นยังห่างไกลจากโซลูชันที่สมบูรณ์แบบ มันเป็นวิธีแก้ปัญหาที่น่าเกลียดและแฮ็คนอกเหนือจากการเป็นซีพียูและนักฆ่าแบตเตอรี่ ฉันลองใช้และไปจากสถานการณ์ปกติของการใช้งาน cpu คงที่ 5% (ด้วยเบราว์เซอร์, spotify, เทอร์มินัล, IDE, Telegram และแอปอื่น ๆ ที่เปิด) ถึง 45% ของการใช้ cpu คงที่
acpi_listen
ตามที่แนะนำในลิงค์ใดลิงก์หนึ่งในคำตอบนี้
สิ่งนี้ใช้ได้กับฉันใน Ubuntu 14.04:
"ให้หูฟังปิดเสียงแล้วใส่หูฟังและเพิ่มระดับเสียงเอาหูฟังออกแล้วตรวจสอบว่าปิดเสียงแล้ว"
เครดิต: RevDrStrangelove บนhttps://www.reddit.com/r/LifeProTips/comments/369k76/lpt_request_automaticly_mute_laptop_after_headset/
สำหรับ 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