Skip to content

Instantly share code, notes, and snippets.

@tybenz
Last active July 29, 2021 06:34
Show Gist options
  • Star 14 You must be signed in to star a gist
  • Fork 3 You must be signed in to fork a gist
  • Save tybenz/5620255 to your computer and use it in GitHub Desktop.
Save tybenz/5620255 to your computer and use it in GitHub Desktop.
Enabling mic mute button and light on Lenovo Thinkpads

#####Copied from askubuntu's Enabling mic mute button and light on Lenovo Thinkpad

There are two possible "hardware" indicators (to show that mute is on or off):

The Power button light (green) will blink to show when mute is on The Mic mute button light (orange) will be on or off to show mute status (just like in Windows)

Solution 2 requires a patched thinkpad_acpi kernel module, and is only recommended for advanced users who know what they are doing. This is because the patch is not included by the thinkpad_acpi developers by default, (See this discussion for more details).

###Common Steps

###a. Determining the Mic-Mute hotkey code and Mic input device

  • Open terminal with Ctrl+Alt+T
  • Run acpi_listen, and press the mute key
  • Note the result, which should be something like: ibm/hotkey HKEY 00000080 0000101b
  • Then run amixer scontrols, you should see one of the following in the output:
Simple mixer control 'Internal Mic',0

or

Simple mixer control 'Capture',0

Depending on what you see, "Internal Mic" or "Capture" is your input device.

###b. Create the Mic-Mute ACPI event handler

  • Open terminal, type gksudo gedit /etc/acpi/events/lenovo-mutemic to open the editor.
  • In the editor, paste in the following, where the first line should be the code shown in the previous section by acpi_listen:
event=ibm/hotkey HKEY 00000080 0000101b
action=/etc/acpi/lenovo-mutemic.sh
  • Save and exit the editor.

###Choosing either the Power Light or Mic Mute indicators

###c-1. Mic-Mute script with Power Button indicator

  • Do this if you want an easy solution and do not want to use the patched kernel module (see C-2).
  • Open terminal, type gksudo gedit /etc/acpi/lenovo-mutemic.sh
  • In the editor, paste:
#!/bin/bash
INPUT_DEVICE="'Internal Mic'"
YOUR_USERNAME="place_your_username_here"
if amixer sget $INPUT_DEVICE,0 | grep '\[on\]' ; then
    amixer sset $INPUT_DEVICE,0 toggle
    echo "0 blink" > /proc/acpi/ibm/led
    su $YOUR_USERNAME -c 'DISPLAY=":0.0" notify-send -t 50 \
            -i microphone-sensitivity-muted-symbolic "Mic MUTED"'
else
    amixer sset $INPUT_DEVICE,0 toggle                       
    su $YOUR_USERNAME -c 'DISPLAY=":0.0" notify-send -t 50 \
            -i microphone-sensitivity-high-symbolic "Mic ON"'
    echo "0 on" > /proc/acpi/ibm/led 
fi
  • Replace value of INPUT_DEVICE variable with Capture if that is your input device name (leave all the ticks intact).

  • Replace value of YOUR_USERNAME variable with the account name of the user you want to send notifications to

  • Save and exit the editor.

  • Now run the following (from the terminal):

sudo chmod +x /etc/acpi/lenovo-mutemic.sh
sudo service acpid restart
  • Jump to the Testing section (d) to confirm that it works.

###c-2. Mic-mute with official Mic-mute Indicator Light

#####Setting up the script

  • Please do not use this method if you are not familiar with the terminal/shell.
  • This will require compiling a patched thinkpad_acpi module and has been verified to work with Ubuntu Precise 12.04 and Quantal 12.10, kernels 3.2.0-23 and 3.2.0-24 and 3.5.0-21.
  • Let's create the script first: /etc/acpi/lenovo-mutemic.sh should be as in section c-1, with the following additions:
  • Insert this line after the header (#!/bin/bash):
MICMUTE=/sys/devices/platform/thinkpad_acpi/leds/tpacpi::micmute/brightness
  • After the first echo... line, insert:
echo 1 > $MICMUTE
  • And after the second echo... line, insert:
echo 0 > $MICMUTE
  • You can find an example of what the full script should look like in this paste

  • Then:

sudo chmod +x /etc/acpi/lenovo-mutemic.sh
sudo service acpid restart
  • Confirm that pressing the mute button results in a blinking power light; pressing again gives a steady power light.

#####Building, testing and installing the kernel module

  • Install (or ensure) you have the headers and built tools for your currently running kernel with:
sudo apt-get install linux-headers-$(uname -r) build-essential
  • Make a temporary directory and change to it:
mkdir ~/tpacpi && cd ~/tpacpi
  • Download the source file thinkpad_acpi.c from the Ubuntu Kernel git repository:
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" 
  • Patch it with (copy and paste the full line):
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

In the same folder where thinkpad_acpi.c has been downloaded, you will need a "Makefile". You can download it directly from this Pastebin, using:

wget -OMakefile http://pastebin.com/raw.php?i=ybpnxeUT
  • OR paste the below into a file called Makefile:
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
  • Now type make to create the module; you will see a thinkpad_acpi.ko file in the folder when done.

  • Test the patched module after loading it with:

sudo rmmod thinkpad_acpi && sudo insmod thinkpad_acpi.ko
  • Now confirm that pressing the mic button will turn the orange mic light on/off AND the power light blinking/steady.

  • If confirmed, do the following to replace your current thinkpad_acpi module:

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
  • Comment out or delete the power led lines in lenovo-micmute.sh

###d. Testing

  • Apart from your choice of indicator, you can also confirm mute via the following:

  • Click on the volume icon on the top right, and sound settings at the bottom:
  • Switch to the "Input" tab.
  • Now have fun pressing the Mic Mute button, you should see it reflected in:
  1. The Mute checkbox in the window
  2. Notification bubbles (won't appear instantly if you press the Mic Mute more than once every few seconds!)
  3. Your chosen indicator: the blinking power button light or the built-in Mic Mute light.
@codextremist
Copy link

Well done! Do you know if this solution works with Lenovo Thinkpad W510 ?

@dnisyd
Copy link

dnisyd commented Jan 27, 2018

Latest linux firmware killed it for me. Somehow I just needed the amixer part. Not sure what changed, but it fixed it for me. Thank you! (X230 archlinux)

Copy link

ghost commented Feb 23, 2018

Excellent tutorial!! I used the one involving amixer and this works flawlessly on Thinkpad E470. As expected, when the mic is muted/unmuted the notification will popped up.

Also the led on the power button blinks whenever the mic is in muted state.

@martosvadim
Copy link

acpi_listen does not react on mic button press. Got Lenovo L420 with Debian 9 on the board. Any ideas?

@MarcvdSluys
Copy link

This only starts working around the third time or so I press the mute button on my T430. However, adding the line sleep 0.1 to the top of lenovo-mutemic.sh fixes that. If I'm not mistaken, on a T410 you can use echo "14 on" > /proc/acpi/ibm/led and echo "14 off" > /proc/acpi/ibm/ledwithout kernel patch (or perhaps Gentoo patched it for me).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment