Fixing Windows 10 Sleep Problems
Last updated: 2020-04-09
Applies to: Windows 10, probably also 7/8/8.1. Check the last edited date on this document.
This guide assumes you know your way around Windows and have already tried the usual suspects.
Rant
Windows power management is a janky piece of shit that’s made worse by inconsistent vendor implementation. Every fucking hardware manufacturer has its own ideas of what “sleep” and “low power” and “wake” mean resulting in a fucking patchwork of non-standards that all abuse the already crappy power management system in all sorts of horrible fucking ways (how about TURN OFF THE FANS BUT KEEP THE CPU RUNNING IN “SLEEP” MODE, with THERMAL THROTTLING as the only thing between you and a melted puddle of plastic with crunchy bits of silicone). Gods forbid you have a fucking OEM license preinstalled, fuck knows what settings they set to ridiculous values and hid from you. The wake timers for Windows Update are absolutely bonkers. The system won’t fucking go to sleep, or goes to sleep when it shouldn’t, or doesn’t sleep properly, or doesn’t wake properly, what the fuck. Even fucking Linux has better power management today, when 10 years ago closing your laptop’s lid was a guaranteed way to get a kernel “oopsie”.
Problems
Look up your problem in the table below, then scroll down to the corresponding solution.
Problem | Solution |
---|---|
Classic Start doesn’t show the “sleep” option | Low power idle |
The computer overheats during sleep | Low power idle |
The computer randomly wakes up from sleep | Wake timers |
The computer goes to sleep soon after you lock it | System unattended sleep timeout / Console lock display off timeout |
Windows Update is still a pain in the ass and still wakes your PC | Fuck knows |
The computer wakes up exactly X minutes after you put it to sleep | Hibernation timers |
Solutions
Low power idle
Check
To check if you have this problem: From an admin powershell run powercfg -a
. If sleep state Standby (S0 Low Power Idle)
is available, then you have this problem.
Fix
To fix it, open regedit and set HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Power\CsEnabled
to 0
. Reboot.
Now powercfg -a
should show one of the other standby states: S1, S2, or S3. If it doesn’t, you’re SOL and will have to choose between no sleep and S0 sleep.
Explanation
In this configuration, the computer executes a “connected standby” when it’s asked to sleep. Processes still run but on certain laptops fans may not spin. Windows still draws an obscene amount of power. Other standby modes are disabled by Windows when this is enabled, which means that even if the system is capable of a more reasonable sleep, then it still won’t do it. Applications such as Classic Start specifically look for S1, S2, or S3 and won’t display the sleep option if it isn’t one of these.
Wake timers
Check
If your windows machine randomly wakes up from sleep, you have this problem. It’s either windows update, or something else.
From admin shell run powercfg -waketimers
. It should show what’s the problem.
Fix
If you want to only ban windows update from doing this, F in chat. If you want to ban everything from waking your computer up, read on.
Go to Control Panel -> Power Options -> Change plan settings -> Change advanced power settings -> Sleep -> Allow wake timers. Set to Disable.
If the option isn’t available, set the registry key HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Power\PowerSettings\238C9FA8-0AAD-41ED-83F4-97BE242C8F20\BD3B718A-0680-4D9D-8AB2-E1D2B4AC806D\Attributes
to 2
. Close and open the advanced power settings and you should see the option.
Explanation
Windows mostly uses wake timers with Windows Update, which is usually the primary culprit, however other systems may rely on wake timers themselves. The above registry key controls whether the option is visible or not. You can find a list of other interesting registry keys by running powercfg -q
(query). That list may not be exhaustive, here’s an exhaustive one.
System unattended sleep timeout / Console lock display off timeout
Check
You have this problem if your computer goes to sleep when you issue a lock command and wait a few minutes, even with sleep timeout set to Never.
Fix
Go to Control Panel -> Power Options -> Change plan settings -> Change advanced power settings -> Sleep -> System unattended sleep timeout. Set to 0.
Note that this will also cause the system to not go back to sleep anymore after a wake timer triggers. If it doesn’t work make sure to revert this one.
If the option isn’t available, set the registry key HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Power\PowerSettings\238C9FA8-0AAD-41ED-83F4-97BE242C8F20\7bc4a2f9-d8fc-4469-b07b-33eb785aaca0\Attributes
to 2
. Close and open the advanced power settings and you should see the option.
Alternative fix: Console lock display off timeout
If that doesn’t work (such as on a Zenbook Pro Duo), set HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Power\PowerSettings\7516b95f-f776-4464-8c53-06167f40cc99\8EC4B3A5-6868-48c2-BE75-4F3044BE88A7\Attributes
to 2
then in advanced power settings set Display -> Console lock display off timeout to 0. To get the screen to still blank out after a while and avoid burn-in, set a blank screensaver with a timeout of however many minutes you want. This seems a bit finicky so test that the screensaver triggers both while unlocked and while locked before relying on it.
Explanation
Windows has this hidden config where the system sleeps when it’s “unattended” as an independent timer from the usual sleep timer. The primary purpose of this key is to set the go-back-to-sleep timeout for when wake timers wake the computer, but it has the side effect of affecting the sleep timeout on the lockscreen on some computers. If that doesn’t work, it may be the case that a screen off triggers sleep, in which case we disable the “display off” timeout and replace it with a blank screensaver which doesn’t turn off the display, but simply sets it to black.
Hibernation timers
Check
If your computer:
1) Has no wake timers when you run powercfg -waketimers
and/or Get-ScheduledTask | ? {$_.Settings.WakeToRun}
(elevated prompt), and
2) Wakes up precisely X minutes after sleeping (e.g. the computer always wakes up exactly 3 hours after it was put to sleep)
Immediately when you notice that your computer has woken up, open eventvwr and go to Windows Logs -> System and check the approximate time when the device woke up. If you find an event with source “Power-Troubleshooter” and in the XML view you see a WakeSourceText of “ACPI Wake Alarm” then there’s your problem.
Fix
Go to Control Panel -> Power Options -> Change plan settings -> Change advanced power settings -> Sleep -> Hibernate after and set both to 0 (Never).
Explanation
ACPI wake timers are lower level and are not your usual wake timers. If I were to guess (and this may be completely wrong), Windows sets one of these to fire before the computer goes to sleep when it’s configured to hibernate after a certain amount of time (end speculation). The computer will wake but fail to correctly go into hibernation, which results in you being hung out to dry. If you’re lucky, it goes back to sleep and you never notice.