Habilitación del botón y la luz Mic Mute en los Thinkpads de Lenovo

26

Tengo un botón de silencio de micrófono en mi Lenovo Thinkpad T420, pero no funciona.

Así que intenté el xevcomando para monitorear el evento de prensa, y esa clave no fue capturada.

¿Hay alguna forma de solucionarlo, como agregar un código de clave sin procesar?

SO y computadora portátil

Ubuntu 12.04 , también espero que funcione en Arch Linux, pero no importa mucho ;-P

Módulo Thinkpad: X220 4290LY9

Parche de kernel para Arch Linux

Descarga aquí

FINALMENTE

Es un poco complicado, pero con el parche del núcleo y el script acpid, funciona ahora.

El resto que necesito es un demonio de notificación como el de salida silenciada, pero ahora no importa mucho.

margarita
fuente
¿Qué modelo de Lenovo?
ish
@izx Thinkpad X220 4290LY9
daisy
En lugar de xevusar acpi-listenpara monitorear y presionar, debería obtener algo como ibm/hotkey HKEY 00000080 0000101b. Por favor, publique ese código aquí.
ish
@izx, no tuve suerte, pero pude ver otros botones, por ejemplo, subir / bajar volumen, pensar en ventaja
daisy
¿Tiene una luz incorporada dentro del botón de silencio? También presione el botón un par de veces y después de la salida dedmesg|tail
ish

Respuestas:

34

Esta solución debería funcionar para todos los Thinkpads con un botón de silencio que también tiene una luz incorporada. También puede funcionar para otros Thinkpads.

Aparte de las burbujas de notificación:

ingrese la descripción de la imagen aquíingrese la descripción de la imagen aquí

Hay dos posibles indicadores de "hardware" (para mostrar que el silencio está activado o desactivado):

  1. La luz del botón de Encendido (verde) parpadeará para mostrar cuando el silencio está activado
  2. La luz del botón de silencio del micrófono (naranja) se encenderá o apagará para mostrar el estado de silencio (al igual que en Windows)

    La solución 2 requiere un thinkpad_acpimódulo de kernel parcheado , y solo se recomienda para usuarios avanzados que saben lo que están haciendo. Esto se debe a que los desarrolladores de thinkpad_acpi no incluyen el parche de forma predeterminada ( consulte esta discusión para obtener más detalles ).

Pasos comunes


a. Determinación del código de la tecla de acceso rápido Mic-Mute y del dispositivo de entrada Mic

  • Terminal abierto con Ctrl+Alt+T
  • Corre acpi_listeny presiona la tecla de silencio
  • Tenga en cuenta el resultado, que debería ser algo como: ibm/hotkey HKEY 00000080 0000101b

  • Luego amixer scontrols, ejecute , debería ver uno de los siguientes en la salida:

Control de mezclador simple 'Internal Mic', 0

o

Control de mezclador simple 'Capture', 0

Dependiendo de lo que vea, "Internal Mic" o "Capture" es su dispositivo de entrada.

si. Crear el controlador de eventos ACPI Mic-Mute

  • Abrir terminal, escriba gksudo gedit /etc/acpi/events/lenovo-mutemicpara abrir el editor.
  • En el editor, pegue lo siguiente, donde la primera línea debe ser el código que se muestra en la sección anterior por acpi_listen:
    evento = ibm / tecla de acceso rápido HKEY 00000080 0000101b
    acción = / etc / acpi / lenovo-mutemic.sh
    
  • Guarde y salga del editor.

Elección de los indicadores Power Power o Mic Mute


c-1. Script de silencio de micrófono con indicador de botón de encendido

  • Haga esto si desea una solución fácil y no desea utilizar el módulo de kernel parcheado (consulte C-2).
  • Terminal abierto, tipo gksudo gedit /etc/acpi/lenovo-mutemic.sh
  • En el editor, pegue:

    #! / bin / bash
    INPUT_DEVICE = "'Micrófono interno'"
    YOUR_USERNAME = "place_your_username_here"
    si amixer gana $ INPUT_DEVICE, 0 | grep '\ [on \]'; luego
        amixer sset $ INPUT_DEVICE, 0 alternar
        echo "0 parpadeo"> / proc / acpi / ibm / led
        su $ YOUR_USERNAME -c 'DISPLAY = ": 0.0" notificar-enviar -t 50 \
                -i micrófono-sensibilidad-silenciado-simbólico "Mic MUTED"
    más
        amixer sset $ INPUT_DEVICE, 0 alternar                       
        su $ YOUR_USERNAME -c 'DISPLAY = ": 0.0" notificar-enviar -t 50 \
                -i micrófono-sensibilidad-alto-simbólico "Mic ON" '
        echo "0 en"> / proc / acpi / ibm / led 
    fi
    
  • Reemplace el valor de la variable INPUT_DEVICE con Capturesi ese es el nombre de su dispositivo de entrada (deje todos los ticks intactos).

  • Reemplace el valor de la variable YOUR_USERNAME con el nombre de la cuenta del usuario al que desea enviar notificaciones
  • Guarde y salga del editor.
  • Ahora ejecute lo siguiente (desde la terminal):
    sudo chmod + x /etc/acpi/lenovo-mutemic.sh
    servicio sudo reinicio acpid
    
  • Vaya a la sección Prueba (d) para confirmar que funciona.

c-2. Mic-mute con luz indicadora oficial de mute

Configurar el guión

  • No utilice este método si no está familiarizado con el terminal / shell.
  • Esto requerirá compilar un thinkpad_acpimódulo parcheado y se ha verificado que funciona con Ubuntu Precise 12.04 y Quantal 12.10, kernels 3.2.0-23 y 3.2.0-24 y 3.5.0-21.
  • Primero creemos el script: /etc/acpi/lenovo-mutemic.shdebe ser como en la sección c-1, con las siguientes adiciones:

  • Inserte esta línea después del encabezado ( #!/bin/bash):

    MICMUTE=/sys/devices/platform/thinkpad_acpi/leds/tpacpi::micmute/brightness
    
  • Después de la primera echo...línea, inserte:

    echo 1 > $MICMUTE
    
  • Y después de la segunda echo...línea, inserte:

    echo 0 > $MICMUTE
    
  • Puede encontrar un ejemplo de cómo debería verse el script completo en esta pasta

  • Luego:

    sudo chmod +x /etc/acpi/lenovo-mutemic.sh
    sudo service acpid restart
    
  • Confirme que presionar el botón de silencio produce una luz de encendido parpadeante; presionar nuevamente da una luz de encendido constante.

Construyendo, probando e instalando el módulo del núcleo

  • Instale (o asegúrese) que tiene los encabezados y las herramientas integradas para su núcleo actualmente en ejecución con:

    sudo apt-get install linux-headers-$(uname -r) build-essential
    
  • Haga un directorio temporal y cámbielo:

    mkdir ~/tpacpi && cd ~/tpacpi
    
  • Descargue el archivo fuente thinkpad_acpi.cdel repositorio git de 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" 
    
  • Parchelo con (copie y pegue la línea 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
    
  • En la misma carpeta donde thinkpad_acpi.cse descargó, necesitará un "Makefile". Puede descargarlo directamente desde este Pastebin , utilizando:

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

    O pegue el siguiente en un archivo llamado Makefile:

    obj-m + = thinkpad_acpi.o
    todos: make -C / lib / modules / $ (shell uname -r) / build M = $ (PWD) módulos
    limpiar: make -C / lib / modules / $ (shell uname -r) / build M = $ (PWD) clean
  • Ahora escriba makepara crear el módulo; verá un thinkpad_acpi.koarchivo en la carpeta cuando haya terminado.

  • Pruebe el módulo parcheado después de cargarlo con:

    sudo rmmod thinkpad_acpi && sudo insmod thinkpad_acpi.ko
    
  • Ahora confirme que al presionar el botón del micrófono se encenderá / apagará la luz naranja del micrófono Y la luz de encendido parpadeará / permanecerá fija.

  • Si se confirma, haga lo siguiente para reemplazar su thinkpad_acpimódulo actual :

    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 o elimine las líneas de alimentación en lenovo-micmute.sh


re. Pruebas

  • Además de su elección de indicador, también puede confirmar el silencio mediante lo siguiente:

Entrada de micrófono

  • Haga clic en el icono de volumen en la esquina superior derecha y en la configuración de sonido en la parte inferior:
  • Cambie a la pestaña "Entrada".
  • Ahora diviértete presionando el botón Mic Mute, deberías verlo reflejado en:

    1. La casilla de verificación Silencio en la ventana
    2. Burbujas de notificación (¡no aparecerán instantáneamente si presiona Mic Mute más de una vez cada pocos segundos!)
    3. Su indicador elegido: la luz del botón de encendido parpadeante o la luz de silencio del micrófono incorporada.
izx
fuente
Se agregó una luz de encendido intermitente como indicador, imposible de usar la luz de micrófono real sin un núcleo personalizado.
ish
1
@Andrey: He agregado un parche en línea en lugar de descargar la fuente modificada. Busque en la página de respuestas Patch it withy encontrará la sedlínea necesaria para activar el LED de silencio del micrófono.
ish
2
Desafortunadamente, no puedo compilar thinkpad_acpi.cmás. MakeLa salida está aquí . ¿Podría alguien, por favor, ayudarme a resolver este problema?
Andrey
1
13.10 (Saucy) requiere un thinkpad_acpi.c diferente. El parche sigue siendo el mismo que en la respuesta original. Esto funcionó para mí en un núcleo genérico 3.11.0-15 (y los encabezados correspondientes).
Daniel
1
En 16.10, parece que la luz de silencio del micrófono se enciende cuando usa el primer método y presiona el botón de silencio, por lo que la luz de encendido parpadeante ya no es necesaria.
ExplodingKittens
0

No pude hacerlo funcionar de inmediato en Ubuntu 12.10 por primera vez usando un entorno de escritorio Linux también.

Se solucionó simplemente agregando comillas y eliminando la coma (y agregando mi nombre de usuario):

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

y luego seguí tus pasos para compilar thinkpad_acpi.

Todo en un Thinkpad T520 con NVS 4200M, Ubuntu 12.10. Todavía no se ha reiniciado, pero lo probé con el paso de prueba que describió y funciona al encender y apagar el LED de silencio y en realidad lo silencia (con la notificación). Saltar un poco el arma parece funcionar bien. Gracias.

Bien reiniciado, el script en sí funciona bien silenciando y sin silenciar, pero no instalé el thinkpad_acpi parcheado ... oops

Bien, reinicia nuevamente después de instalarlo correctamente esta vez y el LED también se ilumina. Probablemente debería tener una secuencia de comandos de inicio para verificar si el micrófono está silenciado o no y encender / apagar la luz, ya que la configuración actual solo encenderá / apagará la luz cuando se presione el botón.


Para que la luz muestre si se ha silenciado o no al inicio en lugar de cuando se presiona el botón por primera vez, acabo de guardar:

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

Le dio permiso para ejecutar

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

Como lenovo-mic-check a /etc/init.d/ y luego ejecutó:

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

Tampoco olvides copiar a /etc/pm/sleep.d/

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

Ahora la luz está encendida si reinicio la computadora, NOTA: la segunda si podría ser otra cosa.

JQuantum
fuente
@andrey Esto podría ser una pregunta tonta, pero ¿has intentado descargar, parchar y compilar una copia limpia de thinkpad_acpi.c?
JQuantum