Skip to content

Instantly share code, notes, and snippets.

@ClosedPort22
Last active April 5, 2026 08:53
Show Gist options
  • Select an option

  • Save ClosedPort22/0b5efa200533dd1fb97ee618b97e78b8 to your computer and use it in GitHub Desktop.

Select an option

Save ClosedPort22/0b5efa200533dd1fb97ee618b97e78b8 to your computer and use it in GitHub Desktop.
Dust removal (fan speed control) on Lenovo ThinkBook 16 G7+ IAH 21TL on Linux

Dust removal (fan speed control) on Lenovo ThinkBook 16 G7+ IAH 21TL on Linux

Note

  • These scripts require the acpi_call kernel module.
  • Since the scripts cannot function without root privileges, I've included sudo in the shebang line to save having to type it every time. If you don't like this, you can simply remove it.

The remove-dust.sh script turns on the laptop embedded controller's built-in dust removal functionality, which basically involves running the fan at max speed for a few seconds followed by a brief pause. This process is repeated for about two minutes. It is useful for lowering the laptop's temperature as well as removing dust.

To cancel the process before the two minute mark, simply run remove-dust-cancel.sh.

The official Lenovo Power Management Driver also sometimes calls VPCW with arguments 0x1 0x2b. I haven't figured out what this does yet, but it doesn't seem to affect the fan control functionality.

This has been tested Lenovo ThinkBook 16 G7+ IAH 21TL. Whether it works on other machines is currently unknown, but given the similarity of ACPI implementations on Lenovo laptops (non-ThinkPad ones?), I wouldn't be surprised if it worked on at least a few more models (with or without tweaking).

Acknowledgements

  1. https://github.com/BartoszCichecki/LenovoLegionToolkit (Re-implementation of Lenovo Vantage on Windows)
  2. https://gist.github.com/w568w/b2fc5f9d1f4dff13efe751abec27b396 (ACPI reverse engineering)
  3. https://vorpal.se/posts/2022/aug/21/reverse-engineering-acpi-functionality-on-a-toshiba-z830-ultrabook/ (ACPI reverse engineering)
  4. https://wiki.archlinux.org/title/DSDT (Disassembling ACPI tables)
  5. https://github.com/jiarandiana0307/Lenovo-Fan-Control (Re-implementation of the functionality on Windows)
  6. https://www.cnblogs.com/kiradiana/p/18518728 (Blog post about 5)
#!/usr/bin/sudo /usr/bin/bash
echo '\_SB.PC00.LPCB.EC0.VPC0.VPCW 0x0 0x0' > /proc/acpi/call
echo '\_SB.PC00.LPCB.EC0.VPC0.VPCW 0x1 0x22' > /proc/acpi/call
# echo '\_SB.PC00.LPCB.EC0.VPC0.VPCW 0x1 0x2b' > /proc/acpi/call
#!/usr/bin/sudo /usr/bin/bash
echo '\_SB.PC00.LPCB.EC0.VPC0.VPCW 0x0 0x1' > /proc/acpi/call
echo '\_SB.PC00.LPCB.EC0.VPC0.VPCW 0x1 0x22' > /proc/acpi/call
# echo '\_SB.PC00.LPCB.EC0.VPC0.VPCW 0x1 0x2b' > /proc/acpi/call
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment