Now that I am rolling Kubuntu as my daily, I’ve had a chance to experience some of the more nuanced bugs that seem to plague different types of hardware at different times. With all of the other bugs that crop up, none was more annoying to me than the USB ACPI bug that kept waking my trusty Lenovo T460s up while it was sealed in my bag. There’s nothing worse than rolling up to a meeting with a dead battery in a laptop that’s like 3000 degrees.

The solution to this was pretty straight forward but eluded me was to check out the /proc/acpi/wakeup entries:

cat /proc/acpi/wakeup

Device	S-state	  Status   Sysfs node
LID	   S4	 *enabled   platform:PNP0C0D:00
SLPB	  S3	*enabled   platform:PNP0C0E:00
IGBE	  S4	*disabled  pci:0000:00:1f.6
EXP2	  S4	*disabled
XHCI	  S3	*enabled   pci:0000:00:14.0

And with a little research, I found out that the XHCI is the USB keyboard interface (internal), which corresponded with wake notices in dmesg.

Now the quick fix for this was to simply run the following commands:

sudo su
echo XHCI > /proc/acpi/wakeup

Which fixed it until I rebooted. Boo. Now to make it permanent…

To make this happen on reboot automatically, create a new file in the /etc/systemd/system/ folder named acpi_fix.service. Place the following content in that file:

[Unit]
Description=something

[Service]
ExecStart=/bin/bash -c "echo XHCI >> /proc/acpi/wakeup"

[Install]
WantedBy=multi-user.target

Just swap out the ACPI device name to whatever is making yours wake up.

After that is done, fun the following commands to:

Refresh the service index:
sudo systemctl daemon-reload

Start the service:
sudo systemctl start acpi_fix.service

Tell it to autostart:
sudo systemctl enable acpi_fix.service

That should be it. You can restart and confirm that it’s working by running the cat command back at the top.

Happy Linuxing!