Suspend and hibernate have always been screwed up with Linux. Luckily if you absolutely need this feature there is hope. I got mine working after scouring google. In this tutorial I will share with you what I learned, and how I solved the “linux insomniac” problem for my laptop.
First, here’s what I’m running.
Linux Mint 11 (a derivative of Ubuntu 11.04)
Kernel Version 220.127.116.11
Asus G53SW (Very similar to any ASUS G73/G Series)
If you are running something different than I am above, don’t panic this still have a good chance of working for you. Regardless of what you do I encourage you to test your suspend and hibernate after everything you try. I know, you’ll have to hold the power button down a lot for a cold reset, but it’s worth it.
My Symptoms Before I got it Working
When I sent my computer in Hibernate the computer would look like it was doing what I told it to up until the part where the screen and the CPU fan turn off. I just got a screen of black that would not respond. The hibernate was very similar except there was a white cursor frozen at the top left of the screen. The only option I had was to hold the power button until it turned off.
An Easy Fix for Suspend
I scoured the web looking for something that might help me. I ran into an article which gives instructions on installing a script that may fix the problem. There are dozens of people who have left comment in the article as to whether it worked for them or not and what system they were running. Most of them left comments said that the script worked perfectly well for them.
1. Create a new script. The scripts in the sleep.d directory get executed when your computer suspends and hibernates. The “20″ has something to do with the script load order and the name currently _custom-echi_hcd can be changed to anything you like
sudo gedit /etc/pm/sleep.d/20_custom-ehci_hcd
2. Enter the following script into gedit.
#inspired by http://art.ubuntuforums.org/showpost.php?p=9744970&postcount=19
# tidied by tqzzaa
# Comments added by chriseiffel.com
DRIVERS="ehci xhci" # ehci_hcd, xhci_hcd
#This function executes when the computer is going
#into sleep/hibernation. It looks for all devices
#in /sys/bus/pci/drivers with the ehci_hcd, etc
#and adds them to the unbind list
echo -n > $DEV_LIST 2>/dev/null
for driver in $DRIVERS; do
for dev in `ls $DDIR 2>/dev/null | egrep "^$HEX+:$HEX+:$HEX"`; do
echo -n "$dev" > $DDIR/unbind
echo "$driver $dev" >> $DEV_LIST
#Executed on a resume/thaw attempts to rebind the stored drivers
if [ -s $DEV_LIST ]; then
while read driver dev; do
while [ $((MAX_BIND_ATTEMPTS)) -gt 0 ]; do
echo -n "$dev" > $DDIR/bind
if [ ! -L "$DDIR/$dev" ]; then
done < $DEV_LIST
rm $DEV_LIST 2>/dev/null
case "$1" in
3. You’re done. You shouldn’t need to restart your computer. Try a suspend. Cross your fingers. Remember to check to make sure that your USB devices are still working after a resume/thaw.
Unfortunately for me and some others it didn’t work perfectly. In my case it was bitter sweet, my suspend worked, but my hibernate still didn’t work. However, it did change the way that suspend didn’t work. Now instead of a black screen, the computer just acted as if it was a normal restart. On power up instead of continuing the session it just restarted. If you have this same problem continue on getting article on getting hibernation. working.
The website and the script I originally found are located here.