Gibt es eine Möglichkeit, den Ton von meinem Computer jedes Mal stummzuschalten, wenn ich meine Kopfhörer ausstecke (wie bei einem Telefon), um den Ton zu stoppen und dann aus meinen Lautsprechern wiederzugeben?
Gibt es eine Möglichkeit, den Ton von meinem Computer jedes Mal stummzuschalten, wenn ich meine Kopfhörer ausstecke (wie bei einem Telefon), um den Ton zu stoppen und dann aus meinen Lautsprechern wiederzugeben?
Antworten:
Grundsätzlich funktionierte für mich:
# 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
Für mich war der Unterschied in 'Node 0x16' unter '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]
Also habe ich die Erkennung auf den gefundenen Unterschied gestützt.
Mit diesem Wissen können Sie ein Skript im Hintergrund ausführen. Wenn Sie den Stecker ziehen, schalten die Skripte Ihre Lautsprecher stumm wie bei Verwendung amixer sset Master playback 0%
(oder einem anderen Befehl).
#!/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
Sie können es ausführbar machen chmod +x scriptname.sh
und in die Startanwendungen einfügen. Sie müssen jedoch die Erkennung des Steckers anpassen, indem Sie Ihren eigenen Unterschied feststellen /proc/asound/card0/codec#0
(möglicherweise ändern Sie hier sogar die Nummern für mehrere Soundkarten.
Ähnliche Links:
https://wiki.ubuntu.com/Audio/PreciseJackDetectionTesting
/unix/25776/detecting-headphone-connection-disconnection-in-linux
Wie ändere ich automatisch die Lautstärke, wenn ich Kopfhörer aus- / stecke?
while
Endlosschleife (ohne eine kleine Schlafanweisung), das kontinuierlich im Hintergrund ausgeführt wird, ist keine ideale Lösung. Es ist eine hässliche und hackige Problemumgehung, zusätzlich zu einem CPU- und Batteriekiller. Ich habe es versucht und bin von einer normalen Situation mit einer konstanten CPU-Auslastung von 5% (bei geöffnetem Browser, Spotify, Terminal, IDE, Telegramm und anderen Apps) zu einer konstanten CPU-Auslastung von 45% übergegangen.
acpi_listen
, wie in einem der Links in dieser Antwort vorgeschlagen.
Dies funktionierte für mich unter Ubuntu 14.04:
"Wenn die Kopfhörer ausgeschaltet sind, schalten Sie sie stumm. Setzen Sie die Kopfhörer ein und erhöhen Sie die Lautstärke. Entfernen Sie die Kopfhörer und prüfen Sie, ob sie stummgeschaltet sind."
Bildnachweis: RevDrStrangelove unter https://www.reddit.com/r/LifeProTips/comments/369k76/lpt_request_automaticly_mute_laptop_after_headset/
Für Ubuntu-16.10 habe ich an dieser Antwort nur wenige Änderungen vorgenommen .
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
Wenn Sie Probleme mit Ereignissen haben, lesen /etc/acpi/handler.sh
Sie meine Antwort . Es ist auch ohne Gerätecodes als Node 0x16
.