web-dev-qa-db-fra.com

Son muet sur le casque débrancher?

Existe-t-il un moyen de mettre en sourdine le son de mon ordinateur chaque fois que je débranche mon casque (comme le fait un téléphone) pour arrêter le son puis la reproduction par mes haut-parleurs?

10
Dandyman

Comment détecter un débranchement

Fondamentalement, ce qui a fonctionné pour moi a été:

# 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

Pour moi, la différence était dans 'Node 0x16' sous '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]

J'ai donc basé la détection sur la différence trouvée.

Howto muet

Avec cette connaissance, vous pouvez avoir un script exécuté en arrière-plan. Si les scripts sont débranchés, vos haut-parleurs sont mis en sourdine, comme avec amixer sset Master playback 0% (ou toute autre commande).

#!/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

Vous pouvez le rendre exécutable avec chmod +x scriptname.sh et le placer dans les applications de démarrage. Vous devrez cependant ajuster la détection de débranchement en trouvant votre propre différence dans /proc/asound/card0/codec#0 (peut-être même changer les numéros ici pour plusieurs cartes son.

Liens connexes:

https://wiki.ubuntu.com/Audio/PreciseJackDetectionTesting

https://unix.stackexchange.com/questions/25776/detecting-headphone-connection-disconnection-in-linux

Comment changer automatiquement le volume quand on débranche/branche le casque?

10
con-f-use

Pour Ubuntu-16.10, j'ai apporté peu de changements dans ce réponse .

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
0
Abhishek

Si vous avez des problèmes avec des événements qui se bloquent dans /etc/acpi/handler.sh, voyez mon réponse . C'est aussi sans codes d'appareil comme Node 0x16.

0
Kuzeyeu Siarhei

Cela a fonctionné pour moi sur Ubuntu 14.04:

"avec le casque éteint le son. Insérez le casque et augmentez le volume. Retirez le casque et vérifiez si le son est coupé."

Crédit: RevDrStrangelove sur https://www.reddit.com/r/LifeProTips/comments/369k76/lpt_request_automaticly_mute_laptop_after_headset/

0
mcaleaa