In my previous post I was complaining how my MacBook would no longer sleep. The sleep function worked well after installing Lion but then stopped working unexpectedly.
It turns out that this is not an uncommon problem with many people complaining of the same issue. Advice on how to fix it varies wildly with solutions including (but not limited to): SMC reset, PRAM reset, turn off preference X, delete folder Y - there are even 3rd party application to force your Mac to sleep.
However the advice that worked for me was actually fairly logical:1. Use pmset to view the power management settings:
localhost:work teabot$ pmset -g ... disksleep 10 sleep 0 (imposed by 46) hibernatemode 3 ...
The interesting thing in the output is the line that states 'sleep 0' - presumably indicating that sleep mode is disabled. Further along this line we find 'imposed by 46'. This is actually telling us the id of the process (PID) that is blocking sleep mode.2. List the process with the matching PID:
localhost:work teabot$ ps -ef | grep 46 0 46 1 0 9:05pm ?? 0:00.16 /usr/sbin/cupsd -l 0 107 46 0 9:05pm ?? 0:00.59 ipp://nano.local.:631/printers/HP_Photosmart_C4100_series 7... ...
So we can see that a queued print job is inhibiting sleep mode and in this case I resolved the issue by clearing my print queue at which point my MacBook was happy to sleep once more.
It's pretty bizarre that a queued print job should disable sleep mode. The action of me closing the MacBook lid should make clear my intention of wanting the computer to sleep. If the print job is so important - perhaps a warning dialog should be issued so that I might have some idea why sleep mode will not be activated?
I assume that other types of process may inhibit sleep mode. Thankfully the pmset command includes some unexpectedly useful output to help us figure out which process is responsible. I can't imagine how long it would've taken me to find the errant print job without it.