Apakah ada cara mematikan suara dari komputer saya setiap kali saya mencabut headphone saya (Seperti halnya telepon) untuk menghentikan suara kemudian memutar keluar dari speaker saya?
Apakah ada cara mematikan suara dari komputer saya setiap kali saya mencabut headphone saya (Seperti halnya telepon) untuk menghentikan suara kemudian memutar keluar dari speaker saya?
Jawaban:
Pada dasarnya apa yang berhasil untuk saya adalah:
# 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
Bagi saya perbedaannya ada di 'Node 0x16' di bawah '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]
Jadi saya mendasarkan deteksi pada perbedaan yang ditemukan.
Dengan pengetahuan ini, Anda dapat menjalankan skrip di latar belakang. Jika dicabut, skrip akan membisukan pengeras suara Anda seperti menggunakan amixer sset Master playback 0%
(atau perintah lainnya).
#!/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
Anda dapat membuatnya dapat dieksekusi chmod +x scriptname.sh
dan memasukkannya ke dalam aplikasi startup. Anda harus menyesuaikan deteksi cabut dengan menemukan perbedaan Anda sendiri /proc/asound/card0/codec#0
(bahkan mungkin mengubah angka di sini untuk beberapa kartu suara.
Tautan yang berhubungan:
https://wiki.ubuntu.com/Audio/PreciseJackDetectionTesting
/unix/25776/detecting-headphone-connection-disconnection-in-linux
Bagaimana cara mengubah level volume secara otomatis saat melepas headphone?
while
loop tak terbatas (bahkan tanpa instruksi tidur sedikit) berjalan terus menerus di latar belakang jauh dari solusi yang ideal; ini adalah solusi yang jelek dan hacky, selain menjadi cpu dan pembunuh baterai. Saya mencobanya dan beralih dari situasi normal pemanfaatan cpu konstan 5% (dengan browser, spotify, terminal, IDE, Telegram, dan aplikasi lain terbuka) menjadi 45% penggunaan cpu konstan.
acpi_listen
, seperti yang disarankan dalam salah satu tautan dalam jawaban ini.
Ini bekerja untuk saya di Ubuntu 14.04:
"Dengan headphone mati, bisu. Masukkan headphone dan naikkan volume. Lepaskan headphone dan periksa bisu."
Kredit: RevDrStrangelove di https://www.reddit.com/r/LifeProTips/comments/369k76/lpt_request_automaticly_mute_laptop_after_headset/
Untuk ubuntu-16.10 saya membuat sedikit perubahan dalam jawaban ini .
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
Jika Anda memiliki masalah dengan peristiwa menarik /etc/acpi/handler.sh
lihat jawaban saya . Itu juga tanpa kode perangkat sebagai Node 0x16
.