在Lenovo Thinkpad上启用Mic Mute按钮和指示灯
我的Lenovo Thinkpad T420上有一个麦克风静音按钮,但它不起作用。
所以我尝试了xev
命令来监视按下事件,并且没有捕获该密钥。
无论如何要修复它,比如添加原始密钥代码?
OS和笔记本电脑
Ubuntu 12.04
,也希望它适用于Arch Linux,但并不重要;-P
Thinkpad模块: X220 4290LY9
Arch Linux的内核补丁
在这里下载
最后
这有点棘手,但是使用内核补丁和acpid脚本,它现在可以正常工作了。
我需要的其余部分是一个通知守护进程,就像输出静音那样,但现在并不重要。
此解决方案适用于所有具有静音按钮的Thinkpad,该按钮也具有内置灯。 它也适用于其他Thinkpad。
除了通知泡沫:
有两种可能的“硬件”指示器(表示静音打开或关闭):
- 当静音打开时,电源按钮指示灯(绿色)将闪烁显示
-
麦克风静音按钮指示灯(橙色)将打开或关闭以显示静音状态(就像在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按钮很有乐趣,你应该看到它反映在:
- 窗口中的“静音”复选框
- 通知气泡(如果每隔几秒钟按一下Mic Mute,就不会立即出现!)
- 您选择的指示灯:闪烁的电源按钮指示灯或内置麦克风静音指示灯。
我第一次使用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
如果我重新启动计算机,现在指示灯亮起。注意:第二个如果可能只是其他的。