web-dev-qa-db-fra.com

Activation du bouton Mic Mute et du témoin Lenovo Thinkpads

J'ai un bouton de sourdine sur mon Lenovo Thinkpad T420, mais cela ne fonctionne pas.

J'ai donc essayé la commande xev pour surveiller l'événement de presse, et cette clé n'a pas été capturée.

Y a-t-il un moyen de le réparer, comme d'ajouter un code de clé brut?

OS & Laptop

Ubuntu 12.04, espérons également que cela fonctionne sous Arch Linux, mais cela n'a pas beaucoup d'importance ;-P

Module Thinkpad: X220 4290LY9

Patch du noyau pour Arch Linux

Télécharger ici

FINALEMENT

C'est un peu délicat, mais avec le correctif du noyau et le script acpid, cela fonctionne maintenant.

Le reste dont j'ai besoin est un démon de notification tel que celui de la sortie muette, mais peu importe maintenant.

26
daisy

Cette solution devrait fonctionner pour tous les Thinkpads avec un bouton de sourdine qui possède également une lumière intégrée. Cela peut également fonctionner pour d'autres Thinkpads.

Outre les bulles de notification:

enter image description hereenter image description here

Il existe deux indicateurs "matériels" possibles (pour indiquer que la sourdine est activée ou désactivée):

  1. Le voyant du bouton d'alimentation (vert) clignotera pour indiquer que la sourdine est activée
  2. Le voyant du bouton de sourdine du micro (orange) s'allume ou s'éteint pour indiquer l'état de la sourdine (comme sous Windows).

    La solution 2 nécessite un module de noyau thinkpad_acpi corrigé et est uniquement recommandée aux utilisateurs avancés qui savent ce qu’ils font. Cela est dû au fait que le correctif n’est pas inclus par défaut par les développeurs thinkpad_acpi (( Voir cette discussion pour plus de détails ).

Étapes communes


une. Détermination du code de touche de raccourci Mic-Mute et du périphérique d'entrée Mic

  • Ouvrez le terminal avec Ctrl+Alt+T
  • Exécutez acpi_listen et appuyez sur la touche secret
  • Notez le résultat, qui devrait ressembler à ceci: ibm/hotkey HKEY 00000080 0000101b

  • Puis exécutez amixer scontrols, vous devriez voir l'un des éléments suivants dans la sortie:

 Commande de mixage simple 'Internal Mic', 0 

ou

 Commande de mixage simple 'Capture', 0 

Selon ce que vous voyez, "Internal Mic" ou "Capture" est votre périphérique d'entrée.

b. Créer le gestionnaire d'événements ACPI Mic-Mute

  • Terminal ouvert, tapez gksudo gedit /etc/acpi/events/lenovo-mutemic pour ouvrir l'éditeur.
  • Dans l'éditeur, collez ce qui suit, où la première ligne devrait être le code indiqué dans la section précédente par acpi_listen:
     événement = ibm/raccourci clavier HKEY 00000080 0000101b 
     action =/etc/acpi/lenovo-mutemic.sh 
    
  • Enregistrez et quittez l'éditeur.

Choix des indicateurs Power Light ou Mic Mute


c-1. Script Mic-Mute avec indicateur de bouton d'alimentation

  • Faites cela si vous voulez une solution simple et que vous ne voulez pas utiliser le module de noyau patché (voir C-2).
  • Terminal ouvert, tapez gksudo gedit /etc/acpi/lenovo-mutemic.sh
  • Dans l'éditeur, collez:

    .] grep '\ [sur \]'; then 
     amixer sset $ INPUT_DEVICE, 0 bascule 
     echo "0 clignotement"> /proc/acpi/ibm/led
     su $ YOUR_USERNAME -c 'DISPLAY = ": 0.0" notifier -send -t 50\
     -i microphone-sensibilité-sourdine-symbolique "Mic MUTED" '
     sinon 
     réglage de mixage $ INPUT_DEVICE, 0 bascule 
     su $ YOUR_USERNAME -c 'DISPLAY = ": 0.0" notifier-envoyer -t 50\
     -I sensibilité du microphone hautement symbolique "Mic ON"'. 
     Echo "0 sur">/proc/acpi/ibm/led 
     fi 
    
  • Remplacez la valeur de la variable INPUT_DEVICE par Captures'il s'agit de votre nom de périphérique en entrée (laissez toutes les graduations intactes).

  • Remplacez la valeur de la variable YOUR_USERNAME par le nom de compte de l'utilisateur auquel vous souhaitez envoyer des notifications
  • Enregistrez et quittez l'éditeur.
  • Maintenant, lancez ce qui suit (depuis le terminal):
     Sudo chmod + x /etc/acpi/lenovo-mutemic.sh
    Sudo service acpid restart 
    
  • Passez à la section Testing (d) pour vérifier que cela fonctionne.

c-2. Mic-mute avec voyant officiel Mic-mute

Mise en place du script

  • Veuillez ne pas utiliser cette méthode si vous n'êtes pas familiarisé avec le terminal/Shell.
  • Cela nécessitera la compilation d'un module correctif thinkpad_acpi et il a été vérifié que celui-ci fonctionne avec Ubuntu Precise 12.04 et Quantal 12.10, dans les noyaux 3.2.0-23, 3.2.0-24 et 3.5.0-21.
  • Créons d'abord le script: /etc/acpi/lenovo-mutemic.sh devrait être comme dans la section c-1, avec les ajouts suivants:

  • Insérer cette ligne après l'en-tête (#!/bin/bash):

    MICMUTE=/sys/devices/platform/thinkpad_acpi/leds/tpacpi::micmute/brightness
    
  • Après la première ligne echo..., insérez:

    echo 1 > $MICMUTE
    
  • Et après la deuxième ligne echo..., insérez:

    echo 0 > $MICMUTE
    
  • Vous pouvez trouver un exemple de ce à quoi le script complet devrait ressembler dans cette pâte

  • Ensuite:

    Sudo chmod +x /etc/acpi/lenovo-mutemic.sh
    Sudo service acpid restart
    
  • Confirmez que le fait d’appuyer sur le bouton de sourdine allume le voyant d’alimentation clignotant; appuyez à nouveau pour allumer le voyant.

Construire, tester et installer le module du noyau

  • Installez (ou assurez-vous) que vous avez les en-têtes et les outils construits pour votre noyau en cours d'exécution avec:

    Sudo apt-get install linux-headers-$(uname -r) build-essential
    
  • Créez un répertoire temporaire et changez-le:

    mkdir ~/tpacpi && cd ~/tpacpi
    
  • Téléchargez le fichier source thinkpad_acpi.c à partir du référentiel git 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" 
    
  • Corrigez le avec (copiez et collez la ligne complète):

    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
    
  • Dans le même dossier où thinkpad_acpi.c a été téléchargé, vous aurez besoin d'un "Makefile". Vous pouvez le télécharger directement depuis ce Pastebin , en utilisant:

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

    OU collez le texte ci-dessous dans un fichier nommé Makefilename__:

     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
  • Maintenant, tapez makepour créer le module; vous verrez un fichier thinkpad_acpi.ko dans le dossier lorsque vous avez terminé.

  • Testez le module corrigé après l'avoir chargé avec:

    Sudo rmmod thinkpad_acpi && Sudo insmod thinkpad_acpi.ko
    
  • Confirmez maintenant que le fait d'appuyer sur le bouton micro allume/éteint la lumière orange du microphone ET que le voyant d'alimentation clignote/reste allumé.

  • Si cela est confirmé, procédez comme suit pour remplacer votre module actuel thinkpad_acpi:

     TPDIR =/lib/modules/$ (uname -r)/kernel/drivers/platform/x86 
     Calculez le processus à l'aide de $ TPDIR/thinkpad_acpi.ko $ TPDIR/thinkpad_acpi.ko.stock 
     Sudo mv /where/you/built/it/tpacpi_micmute/thinkpad_acpi.ko $ TPDIR/thinkpad_acpi.ko 
    
  • Commentez ou supprimez les lignes de leds d'alimentation dans lenovo-micmute.sh


ré. Essai

  • Outre le choix de votre indicateur, vous pouvez également confirmer la mise en sourdine via les éléments suivants:

Mic Input

  • Cliquez sur l'icône de volume en haut à droite et les paramètres de son en bas:
  • Passez à l'onglet "Entrée".
  • Maintenant amusez-vous en appuyant sur le bouton Mic Mute, vous devriez le voir reflété dans:

    1. La case à cocher Muet dans la fenêtre
    2. Bulles de notification (n'apparaîtra pas instantanément si vous appuyez plusieurs fois sur le bouton Mic Mute toutes les quelques secondes!)
    3. Votre indicateur choisi: le témoin d'alimentation clignotant ou le voyant intégré Mic Mute.
34
ish

Je ne pouvais pas le faire fonctionner immédiatement sur Ubuntu 12.10 pour la première fois en utilisant un environnement de bureau Linux.

Il a été résolu en ajoutant simplement des guillemets et en supprimant la virgule (et en ajoutant mon nom d'utilisateur):

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

et ensuite suivi vos étapes dans la compilation du thinkpad_acpi.

Le tout sur un Thinkpad T520 avec NVS 4200M, Ubuntu 12.10. Je n'ai pas encore redémarré, mais j'ai testé avec l'étape de test que vous avez décrite et cela fonctionne avec l'allumage et l'extinction de la DEL de mise en sourdine et sa mise en sourdine (avec la notification). Sauter un peu l'arme semble fonctionner correctement. Merci.

Bien redémarré, le script lui-même fonctionne très bien, mais je n’ai pas installé le correctif thinkpad_acpi ... oups

D'accord, redémarrez à nouveau après l'avoir installé correctement cette fois et le voyant s'allume également. Devrait probablement avoir un script de démarrage pour vérifier si le micro est en sourdine ou non et allumer/éteindre la lumière, car la configuration actuelle ne l'allumera/éteindra que lorsque le bouton sera enfoncé.


Pour que la lumière indique si le son a été coupé ou non au démarrage au lieu de la première pression sur le bouton, je viens de sauvegarder:

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

Lui a donné la permission d'exécuter

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

Comme lenovo-mic-check à /etc/init.d/ puis exécuté:

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

N'oubliez pas de copier vers /etc/pm/sleep.d/

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

Maintenant, le voyant est allumé si je redémarre l'ordinateur. REMARQUE: le deuxième si pourrait bien être un autre.

0
JQuantum