Tắt âm thanh trên tai nghe?


10

Có cách nào tắt âm thanh từ máy tính của tôi mỗi khi tôi rút tai nghe ra (Giống như điện thoại không) để dừng âm thanh sau đó phát ra khỏi loa?




Tôi đã đăng một câu trả lời mà không sử dụng các vòng lặp vô hạn ở đây - askubfox.com/a/1005144/470017
Al.G.

Câu trả lời:


10

Cách phát hiện rút phích cắm

Về cơ bản những gì làm việc cho tôi là:

# 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

Đối với tôi, sự khác biệt là trong 'Nút 0x16' trong 'Vals-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]

Vì vậy, tôi dựa trên sự phát hiện về sự khác biệt được tìm thấy.

Cách tắt tiếng

Với kiến ​​thức này, bạn có thể có một kịch bản chạy trong nền. Nếu rút phích cắm các tập lệnh tắt tiếng loa của bạn như sử dụng amixer sset Master playback 0%(hoặc bất kỳ lệnh nào khác).

#!/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

Bạn có thể làm cho nó thực thi được chmod +x scriptname.shvà đưa nó vào các ứng dụng khởi động. Bạn sẽ phải điều chỉnh phát hiện rút phích cắm bằng cách tìm sự khác biệt của riêng bạn /proc/asound/card0/codec#0(thậm chí có thể thay đổi số ở đây cho nhiều soundcard.

Liên kết liên quan:

https://wiki.ubfox.com/Audio/PreciseJackDetectionTesting

/unix/25776/detecting-headphone-connection-disconnection-in-linux

Làm cách nào để tự động thay đổi mức âm lượng khi hủy / cắm tai nghe?


Điều này hoạt động hoàn hảo trên Mint 17.3. Cảm ơn!
Briscoooe

4
Có một kịch bản với một whilevòng lặp vô hạn (thậm chí không có một chút hướng dẫn về giấc ngủ) chạy liên tục trong nền là một giải pháp lý tưởng; đó là một cách giải quyết xấu xí và táo bạo, ngoài việc là một kẻ giết người cpu và pin. Tôi đã thử nó và đi từ một tình huống bình thường về việc sử dụng cpu 5% không đổi (với trình duyệt, spotify, terminal, IDE, Telegram và các ứng dụng khác mở) đến 45% sử dụng cpu không đổi.
LeartS

Giải pháp này là một công dân tồi tệ khủng khiếp, như @LearlS chỉ ra. Xin đừng bao giờ làm điều này. Đối với một giải pháp công dân tốt, sử dụng acpi_listen, như được đề xuất trong một trong các liên kết trong câu trả lời này.
Don nở


0

Đối với Ubuntu-16.10 tôi đã thực hiện một vài thay đổi trong câu trả lời này .

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

Cả câu trả lời này và câu trả lời nó đến từ những công dân xấu. Chúng có vẻ hoạt động, nhưng chúng hog tài nguyên hệ thống không mở rộng - chạy một vài chương trình như thế này cùng một lúc và nó phá hỏng hệ thống. Xin đừng bao giờ làm điều này. Bạn có thể sử dụng một trong những giải pháp liên quan đến acpi_listen hoặc tương tự.
Don nở

0

Nếu bạn có vấn đề với các sự kiện bắt /etc/acpi/handler.shgặp hãy xem câu trả lời của tôi . Nó cũng không có mã thiết bị như Node 0x16.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.