Sesi durdurmak ve hoparlörlerimden çalmak için kulaklıklarımı her çıkardığımda (telefonun yaptığı gibi) bilgisayarımdan sesi kısmanın bir yolu var mı?
Sesi durdurmak ve hoparlörlerimden çalmak için kulaklıklarımı her çıkardığımda (telefonun yaptığı gibi) bilgisayarımdan sesi kısmanın bir yolu var mı?
Yanıtlar:
Temelde benim için işe yarayan şuydu:
# 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
Benim için fark 'Amp-Out vals' altındaki 'Node 0x16' idi:
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]
Bu yüzden tespit edilen farkı buldum.
Bu bilgi ile arka planda çalışan bir komut dosyası olabilir. Çıkarılmışsa, komut dosyaları hoparlörlerinizi amixer sset Master playback 0%
(veya başka bir komutu) kullanmak üzere kapatır .
#!/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
İle çalıştırılabilir hale getirebilir chmod +x scriptname.sh
ve başlangıç uygulamalarına koyabilirsiniz. Fiş algılamasını kendi farkınızı bularak ayarlamanız gerekecektir /proc/asound/card0/codec#0
(hatta birden fazla ses kartı için buradaki sayıları değiştirebilirsiniz).
İlgili Bağlantılar:
https://wiki.ubuntu.com/Audio/PreciseJackDetectionTesting
/unix/25776/detecting-headphone-connection-disconnection-in-linux
Kulaklıkları çıkarırken / çıkarırken ses seviyesi otomatik olarak nasıl değiştirilir?
while
Arka planda sürekli çalışan sonsuz döngülü (az bir uyku talimatı olmadan) bir senaryoya sahip olmak ideal bir çözümden uzaktır; cpu ve pil katili olmanın yanı sıra çirkin ve çirkin bir çözüm. Denedim ve sürekli% 5 cpu kullanımı (tarayıcı, spotify, terminal, IDE, Telegram ve diğer uygulamalar açıkken) normal bir durumdan% 45 sabit cpu kullanımına geçtim.
acpi_listen
bu yanıttaki bağlantılardan birinde önerildiği gibi kullanın .
Bu benim için Ubuntu 14.04'te çalıştı:
"kulaklıklar sustuktan sonra. Kulaklık takın ve ses seviyesini yükseltin. Kulaklıkları çıkarın ve sesini kontrol edin."
Kredi: RevDrStrangelove https://www.reddit.com/r/LifeProTips/comments/369k76/lpt_request_automaticly_mute_laptop_after_headset/ adresinde
Ubuntu-16.10 için bu cevapta çok az değişiklik yaptım .
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
Eğer varsa olaylarla sorunları içinde alıcı /etc/acpi/handler.sh
benim bkz cevabı . Ayrıca bu cihaz kodları olmadan olarak Node 0x16
.