Enabling Mic Mute button and light on Lenovo Thinkpads
This solution should work for all Thinkpads with a mute button which also has a built-in light. It may also work for other Thinkpads.
Apart from the notification bubbles:
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 athinkpad_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:
- The Mute checkbox in the window
- Notification bubbles (won't appear instantly if you press the Mic Mute more than once every few seconds!)
- Your chosen indicator: the blinking power button light or the built-in Mic Mute light.
Installing indicator-sound
solved the problem for me.