Join WhatsApp
Join Now
Join Telegram
Join Now

Crafting udev Rules to Aggressively Power-Manage Discrete GPUs (AMD & NVIDIA)

Avatar for Noman Mohammad

By Noman Mohammad

Published on:

Your rating ?

Your Linux laptop is bleeding battery because the GPU never sleeps

I learned this the hard way on a flight from New York to London. My ThinkPad P15 usually gets 7 hours. Thirty minutes in, I was already at 85 %. By hour two, the guy next to me was watching Netflix on his Mac while I hunted for outlets.

The culprit? My NVIDIA Quadro was sitting wide awake, burning 18 watts to do… nothing.

Why Linux keeps your graphics card “on”

Windows laptops toggle the GPU like a light switch. Linux hands you the wires and says “figure it out.” Most distros leave the discrete card in the highest power state unless you tell it to chill.

  • Idle NVIDIA card: 12–20 W gone.
  • Idle AMD card: 8–15 W gone.
  • That’s 3–4 extra hours of battery you can get back with two text files.

I measured it. Same laptop, same brightness, same browser tabs. With the GPU snoozing, I jumped from 4 h 12 min to 8 h 39 min. No magic—just udev rules.

Step-by-step: write the rules once, forget about it

1. Spot your GPU’s address

lspci -nn | grep -Ei 'VGA|3D'

Look for the line that does not say “Intel.” For me it’s:

01:00.0 VGA compatible controller [0300]: NVIDIA Corporation TU117GLM [Quadro T1000 Mobile] [10de:1fbc]

Remember the 01:00.0 and 10de parts.

2. Create the rule file

sudo nano /etc/udev/rules.d/80-gpu-pm.rules

NVIDIA users paste:

# Auto-suspend the GPU
ACTION=="add", SUBSYSTEM=="pci", ATTR{vendor}=="0x10de", ATTR{class}=="0x030000", ATTR{power/control}="auto"

AMD users paste:

# Force lowest power level
ACTION=="add", SUBSYSTEM=="pci", ATTR{vendor}=="0x1002", ATTR{class}=="0x030000", RUN+="/bin/sh -c 'echo low > /sys/class/drm/card*/device/power_dpm_state'"

Don’t blindly copy the card*—run ls /sys/class/drm and use the number that matches your discrete GPU.

3. Reload and check

sudo udevadm control --reload-rules && sudo udevadm trigger

Then verify:

cat /sys/bus/pci/devices/0000:01:00.0/power/control

If it says auto, you’re done.

Quick wins after the reboot

Here’s what I noticed on the same machine:

  • Fans stopped spinning at 54 °C idle—total silence.
  • Powertop reported an average drop from 24 W to 9 W.
  • Chrome scrolling still smooth; the Intel iGPU handles it fine.

One warning: if you game or CUDA-render, the card will wake up automatically. When you close Blender, it goes back to sleep 30 seconds later. No extra clicks.

Copy-paste cheatsheet

Save this somewhere:

# Find GPU
lspci -nn | grep -Ei 'VGA|3D'

# Check current power state
cat /sys/bus/pci/devices/0000:01:00.0/power/control

# Quick on/off test (NVIDIA)
sudo nvidia-smi -pm 0
sudo nvidia-smi -i 0 -rgc

That’s it. Two minutes of editing, hours of extra battery. I haven’t carried a charger on day trips since.

Leave a Comment