在Lenovo Thinkpad上启用麦克风静音按钮和指示灯


26

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

因此,我尝试使用xev命令来监视新闻事件,但没有捕获到该键。

无论如何,有没有修复它,例如添加原始密钥代码?

操作系统和笔记本电脑

Ubuntu 12.04 ,也希望它可以在Arch Linux上运行,但没什么大不了; -P

Thinkpad模块: X220 4290LY9

适用于Arch Linux的内核补丁

在这里下载

最后

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

我需要的其余部分是一个通知守护程序,例如用于输出静音的通知守护程序,但是现在并没有太大关系。


联想型号?
ish 2012年

@izx Thinkpad X220 4290LY9
雏菊

取而代之的是xev,使用acpi-listen进行监视和按下,然后会出现类似的信息ibm/hotkey HKEY 00000080 0000101b。请在此处发布该代码。
ish 2012年

@izx,不走运,但是我可以看到其他按钮,例如,音量增大/音量减小,可以认为是有利的
雏菊

您在静音按钮中内置了灯光吗?也要按几次按钮和后期的输出dmesg|tail
ISH

Answers:


34

该解决方案应适用于所有带静音按钮的Thinkpad,其中还具有内置指示灯。它可能也适用于其他Thinkpad。

除了通知气泡:

在此处输入图片说明在此处输入图片说明

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

  1. 静音启用时,电源按钮指示灯(绿色)将闪烁以显示
  2. 麦克风静音按钮指示灯(橙色)将亮起或熄灭以显示静音状态(就像在Windows中一样)

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

常见步骤


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

  • 打开终端 Ctrl+Alt+T
  • 运行acpi_listen,然后按静音键
  • 注意结果,它应该类似于: ibm/hotkey HKEY 00000080 0000101b

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

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

要么

简单的混音器控制“ Capture”,0

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

b。创建麦克风静音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
  • 在编辑器中,粘贴:

    #!/ bin / bash
    INPUT_DEVICE =“'内部麦克风'”
    YOUR_USERNAME =“ place_your_username_here”
    如果混频器获取$ INPUT_DEVICE,0 | grep'\ [on \]'; 然后
        混频器设置$ INPUT_DEVICE,0切换
        回声“ 0闪烁”> / proc / acpi / ibm / led
        su $ YOUR_USERNAME -c'DISPLAY =“:0.0”通知发送-t 50 \
                -i麦克风灵敏度静音符号“麦克风静音””
    其他
        混频器设置$ INPUT_DEVICE,0切换                       
        su $ YOUR_USERNAME -c'DISPLAY =“:0.0”通知发送-t 50 \
                -i麦克风灵敏度高符号“ Mic ON”'
        回声“ 0 on”> / proc / acpi / ibm / led 
    科幻
    
  • 将INPUT_DEVICE变量的值替换Capture为您输入的设备名称(保留所有刻度)。

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

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

设置脚本

  • 如果您不熟悉终端/外壳,请不要使用此方法。
  • 这将需要编译修补的thinkpad_acpi模块,并且已经过验证,可以与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
    
  • thinkpad_acpi.c从Ubuntu Kernel git存储库下载源文件:

    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
    所有: 使-C / lib / modules / $(shell uname -r)/ build M = $(PWD)模块
    清洁: 使-C / lib / modules / $(shell uname -r)/ build M = $(PWD)干净
  • 现在键入make以创建模块;完成后,您将thinkpad_acpi.ko在文件夹中看到一个文件。

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

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

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

    TPDIR = / lib /模块/ $(uname -r)/内核/驱动程序/平台/ 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. 您选择的指示灯:电源按钮闪烁或内置的Mic Mute指示灯。

添加了闪烁的电源指示灯作为指示器-如果没有自定义内核,则无法使用实际的麦克风指示灯。
ish 2012年

1
@Andrey:我添加了一个嵌入式补丁程序,而不是下载修改后的源代码。请在答案页面中搜索,Patch it with然后您将找到sed激活麦克风静音LED所需的线路。
ish 2012年

2
不幸的是,我不能再编译thinkpad_acpi.c了。Make输出在这里。有人可以帮我解决这个问题吗?
Andrey

1
13.10(Saucy)需要一个不同的thinkpad_acpi.c。该补丁与原始答案中的补丁相同。对我来说适用于3.11.0-15通用内核(和相应的标头)。
丹尼尔(Daniel)

1
在16.10中,当您使用第一种方法并按下“静音”按钮时,麦克风的静音指示灯似乎会自动打开,因此不再需要闪烁的电源指示灯。
爆炸小猫

0

我也无法立即使用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

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


@andrey这可能是一个愚蠢的问题,但是您是否尝试过下载,修补和编译thinkpad_acpi.c的干净副本?
JQuantum
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.