常见步骤

常见步骤

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

因此我尝试使用xev命令来监控按下事件,但该键未被捕获。

有什么方法可以修复它吗,比如添加原始密钥代码?

操作系统和笔记本电脑

Ubuntu 12.04,也希望它能在 Arch Linux 上运行,不过没那么重要 ;-P

ThinkPad模块: X220 4290LY9

Arch Linux 的内核补丁

在这里下载

最后

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

我还需要像输出静音那样的通知守护进程,但现在这并不重要。

答案1

此解决方案适用于所有带有静音按钮且内置有灯的 ThinkPad。它也可能适用于其他 ThinkPad。

除了通知气泡之外:

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

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

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

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

常见步骤


a. 确定麦克风静音热键代码和麦克风输入设备

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

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

简单的混音器控制‘内置麦克风’,0

或者

简单的混频器控制‘捕获’,0

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

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

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

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


c-1. 带电源按钮指示器的 Mute-Mute 脚本

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

    /bin/bash #!/bin/bash
    INPUT_DEVICE="'内置麦克风'"
    YOUR_USERNAME="在此处输入您的用户名"
    如果 amixer sget $INPUT_DEVICE,0 | grep '\[on\]' ; 然后
        amixer sset $INPUT_DEVICE,0 切换
        echo“ 0 闪烁”> /proc/acpi/ibm/led
        su $YOUR_USERNAME -c 'DISPLAY=":0.0" 通知发送 -t 50 \
                -i 麦克风灵敏度静音符号“麦克风静音”'
    别的
        amixer sset $INPUT_DEVICE,0 切换                       
        su $YOUR_USERNAME -c 'DISPLAY=":0.0" 通知发送 -t 50 \
                -i 麦克风灵敏度高符号“麦克风开启”'
        回显“0 on”> /proc/acpi/ibm/led
    
  • 如果这是您的输入设备名称,则用其替换 INPUT_DEVICE 变量的值Capture(保留所有勾号)。

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

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

设置脚本

  • 如果您不熟悉终端/shell,请不要使用此方法。
  • 这将需要编译修补的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”。您可以直接从此处下载粘贴箱, 使用:

    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. 测试

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

麦克风输入

  • 点击右上角的音量图标,然后点击底部的声音设置:
  • 切换到“输入”选项卡。
  • 现在按下麦克风静音按钮,您应该会看到它反映在:

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

答案2

安装indicator-sound为我解决了这个问题。

答案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...哎呀

好的,这次正确安装后再次重新启动,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

现在,如果我重新启动计算机,灯就会亮,注意:第二个 if 可能只是一个 else。

相关内容