Archive:Suspend and wake in Ubuntu
Enabling Suspend / Wake on Ubuntu Linux
First, test XBMC to see if it already suspends. You may not need any extra setup. If it does not suspend properly, one or more of the following techniques may be necessary. Go through them in order and stop once you have a working suspend and wake. Be certain to test it more than once, there is a bug that will express itself as not suspending after the first wake is successful.
Enable ACPI S1/S3 Suspend in your BIOS
Make sure your ACPI S1/S3 is enabled in your BIOS. There are as many ways to do this as there are different BIOSes out there. Refer to your motherboard documentation for details.
Edit /etc/Policykit/PolicyKit.conf
Edit /etc/Policykit/PolicyKit.conf to add privileges for the xbmc account:
<config version="0.1"> <match user="root"> <return result="yes"/> </match> <match user="xbmc"> <return result="yes"/> </match> <define_admin_auth group="admin"/> </config>
Add Custom Actions to PolicyKit
Make sure the following packages are installed.
sudo apt-get install policykit-1 devicekit-power
Now run "pkaction" and verify that the following are present.
org.freedesktop.devicekit.power.suspend org.freedesktop.consolekit.system.stop
Create a file /var/lib/polkit-1/localauthority/50-local.d/custom-actions.pkla with the following contents:
[Actions for xbmc user] Identity=unix-user:xbmc Action=org.freedesktop.devicekit.power.*;org.freedesktop.consolekit.system.* ResultActive=yes ResultAny=auth_admin ResultInactive=yes
Disable Usbcore Autosuspend
Add a boot option to grub to disable the usbcore autosuspend. This bug exhibits itself as immediately waking after suspension.
Edit /etc/default/grub and add usbcore.autosuspend=-1 to GRUB_CMDLINE_LINUX_DEFAULT. Example:
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash xbmc=autostart,noredir usbcore.autosuspend=-1"
Update grub:
sudo update-grub
More PolicyKit Settings
sudo polkit-auth --user xbmc --grant org.freedesktop.hal.power-management.suspend sudo polkit-auth --user xbmc --grant org.freedesktop.hal.power-management.hibernate sudo polkit-auth --user xbmc --grant org.freedesktop.hal.power-management.reboot sudo polkit-auth --user xbmc --grant org.freedesktop.hal.power-management.shutdown sudo polkit-auth --user xbmc --grant org.freedesktop.hal.power-management.reboot-multiple-sessions sudo polkit-auth --user xbmc --grant org.freedesktop.hal.power-management.shutdown-multiple-sessions
Remote Suspend / Wake
Using an IR remote to suspend and wake your XBMC HTPC is much easier than getting off the couch.
Enable Wake on USB Activity
If your IR receiver is plugged into a USB port. You can have Linux recognize IR traffic on the USB bus as a signal to wake XBMC. This method can have the drawback of waking XBMC unnecessarily because you're using the remote for other devices.
First find which USB bus your IR receiver is connected to. The command lsusb can be somewhat useful for determining this, or you can just start at 0 and work your way up until you find it. The command to wake upon USB traffic is:
sudo sh -c 'echo "USB0" > /proc/acpi/wakeup'
Replace USB0 with USB1 and so on until you find it. Once you do, add it to your startup by editing /etc/rc.local and putting the following line before exit 0.
echo "USB0" > /proc/acpi/wakeup
You can verify this is set after boot by running:
cat /proc/acpi/wakeup
It should show "enabled" in the 3rd column after the device you set.
Enable Wake on Other Devices
Use an Xbox Remote Start-up Kit
There are a few kits out there that can be soldered into a classic Xbox to enable power-on by pressing a set remote button on the Xbox DVD kit. These can be adapted to a PC, and carries the advantage of working regardless of the state of the system in the same way a power button does.
One example of how to install a XERC 2 XE is located here.
Fix the Lirc Device Increment Bug
If your IR remote does not work after waking from sleep, you most likely have this bug. The IR software for Linux, Lirc, will create a new device /dev/lirc1 because it presumes the old device /dev/lirc0 is in use by another process. This confuses XBMC and you end up with a non-working remote. The solution is to shutdown Lirc before suspension and then start it back up after wake. This is done by creating a script at /etc/pm/sleep.d/90_lirc :
#!/bin/sh # Script to disable lirc before suspend and restart after wake. case "${1}" in suspend|hibernate) /etc/init.d/lirc stop ;; resume|thaw) /etc/init.d/lirc start ;; esac
Make sure the script is executable:
chmod 755 /etc/pm/sleep.d/90_lirc