Ativando o botão do microfone Mute e luz no Lenovo Thinkpads

26

Eu tenho um botão de microfone mudo no meu Lenovo Thinkpad T420, mas não funciona.

Então, eu tentei o comando xev para monitorar o evento de impressão e essa chave não foi capturada.

Existe alguma maneira de corrigi-lo, como adicionar código-chave bruto?

SO & amp; Laptop

Ubuntu 12.04 , também espero que funcione no Arch Linux, mas não importa muito ;-P

Módulo Thinkpad: X220 4290LY9

Patch de kernel para o Arch Linux

Faça o download aqui

FINALMENTE

É um pouco complicado, mas com o patch do kernel e o script acpid, funciona agora.

O resto que eu preciso é de um daemon de notificação como o do mudo de saída, mas não importa muito agora.

    
por daisy 26.04.2012 / 15:29

2 respostas

34

Esta solução deve funcionar para todos os Thinkpads com um botão mudo que também tenha uma luz embutida. Pode também funcionar para outros Thinkpads.

Além das bolhas de notificação:

Existem dois possíveis indicadores de "hardware" (para mostrar que o mudo está ativado ou desativado):

  1. A luz do botão Liga / Desliga (verde) piscará para mostrar quando o mudo estiver ativado
  2. A luz do botão de microfone mudo (laranja) estará ligada ou desligada para mostrar o status do mudo (assim como no Windows)

    A solução 2 requer um módulo de kernel thinkpad_acpi corrigido e é recomendada apenas para usuários avançados que sabem o que estão fazendo. Isso ocorre porque o patch não é incluído pelos desenvolvedores do thinkpad_acpi por padrão, ( Veja esta discussão para mais detalhes ).

Etapas Comuns

a. Determinando o código da tecla de atalho do Mic-Mute e o dispositivo de entrada do microfone

  • Abra o terminal com Ctrl+Alt+T
  • Execute acpi_listen e pressione a tecla mudo
  • Observe o resultado, que deve ser algo como: ibm/hotkey HKEY 00000080 0000101b

  • Em seguida, execute amixer scontrols , você deve ver uma das seguintes opções na saída:

Simple mixer control 'Internal Mic',0

ou

Simple mixer control 'Capture',0

Dependendo do que você vê, "Microfone interno" ou "Captura" é o seu dispositivo de entrada.

b. Criar o manipulador de eventos ACPI Mic-Mute

  • Abra o terminal, digite gksudo gedit /etc/acpi/events/lenovo-mutemic para abrir o editor.
  • No editor, cole o seguinte, onde a primeira linha deve ser o código mostrado na seção anterior por acpi_listen :
    event=ibm/hotkey HKEY 00000080 0000101b
    action=/etc/acpi/lenovo-mutemic.sh
    
  • Salve e saia do editor.

Escolhendo os indicadores Power Light ou Mic Mute

c-1. Script Mic-Mute com indicador do Botão de Energia

  • Faça isso se você quiser uma solução fácil e não quiser usar o módulo de kernel corrigido (consulte C-2).
  • Abra o terminal, digite gksudo gedit /etc/acpi/lenovo-mutemic.sh
  • No editor, cole:

    #!/bin/bash
    INPUT_DEVICE="'Internal Mic'"
    YOUR_USERNAME="place_your_username_here"
    if amixer sget $INPUT_DEVICE,0 | grep '\[on\]' ; then
        amixer sset $INPUT_DEVICE,0 toggle
        echo "0 blink" > /proc/acpi/ibm/led
        su $YOUR_USERNAME -c 'DISPLAY=":0.0" notify-send -t 50 \
                -i microphone-sensitivity-muted-symbolic "Mic MUTED"'
    else
        amixer sset $INPUT_DEVICE,0 toggle                       
        su $YOUR_USERNAME -c 'DISPLAY=":0.0" notify-send -t 50 \
                -i microphone-sensitivity-high-symbolic "Mic ON"'
        echo "0 on" > /proc/acpi/ibm/led 
    fi
    
  • Substitua o valor da variável INPUT_DEVICE por Capture se esse for o nome do seu dispositivo de entrada (deixe todos os ticks intactos).

  • Substituir valor da variável YOUR_USERNAME pelo nome da conta do usuário para o qual você deseja enviar notificações
  • Salve e saia do editor.
  • Agora, execute o seguinte (do terminal):
    sudo chmod +x /etc/acpi/lenovo-mutemic.sh
    sudo service acpid restart
    
  • Ir para a seção Teste (d) para confirmar que funciona.

c-2. Mic-mudo com luz indicadora de microfilme oficial

Configurando o script

  • Por favor, não use este método se você não estiver familiarizado com o terminal / shell.
  • Isso exigirá a compilação de um módulo thinkpad_acpi corrigido e foi verificado que funciona com o Ubuntu Precise 12.04 e o Quantal 12.10, os kernels 3.2.0-23 e 3.2.0-24 e 3.5.0-21.
  • Vamos criar o script primeiro: /etc/acpi/lenovo-mutemic.sh deve ser como na seção c-1, com as seguintes adições:

  • Inserir esta linha após o cabeçalho ( #!/bin/bash ):

    MICMUTE=/sys/devices/platform/thinkpad_acpi/leds/tpacpi::micmute/brightness
    
  • Após a primeira linha echo... , insira:

    echo 1 > $MICMUTE
    
  • Depois da segunda linha echo... , insira:

    echo 0 > $MICMUTE
    
  • Você pode encontrar um exemplo do que o script completo deve ter nesta pasta

  • Então:

    sudo chmod +x /etc/acpi/lenovo-mutemic.sh
    sudo service acpid restart
    
  • Confirme que pressionar o botão mudo resulta em uma luz de energia piscando; pressionando novamente dá uma luz de energia constante.

Construindo, testando e instalando o módulo do kernel

  • Instale (ou garanta) que você tenha os cabeçalhos e ferramentas construídas para o seu kernel atualmente em execução com:

    sudo apt-get install linux-headers-$(uname -r) build-essential
    
  • Crie um diretório temporário e altere para ele:

    mkdir ~/tpacpi && cd ~/tpacpi
    
  • Faça o download do arquivo de origem thinkpad_acpi.c do repositório git do Kernel do Ubuntu:

    wget -Othinkpad_acpi.c "http://kernel.ubuntu.com/git?p=ubuntu/ubuntu-$(lsb_release -sc).git;\
    a=blob_plain;f=drivers/platform/x86/thinkpad_acpi.c;hb=HEAD" 
    
  • Corrigir com (copiar e colar a linha completa):

    sed -i -e 's/"tpacpi::thinkvantage",/"tpacpi::thinkvantage",\n\t"tpacpi::unknown_led4",\n\t"tpacpi::micmute",/g' -e 's/0x1081U/0x5081U/g' -e 's/0x1fffU/0x5fffU/g' thinkpad_acpi.c
    
  • Na mesma pasta em que thinkpad_acpi.c foi baixado, você precisará de um "Makefile". Você pode baixá-lo diretamente deste Pastebin , usando:

    wget -OMakefile http://pastebin.com/raw.php?i=ybpnxeUT
    

    OU cole o abaixo em um arquivo chamado Makefile :

    obj-m += thinkpad_acpi.o
    all: make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules
    clean: make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean
  • Agora digite make para criar o módulo; você verá um arquivo thinkpad_acpi.ko na pasta quando terminar.

  • Teste o módulo corrigido depois de carregá-lo com:

    sudo rmmod thinkpad_acpi && sudo insmod thinkpad_acpi.ko
    
  • Agora confirme que pressionar o botão do microfone ativará / desativará a luz laranja do microfone E a luz de energia piscará / ficará estável.

  • Se confirmado, faça o seguinte para substituir seu módulo thinkpad_acpi atual:

    TPDIR=/lib/modules/$(uname -r)/kernel/drivers/platform/x86
    sudo mv $TPDIR/thinkpad_acpi.ko $TPDIR/thinkpad_acpi.ko.stock
    sudo mv /where/you/built/it/tpacpi_micmute/thinkpad_acpi.ko $TPDIR/thinkpad_acpi.ko
    
  • Comente ou exclua as linhas de energia em lenovo-micmute.sh

d. Testando

  • Além da escolha do indicador, você também pode confirmar o mudo por meio do seguinte:

  • Clique no ícone de volume no canto superior direito e nas configurações de som na parte inferior:
  • Mude para o separador "Entrada".
  • Agora, divirta-se pressionando o botão Mic Mute, você deve vê-lo refletido em:

    1. A caixa de seleção Mudo na janela
    2. Bolhas de notificação (não aparecerão instantaneamente se você pressionar o microfone mudo mais de uma vez em alguns segundos!)
    3. O indicador escolhido: a luz do botão de energia piscando ou a luz interna do microfone Mute.
por izx 31.12.2012 / 14:24
0

Eu não consegui fazê-lo funcionar imediatamente no Ubuntu 12.10 pela primeira vez usando um ambiente de desktop Linux também.

Foi corrigido adicionando apenas aspas e removendo a vírgula (e adicionando meu nome de usuário):

#!/bin/bash
MICMUTE=/sys/devices/platform/thinkpad_acpi/leds/tpacpi::micmute/brightness

ID='"Internal Mic"'
USERNAME="" #put your username here
if amixer sget "$ID"ntenter code herernal Mic" 0 | grep '\[on\]' ; then
    amixer sset "$ID" 0 toggle
    #echo "0 blink" > /proc/acpi/ibm/led #related to blinking power
    echo 1 > $MICMUTE
    su $USERNAME -c 'DISPLAY=":0.0" notify-send -t 50 \
            -i microphone-sensitivity-muted-symbolic "Mic MUTED"'
    echo "MUTE ON"
else
    amixer sset "$ID" 0 toggle                       
    su $USERNAME -c 'DISPLAY=":0.0" notify-send -t 50 \
            -i microphone-sensitivity-high-symbolic "Mic ON"'
    #echo "0 on" > /proc/acpi/ibm/led 
    echo 0 > $MICMUTE
    echo "MUTE OFF"
fi

e, em seguida, seguiu seus passos na compilação do thinkpad_acpi.

Tudo em um Thinkpad T520 com NVS 4200M, Ubuntu 12.10. Ainda não reiniciei, mas testei com o passo de teste que você delineou e ele funciona com a ativação e desativação do LED mudo e a desativação (com a notificação). Saltar a arma parece funcionar bem. Obrigado.

Bem reiniciado, o script em si funciona bem em silêncio e não mudo, mas eu não instalei o patchpad_acpi corrigido ... oops

Ok, reinicie novamente depois de instalá-lo corretamente desta vez e o LED acende também. Provavelmente deve ter um script de inicialização para verificar se o microfone está mudo ou não e ligar / desligar a luz, já que a configuração atual apenas ligará / desligará a luz quando o botão for pressionado.

Para que a luz apareça se estiver sem som ou não na inicialização, em vez de quando o botão é pressionado pela primeira vez, acabei de salvar:

#!/bin/bash
MICMUTE=/sys/devices/platform/thinkpad_acpi/leds/tpacpi::micmute/brightness
if amixer sget "Internal Mic" 0 | grep '\[on\]' ; then
    echo 0 > $MICMUTE
elif amixer sget "Internal Mic" 0 | grep '\[off\]' ; then
    echo 1 > $MICMUTE
else
    echo "No Mic Detected";
fi

Deu permissão para executar

sudo chmod +x /etc/init.d/lenovo-mic-check

Como lenovo-mic-check para /etc/init.d/ e depois correu:

sudo update-rc.d lenovo-mic-check defauts 98 02

Também não se esqueça de copiar para /etc/pm/sleep.d /

sudo cp /etc/init.d/lenovo-mic-check /etc/pm/sleep.d/lenovo-mic-check

Agora, a luz está acesa, se eu reiniciar o computador, NOTA: o segundo, se poderia ser apenas um outro.

    
por JQuantum 08.04.2013 / 09:01