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?
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?
Câu trả lời:
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.
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.sh
và đư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?
while
vò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.
acpi_listen
, như được đề xuất trong một trong các liên kết trong câu trả lời này.
Điều này làm việc cho tôi trên Ubuntu 14.04:
"với tai nghe tắt tiếng. Chèn tai nghe và tăng âm lượng. Tháo tai nghe và kiểm tra tắt tiếng."
Tín dụng: RevDrStrangelove trên https://www.reddit.com/r/LifeProTips/comments/369k76/lpt numquest_automaticly_mute_l mỏi_after_headset /
Đố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
Nếu bạn có vấn đề với các sự kiện bắt /etc/acpi/handler.sh
gặ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
.