kirsle.net/www/wiki/PowerTOP-and-USB-Autosuspen...

58 lines
3.1 KiB
Markdown
Raw Permalink Normal View History

# PowerTOP and USB Autosuspend
Some of this was touched on at [Fedora on Macbook](/wiki/Fedora-on-Macbook).
PowerTOP is a useful tool to get more battery life out of a laptop. It makes the difference of several hours of battery life, so it's a useful thing to install.
## PowerTOP
Install and enable it:
```bash
sudo dnf install powertop
sudo systemctl enable powertop.service
sudo systemctl start powertop.service
```
The service runs `powertop --auto-tune` which automatically sets most tunables to their "Good" state, for maximum battery life.
But sometimes it doesn't work well, especially with USB mice.
## USB Autosuspend
It perplexed me for a while why my USB mouse on a laptop would deactivate itself randomly (its LED turns off, and the mouse doesn't work until you click one of the buttons, and then it will power itself off again after a couple minutes...). Unplugging the USB mouse and plugging it back in would fix the problem and it would no longer auto-suspend itself. I was checking `/var/log/messages` and all the usual suspects until I realized it was PowerTOP that was the problem.
When `powertop --auto-tune` gets run, every USB device attached at the time gets the `auto` power management profile set, meaning they deactivate themselves to save power. On a keyboard or most other devices that's probably fine, but a mouse isn't. My workarounds have been to either *not* connect my USB devices until after my laptop boots into my desktop environment, or to unplug and replug the USB mouse after the fact.
I can't find a good "official" way to work around the problem. Google suggests editing things in `/etc/laptop-mode` but that isn't a thing in Fedora, and others have suggested setting up udev rules for your USB device, but that doesn't work either. I even found this [Power Management Guide][1] for Fedora 19 which pointed me to `powertop2tuned` to override powertop rules, but that didn't help me either.
My hacky work-around: make a shell script that starts on user log-in, that undoes PowerTOP's change to the USB device.
1. Run `sudo powertop` and go to the Tunables tab.
2. Find the entry like "Autosuspend for USB device Microsoft 3-Button Mouse with IntelliEye(TM) [Microsoft]", and toggle it into a "Bad" state (meaning it doesn't auto-suspend now).
3. When toggling it, PowerTOP shows a message of what it did to toggle it, which looks like:
`echo 'on' > '/sys/bus/usb/devices/2-3.2.3.1/power/control'`
4. Create a shell script that does that job. I made mine at `~/bin/powertop-fix`:
```bash
#!/bin/sh
# Disable USB auto-suspend for my mouse on startup
sleep 5;
MOUSE="/sys/bus/usb/devices/2-3.2.3.1/power/control";
if [ -f "$MOUSE" ]; then
echo 'on' > $MOUSE;
fi
```
5. Edit your sudoers file to allow running that script with no password:
```bash
kirsle ALL=(ALL) NOPASSWD: /home/kirsle/bin/powertop-fix
```
6. Make `sudo /home/kirsle/bin/powertop-fix` start automatically using your desktop's session management settings (e.g. Xfce Sessions and Startup -> Application Autostart).
[1]: https://docs.fedoraproject.org/en-US/Fedora/19/pdf/Power_Management_Guide/Fedora-19-Power_Management_Guide-en-US.pdf