O som mudo no fone de ouvido é desconectado?

9

Existe uma maneira de silenciar o som do meu computador toda vez que eu desconectar meus fones de ouvido (como um telefone faz) para parar o som e tocar meus alto-falantes?

    
por Dandyman 08.05.2012 / 14:40

4 respostas

8

Como detectar um desligamento

Basicamente, o que funcionou para mim foi:

# 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

Para mim, a diferença estava no 'Node 0x16' em 'Vals de Amp-Out':

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]

Então eu baseei a detecção na diferença encontrada.

Como desativar

Com esse conhecimento, você pode ter um script em execução em segundo plano. Se desconectados, os scripts silenciam seus alto-falantes, como amixer sset Master playback 0% (ou qualquer outro 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

Você pode torná-lo executável com chmod +x scriptname.sh e colocá-lo nos aplicativos de inicialização. Você terá que ajustar a detecção de desligamento, encontrando sua própria diferença em /proc/asound/card0/codec#0 (talvez até mesmo mude os números aqui para várias placas de som.

Links relacionados:

link

link

Como alterar automaticamente o nível de volume quando / conectando fones de ouvido?

    
por con-f-use 08.05.2012 / 15:38
0

Isso funcionou para mim no Ubuntu 14.04:

"com os auscultadores desligados, insira os auscultadores e aumente o volume. Remova os auscultadores e verifique o silêncio."

Crédito: RevDrStrangelove em link

    
por mcaleaa 02.12.2015 / 12:58
0

Para o ubuntu-16.10, fiz poucas alterações nesta resposta .

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
    
por Abhishek 11.10.2017 / 14:01
0

Se você tiver problemas com eventos pegando /etc/acpi/handler.sh , veja meu responder . Também é sem códigos de dispositivo como Node 0x16 .

    
por Kuzeyeu Siarhei 01.04.2018 / 13:47