Ativando o Botão Mic Mute e a Luz nos Thinkpads Lenovo

26

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

Então, eu tentei o xevcomando para monitorar o evento de imprensa, e essa chave não foi capturada.

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

SO e computador portátil

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

Módulo Thinkpad: X220 4290LY9

Patch do kernel para Arch Linux

Baixe aqui

FINALMENTE

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

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

margarida
fonte
Qual modelo da Lenovo?
Ish
@izx Thinkpad X220 4290LY9
daisy
Em vez de xevusar acpi-listenpara monitorar e pressionar, você deve obter algo parecido ibm/hotkey HKEY 00000080 0000101b. Poste esse código aqui.
Ish
@izx, sem sorte, mas eu podia ver outros botões, por exemplo VOL UP / vol para baixo, acho que vantage
daisy
Você tem uma luz embutida dentro do botão mudo? Também pressionar o botão algumas vezes e postar a saídadmesg|tail
ish

Respostas:

34

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

Além dos balões de notificação:

insira a descrição da imagem aquiinsira a descrição da imagem aqui

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) pisca para mostrar quando o mudo está ativado
  2. A luz do botão Sem áudio do microfone (laranja) ficará acesa ou apagada para mostrar o status do som (como no Windows)

    A solução 2 requer um thinkpad_acpimódulo do kernel 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 thinkpad_acpi por padrão ( consulte esta discussão para obter mais detalhes ).

Etapas comuns


uma. Determinando o código de tecla de atalho Mic-Mute e o dispositivo de entrada Mic

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

  • Em seguida amixer scontrols, execute , você verá um dos seguintes na saída:

Controle simples do mixer 'Internal Mic', 0

ou

Controle simples do mixer 'Capture', 0

Dependendo do que você vê, "Internal Mic" ou "Capture" é o seu dispositivo de entrada.

b. Crie o manipulador de eventos Mic-Mute ACPI

  • Abrir terminal, digite gksudo gedit /etc/acpi/events/lenovo-mutemicpara 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 :
    evento = ibm / tecla de atalho HKEY 00000080 0000101b
    ação = / 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 liga / desliga

  • Faça isso se desejar uma solução fácil e não desejar usar o módulo do kernel corrigido (consulte C-2).
  • Terminal aberto, tipo gksudo gedit /etc/acpi/lenovo-mutemic.sh
  • No editor, cole:

    #! / bin / bash
    INPUT_DEVICE = "'Microfone interno'"
    YOUR_USERNAME = "lugar_seu_usuário_aqui_aqui"
    se o amixer sget $ INPUT_DEVICE, 0 | grep '\ [on \]'; então
        amixer sset $ INPUT_DEVICE, 0 alternar
        eco "0 piscar"> / proc / acpi / ibm / led
        su $ YOUR_USERNAME -c 'DISPLAY = ": 0.0" notificação-envio -t 50 \
                -i microfone-sensibilidade-sem som-simbólico "Mic MUTED" '
    outro
        amixer sset $ INPUT_DEVICE, 0 alternar                       
        su $ YOUR_USERNAME -c 'DISPLAY = ": 0.0" notificação-envio -t 50 \
                -i microfone-sensibilidade-alto-simbólico "Mic ON" '
        eco "0 on"> / proc / acpi / ibm / led 
    fi
    
  • Substitua o valor da variável INPUT_DEVICE por Capturese esse for o nome do seu dispositivo de entrada (deixe todos os ticks intactos).

  • Substitua o 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 (no terminal):
    sudo chmod + x /etc/acpi/lenovo-mutemic.sh
    reinício acpid do serviço sudo
    
  • Vá para a seção Teste (d) para confirmar que funciona.

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

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 thinkpad_acpimódulo corrigido e foi verificado para funcionar com o Ubuntu Precise 12.04 e Quantal 12.10, kernels 3.2.0-23 e 3.2.0-24 e 3.5.0-21.
  • Vamos criar o script primeiro: /etc/acpi/lenovo-mutemic.shdeve ser como na seção c-1, com as seguintes adições:

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

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

    echo 1 > $MICMUTE
    
  • E após a segunda echo...linha, insira:

    echo 0 > $MICMUTE
    
  • Você pode encontrar um exemplo de como deve ser o script completo neste colar

  • Então:

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

Construindo, testando e instalando o módulo do kernel

  • Instale (ou garanta) que você possui os cabeçalhos e as ferramentas criadas para o kernel em execução no momento com:

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

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

    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" 
    
  • Aplique um patch (copie e cole 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 thinkpad_acpi.cque 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
    todos: make -C / lib / modules / $ (shell uname -r) / build M = $ (PWD) módulos
    limpar \ limpo: make -C / lib / modules / $ (shell uname -r) / compilação M = $ (PWD) limpa
  • Agora digite makepara criar o módulo; você verá um thinkpad_acpi.koarquivo 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 acenderá / apagará a luz laranja do microfone E a luz de energia piscando / acesa.

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

    TPDIR = / lib / modules / $ (uname -r) / kernel / drivers / plataforma / 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 led de energia lenovo-micmute.sh


d. Teste

  • Além da sua escolha de indicador, você também pode confirmar o mudo através do seguinte:

Entrada de microfone

  • 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 Silenciar na janela
    2. Bolhas de notificação (não aparecerão instantaneamente se você pressionar o microfone mudo mais de uma vez a cada poucos segundos!)
    3. O indicador escolhido: a luz do botão liga / desliga piscando ou a luz Mic Mute incorporada.
izx
fonte
Adicionado uma luz de energia piscando como indicador - impossível usar a luz real do microfone sem um kernel personalizado.
Ish
1
@ Andy: Eu adicionei um patch embutido em vez de baixar a fonte modificada. Por favor, procure a página de resposta Patch it withe você encontrará a sedlinha necessária para ativar o LED de silenciar o microfone.
Ish
2
Infelizmente, não posso mais compilar thinkpad_acpi.c. Makea saída está aqui . Alguém poderia me ajudar a resolver esse problema?
21713 Andrey
1
13.10 (Saucy) requer um thinkpad_acpi.c diferente. O patch permanece o mesmo da resposta original. Isso funcionou para mim em um kernel 3.11.0-15-genérico (e nos cabeçalhos correspondentes).
Daniel
1
Em 16.10, parece que a luz de silenciar o microfone se acende quando você usa o primeiro método e pressiona o botão silenciar, de modo que a luz de energia piscando não é mais necessária.
ExplodingKittens
0

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

Foi corrigido apenas adicionando 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 suas etapas na compilação do thinkpad_acpi.

Tudo em um Thinkpad T520 com NVS 4200M, Ubuntu 12.10. Ainda não reinicializei, mas testei com a etapa de teste que você descreveu e funciona com a ativação e desativação do LED mudo e, na verdade, desativá-lo (com a notificação). Pular a arma um pouco parece funcionar bem. Obrigado.

Bem reiniciado, o script em si funciona bem, sem som e sem som, mas eu não instalei o thinkpad_acpi corrigido ... oops

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


Para que a luz mostre se foi silenciada ou não na inicialização, em vez de quando o botão é pressionado pela primeira vez, salvei:

#!/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 em /etc/init.d/ e execute:

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 outro.

JQuantum
fonte
@andrey Isso pode ser uma pergunta idiota, mas você já tentou baixar, corrigir e compilar uma cópia limpa do thinkpad_acpi.c?
precisa saber é o seguinte