Esiste un modo per silenziare l'audio dal mio computer ogni volta che scollego le cuffie (come fa un telefono) per interrompere l'audio e poi riprodurlo dagli altoparlanti?
Esiste un modo per silenziare l'audio dal mio computer ogni volta che scollego le cuffie (come fa un telefono) per interrompere l'audio e poi riprodurlo dagli altoparlanti?
Risposte:
Fondamentalmente ciò che ha funzionato per me è stato:
# 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
Per me la differenza era in "Nodo 0x16" in "Valori di uscita":
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]
Quindi ho basato il rilevamento sulla differenza rilevata.
Con questa conoscenza puoi avere uno script in esecuzione in background. Se scollegato, gli script disattivano l'audio dei relatori come usando amixer sset Master playback 0%
(o qualsiasi altro 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
È possibile renderlo eseguibile con chmod +x scriptname.sh
e inserirlo nelle applicazioni di avvio. Dovrai regolare il rilevamento della disconnessione trovando la tua differenza in /proc/asound/card0/codec#0
(forse anche cambiare i numeri qui per più schede audio.
Link correlati:
https://wiki.ubuntu.com/Audio/PreciseJackDetectionTesting
/unix/25776/detecting-headphone-connection-disconnection-in-linux
Come modificare automaticamente il livello del volume quando si scollegano / si collegano le cuffie?
while
ciclo infinito (senza nemmeno una piccola istruzione di sonno) in esecuzione continuamente in background è tutt'altro che una soluzione ideale; è una soluzione brutta e burrascosa, oltre ad essere un cpu e un killer della batteria. L'ho provato e sono passato da una normale situazione di utilizzo costante del 5% della CPU (con browser, spotify, terminale, IDE, Telegram e altre app aperte) al 45% di utilizzo costante della CPU.
acpi_listen
, come suggerito in uno dei collegamenti in questa risposta.
Questo ha funzionato per me su Ubuntu 14.04:
"con le cuffie disattivate disattivarlo. Inserire le cuffie e aumentare il volume. Rimuovere le cuffie e verificare la disattivazione."
Credito: RevDrStrangelove su https://www.reddit.com/r/LifeProTips/comments/369k76/lpt_request_automaticly_mute_laptop_after_headset/
Per ubuntu-16.10 ho apportato poche modifiche a questa risposta .
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
Se riscontri problemi con gli eventi in corso, /etc/acpi/handler.sh
consulta la mia risposta . È anche senza codici dispositivo come Node 0x16
.