Ton am Kopfhörer stumm schalten?

10

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?

Dandyman
quelle
1
Zugehöriger Link: unix.stackexchange.com/questions/25776/…
con-f-use
Ich habe hier eine Antwort ohne Verwendung von Endlosschleifen gepostet - askubuntu.com/a/1005144/470017
Al.G.

Antworten:

10

So erkennen Sie einen Stecker

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.

Howto stumm schalten

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.shund 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?

verwechseln
quelle
Dies funktioniert perfekt auf Mint 17.3. Vielen Dank!
Briscoooe
4
Ein Skript mit einer whileEndlosschleife (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.
LeartS
Diese Lösung ist ein schrecklich schlechter Bürger, wie @LearlS betont. Bitte tu das niemals. Verwenden Sie für eine Lösung für gute Bürger acpi_listen, wie in einem der Links in dieser Antwort vorgeschlagen.
Don Hatch
0

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
Abhishek
quelle
Sowohl diese Antwort als auch die Antwort, von der sie kam, sind schlechte Bürger. Sie scheinen zu funktionieren, aber sie belasten die Systemressourcen, die nicht skaliert werden können - führen Sie einige Programme wie dieses gleichzeitig aus, und es ruiniert das System. Bitte tu das niemals. Sie können stattdessen eine der Lösungen mit acpi_listen oder ähnlichem verwenden.
Don Hatch
0

Wenn Sie Probleme mit Ereignissen haben, lesen /etc/acpi/handler.shSie meine Antwort . Es ist auch ohne Gerätecodes als Node 0x16.

Kuzeyeu Siarhei
quelle