How to make the mute button on X200(s/t), T400(s), T500, and W500 work properly

The mute button on GM45 ThinkPads doesn't work properly under GNU (and probably other operating systems that aren't Microshaft Winglows) The EC (Embedded Controller) doesn't map the button to the actual “mute” button like on external keyboards, but rather makes it mute the hardware itself, regardless of which operating system you run. To use it for your software mixer's mute function, you need to remap it:


For libreboot/coreboot/osboot/etc: make a file called /etc/systemd/system/mutekey.service and paste this into it:

[Unit]
Description=mutekey
After=suspend.target

[Service]
Type=simple
ExecStart=/usr/local/bin/mutekey.sh

[Install]
WantedBy=suspend.target

make another file called /usr/local/bin/mutekey.sh and paste this into it:

#!/bin/bash
ectool -w 0x03 -z 0x40

and don't forget to make it executable! chmod +x /usr/local/bin/mutekey.sh now enable and start the service systemctl enable mutekey systemctl start mutekey

the suspend.target part is required because the EC resets the value the systemd service set on suspending for some reason, so the ectool command has to be executed again after wakeup.*


For proprietary stock BIOSes (not recommended): pass acpi_osi=Linux as kernel parameter. in other words: edit /etc/default/grub, and add acpi_osi=Linux to the GRUB_CMDLINE_LINUX_DEFAULT line somewhere before or in between the rest of your kernel paremeters. now run grub-mkconfig -o /boot/grub/grub.cfg and reboot.


*At least on X200s models it's like this, I'm not sure about others, please DO let me know if you have any GM45 ThinkPad and are willing to test it out.

If you use another init system than soystemd, you're on your own for making re-execution on wakeup work, but let me know how to do it if you figure it out so i can add it here.