Como silenciar automaticamente os fones de ouvido desconectados? Ou como tocar o script bash no ouvinte de evento do sistema?

5

Minha vida seria mais fácil se o Ubuntu estivesse silenciando o sound cada vez que eu desconectar o headphones , já que toda vez que o ambiente é diferente (exemplo dia / noite), mas o mesmo volume de saída.

Eu posso descobrir o roteiro para isso, mas não sem interação com Ubuntu event listener . Eu não sei nada sobre isso até agora.

Eu aprecio a solução ou dica para qualquer assunto, mas não a instalação de qualquer package para algo tão simples, muitos deles estão fazendo update muito tempo + Eu gosto do meu sistema para ser possivelmente limpo ou fundamentado.

Na verdade, eu escreveria muito mais soluções que faltam com o conhecimento de reaction to events , como ajustar automaticamente as configurações do mouse USB na conexão (o que eles reinicializam?) ou habilitar automaticamente o modem GSM na conexão.

    
por Esamo 27.10.2014 / 00:29

3 respostas

4

Primeiro, abra o programa alsamixer no terminal (Ctrl + Alt + T).

Verifique se o automute está ativado. Você pode navegar para ele usando as teclas esquerda-direita e para cima para alternar o valor. Esc para sair.

Agora, se você silenciar o som sem fones de ouvido, conectar os fones de ouvido e desconectá-los novamente, o som dos alto-falantes deve ficar mudo. Pelo menos na minha máquina, com o Auto-Mute ativado, posso manter os alto-falantes silenciados, enquanto os fones de ouvido podem produzir som ao conectar.

    
por Sergiy Kolodyazhnyy 27.10.2014 / 08:10
1

Resposta curta

  1. Para ver as notificações, você precisa instalar o notify-osd sudo apt install notify-osd
  2. Crie um arquivo de texto <my_name>.sh no diretório /home/<user_name>/ . E adicione permissão de execução ao arquivo chmod +x /home/<user_name>/<my_name>.sh
  3. Cole o texto abaixo no arquivo <my_name>.sh

    #!/bin/bash
    acpi_listen | while IFS= read -r line;
    do
        if [ "$line" = "jack/headphone HEADPHONE plug" ]
        then
           amixer -D pulse set Master mute
           notify-send "headphones connected. Sound is muted"
        elif [ "$line" = "jack/headphone HEADPHONE unplug" ]
        then
           amixer -D pulse set Master mute
           notify-send "headphones disconnected.  Sound is muted"
        fi
    done
    
  4. Vá para o menu Configurações de inicialização do seu sistema linux (Ubuntu, Kubuntu, Xubuntu, etc). Defina /home/<user_name>/<my_name>.sh para autostart com o seu ambiente de desktop (xfce, KDE, Gnome, etc.).

Aviso! Se você usar o KDE, NÃO adicione o arquivo para "Start script before KDE" ou "Application" com bash /home/<user_name>/<my_name>.sh .
Use como script (cenário) e "Iniciar com o KDE" .
SE você já fez isso e pressione ctrl + alt + F2 , faça o login como usuário e exclua rm /home/<user_name>/<my_name>.sh . Se você não tiver permissões para excluir, remonte o disco antes de excluir mount -o remount, rw / .

Como editar o script

Alguns scripts de autostart de cache de sistemas baseados em linux. Isso significa que, mesmo que você edite /home/<user_name>/<my_name>.sh e logout / login ou restart do sistema, o script permanecerá o mesmo.
No KDE, você pode encontrar o link simbólico do script armazenado em cache em /home/<user_name>/.config/autostart-scripts/<my_name>.sh . Exclua o arquivo <my_name>.sh manualmente, logout / login system, adicione o script a autostart novamente e logout / login novamente.
Parece-me que é um bug do KDE . Eu não sei sobre outros DE (xfce, Gnome etc)

O que você precisa saber

Você pode ver o texto como "jack/headphone HEADPHONE plug" no código acima. É o nome do evento dos fones de ouvido.

Para ver eventos:
1. Digite o console acpi_listen
2. Conecte e desconecte fones de ouvido (ou outros dispositivos)
3. Você verá os nomes dos eventos no console . Será algo como um texto abaixo

    user@user-PC:~$ acpi_listen
    jack/headphone HEADPHONE unplug
    jack/microphone MICROPHONE unplug
    jack/headphone HEADPHONE plug
    jack/microphone MICROPHONE plug

Se os nomes dos eventos no script acima forem diferentes , substitua-os pelos nomes dos eventos da saída console .

ACPI e eventos

Para ver e testar eventos da ACPI, você pode usar evtest sudo apt install evtest

    user@user-PC:~$ sudo evtest
    No device specified, trying to scan all of /dev/input/event*
    Available devices:
    /dev/input/event0:      Lid Switch
    /dev/input/event1:      Power Button
    /dev/input/event2:      Power Button
    /dev/input/event3:      AT Translated Set 2 keyboard
    /dev/input/event4:      Video Bus
    /dev/input/event5:      SynPS/2 Synaptics TouchPad
    /dev/input/event6:      COMPANY USB Device
    /dev/input/event7:      COMPANY USB Device
    /dev/input/event8:      COMPANY USB Device
    /dev/input/event9:      HP Wireless hotkeys
    /dev/input/event10:     HDA Intel HDMI HDMI/DP,pcm=3
    /dev/input/event11:     HDA Intel HDMI HDMI/DP,pcm=7
    /dev/input/event12:     HDA Intel HDMI HDMI/DP,pcm=8
    /dev/input/event13:     HDA Intel HDMI HDMI/DP,pcm=9
    /dev/input/event14:     HDA Intel HDMI HDMI/DP,pcm=10
    /dev/input/event15:     HDA Intel PCH Mic
    /dev/input/event16:     HDA Intel PCH Headphone
    /dev/input/event17:     HP WMI hotkeys
    /dev/input/event18:     HP Webcam: HP Webcam
    Select the device event number [0-18]: 16
    Input driver version is 1.0.1
    Input device ID: bus 0x0 vendor 0x0 product 0x0 version 0x0
    Input device name: "HDA Intel PCH Headphone"
    Supported events:
    Event type 0 (EV_SYN)
    Event type 5 (EV_SW)
        Event code 2 (SW_HEADPHONE_INSERT) state 1
    Properties:
    Testing ... (interrupt to exit)
    Event: time 1522588668.319567, type 5 (EV_SW), code 2 (SW_HEADPHONE_INSERT), value 0
    Event: time 1522588668.319567, -------------- SYN_REPORT ------------                      
    Event: time 1522588670.035275, type 5 (EV_SW), code 2 (SW_HEADPHONE_INSERT), value 1       
    Event: time 1522588670.035275, -------------- SYN_REPORT ------------

Por alguns motivos, /etc/acpi/events/jack não funciona para mim. Possivelmente eu tenha a opção CONFIG_SND_HDA_INPUT_JACK incorreta. Para testar isso use

    sudo grep CONFIG_SND_HDA_INPUT_JACK /boot/config-$(uname -r)

Minha resposta é baseada em esta resposta.

    
por Kuzeyeu Siarhei 01.04.2018 / 13:39
0

Você pode automatizar isso configurando um ouvinte da ACPI para eventos de conexão / desconexão de fones de ouvido:

$ grep headphone /etc/acpi/handler.sh -A 11                                                                                                         
    jack/headphone)                                                                                                                                 
        case "" in
            plug)
                logger "Headphones plugged"
                amixer sset 'Headphone' 30%
                ;;
            unplug)
                logger "Headphones unplugged"
                amixer sset 'Speaker' 30%
                ;;
    esac
    ;;
$ systemctl restart acpid

Outra maneira:
Em vez de modificar /etc/acpi/handler.sh , você pode criar outro arquivo de configuração em /etc/acpi/events/ e especificar seu próprio script para manipular esses eventos. Use a configuração padrão como modelo:

$ cat /etc/acpi/events/anything                                                                                                                     
# Pass all events to our one handler script                                                                                                         
event=.*
action=/etc/acpi/handler.sh %e

Veja man acpid para mais detalhes.

    
por Al.G. 11.02.2018 / 14:38