ปิดเสียงเมื่อถอดปลั๊กหูฟังใช่ไหม


10

มีวิธีการปิดเสียงจากคอมพิวเตอร์ของฉันทุกครั้งที่ฉันถอดปลั๊กหูฟัง (เหมือนโทรศัพท์ทำ) เพื่อหยุดเสียงจากนั้นจึงเปิดลำโพง


1
ลิงค์ที่เกี่ยวข้อง: unix.stackexchange.com/questions/25776/…
con-f-use

ลิงค์ที่เกี่ยวข้อง: unix.stackexchange.com/questions/25776/ …และaskubuntu.com/questions/23508/…
con-f-use

ฉันโพสต์คำตอบโดยไม่ใช้ลูปไม่สิ้นสุดที่นี่ - askubuntu.com/a/1005144/470017
Al.G

คำตอบ:


10

วิธีการตรวจสอบการถอดปลั๊ก

โดยพื้นฐานแล้วสิ่งที่ได้ผลสำหรับฉันคือ:

# 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

วิธีการเปลี่ยนระดับเสียงโดยอัตโนมัติเมื่อไม่ได้ / เสียบหูฟัง?


ทำงานได้อย่างสมบูรณ์ในมิ้นต์ 17.3 ขอบคุณ!
Briscoooe

4
การมีสคริปต์ที่มีwhileลูปไม่สิ้นสุด(โดยไม่ต้องมีคำสั่งสลีปเล็กน้อย) ทำงานอย่างต่อเนื่องในพื้นหลังนั้นยังห่างไกลจากโซลูชันที่สมบูรณ์แบบ มันเป็นวิธีแก้ปัญหาที่น่าเกลียดและแฮ็คนอกเหนือจากการเป็นซีพียูและนักฆ่าแบตเตอรี่ ฉันลองใช้และไปจากสถานการณ์ปกติของการใช้งาน cpu คงที่ 5% (ด้วยเบราว์เซอร์, spotify, เทอร์มินัล, IDE, Telegram และแอปอื่น ๆ ที่เปิด) ถึง 45% ของการใช้ cpu คงที่
LeartS

โซลูชันนี้เป็นพลเมืองที่ไม่ดีอย่างน่ากลัวอย่างที่ @LearlS ชี้ให้เห็น โปรดอย่าทำเช่นนี้ สำหรับวิธีแก้ปัญหาพลเมืองดีให้ใช้acpi_listenตามที่แนะนำในลิงค์ใดลิงก์หนึ่งในคำตอบนี้
Don Hatch

0

สิ่งนี้ใช้ได้กับฉันใน Ubuntu 14.04:

"ให้หูฟังปิดเสียงแล้วใส่หูฟังและเพิ่มระดับเสียงเอาหูฟังออกแล้วตรวจสอบว่าปิดเสียงแล้ว"

เครดิต: RevDrStrangelove บนhttps://www.reddit.com/r/LifeProTips/comments/369k76/lpt_request_automaticly_mute_laptop_after_headset/


0

สำหรับ 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

ทั้งคำตอบนี้และคำตอบนั้นมาจากพลเมืองที่ไม่ดี ดูเหมือนว่าจะใช้งานได้ แต่พวกเขาก็มีทรัพยากรระบบซึ่งไม่ได้ขยายขนาด - รันโปรแกรมบางโปรแกรมในเวลาเดียวกันและทำให้ระบบพัง โปรดอย่าทำเช่นนี้ คุณสามารถใช้หนึ่งในโซลูชันที่เกี่ยวข้องกับ acpi_listen หรือคล้ายกันแทน
Don Hatch

0

ถ้าคุณมีปัญหากับเหตุการณ์จับใน/etc/acpi/handler.shดูของฉันคำตอบ นอกจากนี้ยังได้โดยไม่ต้องรหัสอุปกรณ์Node 0x16เป็น

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.