¿Hay alguna forma de silenciar el sonido de mi computadora cada vez que desconecto mis auriculares (como lo hace un teléfono) para detener el sonido y luego reproducirlo en mis altavoces?
¿Hay alguna forma de silenciar el sonido de mi computadora cada vez que desconecto mis auriculares (como lo hace un teléfono) para detener el sonido y luego reproducirlo en mis altavoces?
Respuestas:
Básicamente lo que funcionó para mí fue:
# 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
Para mí, la diferencia estaba en 'Nodo 0x16' en 'Valles de salida de amplificador':
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]
Así que basé la detección en la diferencia encontrada.
Con este conocimiento, puede tener un script ejecutándose en segundo plano. Si está desconectado, los scripts silencian sus altavoces como si estuvieran usando amixer sset Master playback 0%
(o cualquier otro comando).
#!/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
Puede hacerlo ejecutable chmod +x scriptname.sh
y ponerlo en las aplicaciones de inicio. Sin embargo, tendrá que ajustar la detección de desconexión encontrando su propia diferencia /proc/asound/card0/codec#0
(quizás incluso cambie los números aquí para varias tarjetas de sonido.
Enlaces relacionados:
https://wiki.ubuntu.com/Audio/PreciseJackDetectionTesting
/unix/25776/detecting-headphone-connection-disconnection-in-linux
¿Cómo cambiar automáticamente el nivel de volumen al desconectar / enchufar los auriculares?
while
bucle infinito (sin siquiera una pequeña instrucción de suspensión) ejecutándose continuamente en segundo plano está lejos de ser una solución ideal; Es una solución fea y hacky, además de ser una CPU y un asesino de la batería. Lo probé y pasé de una situación normal de uso constante de CPU del 5% (con navegador, spotify, terminal, IDE, Telegram y otras aplicaciones abiertas) a un uso constante de CPU del 45%.
acpi_listen
, como se sugiere en uno de los enlaces de esta respuesta.
Esto funcionó para mí en Ubuntu 14.04:
"con los auriculares enmudecidos. Inserte los auriculares y suba el volumen. Quítese los auriculares y compruebe si hay silencio".
Crédito: RevDrStrangelove en https://www.reddit.com/r/LifeProTips/comments/369k76/lpt_request_automaticly_mute_laptop_after_headset/
Para ubuntu-16.10 hice pocos cambios en esta respuesta .
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
Si tiene problemas con los eventos de captura de /etc/acpi/handler.sh
ver a mi respuesta . También es sin códigos de dispositivo como Node 0x16
.