I finally made the jump from Ubuntu to Arch Linux on my laptop, an Acer Aspire One A0756. It turns out that installing Arch is much easier than it was at my last attempt in 2010 – either that or I’m just more accustomed to wrangling GNU/Linux. Anyway, everything went smoothly except when it came time to suspend.
Coming from Ubuntu, I was used to doing
sudo pm-suspend and everything working. For Arch, pm-suspend would work (after installing
pm-utils), but trying to resume would leave me with a blank screen. After messing around a bit, I found that hitting the function key and the left arrow key (normally a brightness adjustment) would cause the screen to come back on, but my session would have been killed and I was at th LightDM login screen.
I later installed the Intel graphics driver (sudo pacman -S xf86-video-intel) and was playing around with my shortcuts in openbox for switching to an external monitor and back to the internal laptop display. I realized that using xrandr to toggle the internal display on and off might get it to come back on when the machine resumed from a suspend. I tried it out, and it worked! Now I just needed a way to make it automatic.
I had earlier attempted to implement this fix – Blank screen when waking from suspend from the Arch wiki – with no luck. But I did think that it would be a good way to automatically call my xrandr commands when resuming. The wiki calls it a quirk. Looks like a shell script to me. Edit it to look like this:
#!/bin/sh # case "$1" in suspend) ;; resume) #vbetool dpms off #vbetool dpms on xrandr --output LVDS1 --off xrandr --output LVDS1 --mode 1366x768 ;; *) exit $NA ;; esac
and save it as
/etc/pm/sleep.d/00video-quirk. Notice that you should have your resolution in place of 1366×768, which is the resolution of my Aspire One. Now the wiki also suggests editing
/etc/mkinitcpio.conf and adding
MODULES (read more about it here) and running
mkinitcpio -p linux.
Once you do all this and reboot, suspend to RAM should work. It’s a little slow at resuming – takes about 4 seconds – but it works. I know this is a funky workaround, but it works. I’ll update this page if I find a better way.