在Lenovo Thinkpad上启用Mic Mute按钮和指示灯

我的Lenovo Thinkpad T420上有一个麦克风静音按钮,但它不起作用。

所以我尝试了xev命令来监视按下事件,并且没有捕获该密钥。

无论如何要修复它,比如添加原始密钥代码?

OS和笔记本电脑

Ubuntu 12.04 ,也希望它适用于Arch Linux,但并不重要;-P

Thinkpad模块: X220 4290LY9

Arch Linux的内核补丁

在这里下载

最后

这有点棘手,但是使用内核补丁和acpid脚本,它现在可以正常工作了。

我需要的其余部分是一个通知守护进程,就像输出静音那样,但现在并不重要。

此解决方案适用于所有具有静音按钮的Thinkpad,该按钮也具有内置灯。 它也适用于其他Thinkpad。

除了通知泡沫:

在此处输入图像描述在此处输入图像描述

有两种可能的“硬件”指示器(表示静音打开或关闭):

  1. 当静音打开时,电源按钮指示灯(绿色)将闪烁显示
  2. 麦克风静音按钮指示灯(橙色)将打开或关闭以显示静音状态(就像在Windows中一样)

    解决方案2需要修补的thinkpad_acpi内核模块,仅建议知道他们正在做什么的高级用户。 这是因为默认情况下thinkpad_acpi开发人员不包含该补丁( 有关更多详细信息 , 请参阅此讨论 )。

共同步骤


一个。 确定麦克风静音热键代码和麦克风输入设备

  • 使用Ctrl+Alt+T打开终端
  • 运行acpi_listen ,然后按静音键
  • 注意结果,应该是这样的: ibm/hotkey HKEY 00000080 0000101b

  • 然后运行amixer scontrols ,您应该在输出中看到以下内容之一:

简单的混音器控制'内部麦克风',0

要么

简单的混音器控制'捕捉',0

根据您的看法,“内置麦克风”或“捕获”是您的输入设备。

湾 创建Mic-Mute ACPI事件处理程序

  • 打开终端,输入gksudo gedit /etc/acpi/events/lenovo-mutemic打开编辑器。
  • 在编辑器中,粘贴以下内容,其中第一行应该是acpi_listen在上一节中显示的代码:
     event = ibm / hotkey HKEY 00000080 0000101b
    行动=的/ etc / ACPI / lenovo-mutemic.sh
    
  • 保存并退出编辑器。

选择电源指示灯或麦克风静音指示灯


C-1。 带电源按钮指示灯的麦克风静音脚本

  • 如果您想要一个简单的解决方案并且不想使用已修补的内核模块(请参阅C-2),请执行此操作。
  • 打开终端,键入gksudo gedit /etc/acpi/lenovo-mutemic.sh
  • 在编辑器中粘贴:

     #!/斌/庆典
     INPUT_DEVICE =“'内部麦克风'”
     YOUR_USERNAME = “place_your_username_here”
    如果amixer sget $ INPUT_DEVICE,0 |  grep'\ [on \]'; 然后
         amixer sset $ INPUT_DEVICE,0切换
         echo“0 blink”> / proc / acpi / ibm / led
         su $ YOUR_USERNAME -c'DISPLAY =“:0.0”notify-send -t 50 \
                 -i麦克风灵敏度静音符号“Mic MUTED”'
    其他
         amixer sset $ INPUT_DEVICE,0切换                       
         su $ YOUR_USERNAME -c'DISPLAY =“:0.0”notify-send -t 50 \
                 -i麦克风灵敏度高符号“Mic ON”'
         echo“0 on”> / proc / acpi / ibm / led 
    科幻
    
  • 如果这是您的输入设备名称,则将INPUT_DEVICE变量的值替换为Capture (保留所有刻度)。

  • 将YOUR_USERNAME变量的值替换为您要向其发送通知的用户的帐户名称
  • 保存并退出编辑器。
  • 现在运行以下命令(从终端):
     sudo chmod + x /etc/acpi/lenovo-mutemic.sh
     sudo service acpid restart
    
  • 跳转到测试部分(d)以确认它是否有效。

C-2。 带官方麦克风静音指示灯的麦克风静音

设置脚本

  • 如果您不熟悉终端/ shell,请不要使用此方法。
  • 这将需要编译一个修补的thinkpad_acpi模块,并已经过validation可以与Ubuntu Precise 12.04和Quantal 12.10,内核3.2.0-23和3.2.0-24以及3.5.0-21一起使用。
  • 让我们先创建脚本: /etc/acpi/lenovo-mutemic.sh应该如c-1部分所示,并添加以下内容:

  • 在标题后插入此行( #!/bin/bash ):

     MICMUTE=/sys/devices/platform/thinkpad_acpi/leds/tpacpi::micmute/brightness 
  • 在第一个echo...行之后,插入:

     echo 1 > $MICMUTE 
  • 在第二个echo...行之后,插入:

     echo 0 > $MICMUTE 
  • 您可以在此粘贴中找到完整脚本应该是什么样子的示例

  • 然后:

     sudo chmod +x /etc/acpi/lenovo-mutemic.sh sudo service acpid restart 
  • 确认按下静音按钮会导致电源指示灯闪烁; 再次按下可提供稳定的电源指示灯。

构建,测试和安装内核模块

  • 安装(或确保)您拥有当前运行的内核的标头和构建工具:

     sudo apt-get install linux-headers-$(uname -r) build-essential 
  • 创建一个临时目录并更改为它:

     mkdir ~/tpacpi && cd ~/tpacpi 
  • 从Ubuntu内核git存储库下载源文件thinkpad_acpi.c

     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" 
  • 修补它(复制并粘贴整行):

     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 
  • 在下载thinkpad_acpi.c的同一文件夹中,您将需要一个“Makefile”。 您可以使用以下命令直接从此Pastebin下载它:

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

    或者将以下内容粘贴到名为Makefile

     obj-m + = thinkpad_acpi.o 
    所有: make -C / lib / modules / $(shell uname -r)/ build M = $(PWD)模块
    清洁: make -C / lib / modules / $(shell uname -r)/ build M = $(PWD)clean
  • 现在输入make来创建模块; 完成后,您将在文件夹中看到thinkpad_acpi.ko文件。

  • 加载后测试修补后的模块:

     sudo rmmod thinkpad_acpi && sudo insmod thinkpad_acpi.ko 
  • 现在确认按下麦克风按钮将打开/关闭橙色麦克风指示灯并且电源指示灯闪烁/稳定。

  • 如果已确认,请执行以下操作以替换当前的thinkpad_acpi模块:

     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
    
  • 注释掉或删除lenovo-micmute.sh的电源线路


d。 测试

  • 除了您选择的指示器外,您还可以通过以下方式确认静音:

麦克风输入

  • 单击右上角的音量图标,然后单击底部的声音设置:
  • 切换到“输入”选项卡。
  • 现在按下Mic Mute按钮很有乐趣,你应该看到它反映在:

    1. 窗口中的“静音”复选框
    2. 通知气泡(如果每隔几秒钟按一下Mic Mute,就不会立即出现!)
    3. 您选择的指示灯:闪烁的电源按钮指示灯或内置麦克风静音指示灯。

我第一次使用Linux桌面环境时无法立即在Ubuntu 12.10上工作。

只需添加引号并删除逗号(并添加我的用户名)即可解决此问题:

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

然后按照你的步骤编译thinkpad_acpi。

全部采用带有NVS 4200M,Ubuntu 12.10的Thinkpad T520。 还没有重新启动,但我测试了你已经概述的测试步骤,它可以打开和关闭静音LED并实际静音(通知)。 一点点跳枪似乎工作正常。 谢谢。

重新启动,脚本本身可以很好地静音和取消静音,但我没有安装修补的thinkpad_acpi … oops

好的,这次正确安装后重新启动,LED也亮了。 应该有一个启动脚本来检查麦克风是否静音并打开/关闭灯,因为当前设置只会在按下按钮时打开/关闭灯。


为了让灯光显示它是否在启动时被静音,而不是在第一次按下按钮时,我刚刚保存:

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

授予它执行权限

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

作为lenovo-mic-check到/etc/init.d/然后运行:

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

另外不要忘记复制到/etc/pm/sleep.d/

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

如果我重新启动计算机,现在指示灯亮起。注意:第二个如果可能只是其他的。