13

Is there a way of muting sound from my computer everytime I unplug my headphones (Like a phone does) to stop sound then playing out of my speakers?

Dandyman
  • 1,173

4 Answers4

11

Howto detect an unplug

Basically what worked for me was:

# 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

For me the difference was in 'Node 0x16' under '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]

So I based the detection on the difference found.

Howto mute

With this knowledge you can have a script running in the background. If unplugged the scripts mutes your speakers like using amixer sset Master playback 0% (or any other command).

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

You can make it executable with chmod +x scriptname.sh and put it in the startup applications. You will have to adjust the unplug detection though by finding your own difference in /proc/asound/card0/codec#0 (maybe even change the numbers here for multiple soundcards.

Related Links:

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

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

How to automatically change volume level when un-/plugging headphones?

con-f-use
  • 19,041
0

If you have problems with events catching in /etc/acpi/handler.sh see my answer. It's also without device codes as Node 0x16.

0

This worked for me on Ubuntu 14.04:

"with the headphones out mute it. Insert headphones and raise volume. Remove headphones and check for mute."

Credit: RevDrStrangelove on https://www.reddit.com/r/LifeProTips/comments/369k76/lpt_request_automaticly_mute_laptop_after_headset/

mcaleaa
  • 173
  • 1
  • 5
0

For ubuntu-16.10 I made few change in this answer.

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
  • 101
  • 1