- 1 Introduction
- 2 BIOS setup
- 3 Prepare your Linux distribution
- 4 Using /proc/acpi/alarm
- 5 Using /sys/class/rtc/rtc0/wakealarm
- 6 Troubleshooting
- 7 Additional source of info
- 8 Extra Information
- 9 User experience
Most users tend to leave their mythTV system running 24 by 7. This page describes the options you have in Linux to shutdown and automatically wakeup your machine before a recording. A glance at your last electricity bill shows you just how expensive electricity is. You can save energy and money. [read more]
- Your options
- Hardware time switch - a cheap power switch and a simple cronjob to shutdown the machine can do magic.
- Wake On LAN - have another machine on your network wake your mythTV machine
- Use the BIOS - most machines have an option in the BIOS for time-controlled booting
- Use the BIOS
MythTV has a "standard option" to write the date/time of the next recording to the bios. The allows your machine to automatically shutdown (or suspend) and turn on again a few minutes before it needs to record again. The Advanced Configuration and Power Interface (ACPI) specification is an open industry standard first released in December 1996 developed by HP, Intel, Microsoft, Phoenix, and Toshiba that defines common interfaces for hardware recognition, motherboard and device configuration and power management.
The ACPI Real Time Clock Alarm Function can be used on your mythTV system to wake-up your machine at a certain time and/or date.
If you don't have an ACPI-compliant BIOS, you could use nvram-wakeup instead, which is a small program which modifies the BIOS settings memory (NVRAM) directly. (not recommended) All modern BIOSes should support ACPI, however.
If you want to use ACPI to wake up your mythTV system, you first need to ensure that your BIOS has support to wake. Check your BIOS for the alarm function. This setting is likely found under a sub-menu of "Power Management" "APM", or "Advanced" - you just need to poke around to find it. It will likely be called something like Wake from RTC, Wake From Alarm, RTC Resume, etc.
- UTC, localtime and BIOS date format
If supported by your BIOS, set the time to UTC (Coordinated Universal Time). If not supported in the BIOS you need to recalculate the time before you write it to the BIOS. (one hour difference in most cases)
Also check the format of the date and time are stored in the bios. Most likely the format is YYYY-MM-DD HH:MM:SS
Write down these values, can be useful later ;-)
Prepare your Linux distribution
The ACPI interface in Linux has changes with kernel 2.6.22. Make sure you understand what kernel version you are using:
Check your kernel version
- Kernel > 2.6.22 and higher use /sys/class/rtc/rtc0/wakealarm
- Kernel < 2.6.21 and lower use /proc/acpi/alarm
Check if interface exists
Kernel > 2.6.22 and higher use /sys/class/rtc/rtc0/wakealarm
- format of the /sys/class/rtc/rtc0/wakealarm
1. Instead of accepting a formatted time, wakealarm accepts the number of seconds since Jan 1, 1970. (e.g. 1214837639 = Mon Jun 30 16:54)
2. If you want to change the wakealarm time, you first need to reset the time.
If you can't find /sys/class/rtc/rtc0/wakealarm, and you're running a modular kernel, it might be the case that the correct module is not loaded. In that case, make sure the rtc module is unloaded, and then load the rtc-cmos module:
rmmod rtc modprobe rtc-cmos
- Kernel < 2.6.21 and lower use /proc/acpi/alarm
- format of /proc/acpi/alarm
1. Year-month-day hour:min:sec - yyyy-MM-dd hh:mm:ss - (e.g. 2005-12-29 10:10:04)
- ACPI enabled
Check if ACPI is enabled in your kernel and working.
$powersave -S ACPI
Disable hwclock updates
On most machines it's required to make a small change to the Linux shutdown procedure. When your machine goes down, most linux distributions write the system time/data back to the bios. On MANY machines the machines never wakes-up after a time/data update. It's recommended to make this change before you start. See below for more details (distro specific),
Most linux distributions write the current system time back to the bios when shutting down the machine. Some BIOSes refuse to wake up if the hardware clock is modified after the alarm timer has been set. To avoid that the current system time is written back to the hardware clock it required to change your startup scripts. This is distribution specific, so here are some examples:
Set clock_systohc to "NO" in
/etc/sysconfig/clock holds a switch to write back system time to the hardware clock
/etc/init.d/hwclock.sh with the following will fix this problem:
/etc/init.d/halt with the following will fix this problem:
Before making complex scripts, do a simple test to ensure that everything works: Check if the wakeup function works:
The commands set the wakeup time to 5 minute from now, regardless of whether the RTC is in UTC or locatltime and then turns off the machine.
The following example will set the wakeup time to 5 minute from now, regardless of whether the RTC is in UTC or locatltime. You may not see the change in the bios, but it should still work.
- if you are using the /proc/acpi/alarm interface
echo "+00-00-00 00:05:00" > /proc/acpi/alarm
Check that it was written, the format is YYYY-MM-DD HH:MM:SS
If the year part looks like "0007" instead of "2007", change +00 with +2000; Shutdown your machine and wait for it to wakeup
shutdown -h now
Here are the commands to check that you have ACPI working.
$powersave -S ACPI
Check that you have the alarm function in /proc/acpi/alarm. This prints out the RTC Alarm clock from the BIOS. (Note: If you have a 2.6.22+ kernel, see next section instead.)
$cat /proc/acpi/alarm 2005-**-29 10:10:04
Check that you can write a new time to the RTC Clock Alarm (you will need to be Root) Format is YYYY-MM-DD HH:MM:SS
#echo "2005-12-29 10:10:04" >/proc/acpi/alarm
Check that it was written, shut down and wait for it to wakeup.
#cat /proc/acpi/alarm 2005-*12-29 10:10:04 #shutdown -h now
For example (Assuming bios is in localtime):
Wakeup time format: yyyy-MM-dd hh:mm:ss Set wakeuptime command: sudo sh -c 'echo $time > /proc/acpi/alarm'
Beginning with kernel 2.6.22 /proc/acpi/alarm has been removed and replaced with /sys/class/rtc/rtc0/wakealarm. The key differences with the wakealarm interface are:
- Instead of accepting a formatted time, wakealarm accepts the number of seconds since Jan 1, 1970.
- If you want to change the wakealarm time, you first need to reset the time.
- You have to make sure that your bios clock is set to UTC time not localtime otherwise it will wakeup at the wrong time
- Simple test to wake the machine 5 minutes from now
echo 0 > /sys/class/rtc/rtc0/wakealarm echo `date '+%s' -d '+ 5 minutes'` > /sys/class/rtc/rtc0/wakealarm cat /sys/class/rtc/rtc0/wakealarm
This should return some number. Shutdown your computer and see if it comes back up in ~5 min.
shutdown -h now
Integrate into mythTV
- mythtv-setup settings for your script
Block shutdown: (checked, if you run frontend and backend on 1 machine)
Idle Timeout (seconds): 1200 (if you set this to 0, it will disable auto shutdown)
Max wait (minutes): 120
Startup before rec. (seconds): 600
Wakeup time format: time_t
Set wakeuptime command: sudo /usr/bin/setwakeup.sh $time
Server halt command: sudo mythshutdown --shutdown
Pre-shutdown command: sudo mythshutdown --check
- Write the startup script
You'll need to copy/paste the following into your editor:
Change the permissions of the file so that it can execute
chmod +x /usr/bin/setwakeup.sh
If required add the script to your /etc/sudoers
- Another contributed script
This acpi-alarm script will function with the new sys wakealarm interface or the old acpi/alarm interface
If leaving the RTC wakeup alarm on the BIOS worked with the old interface, you may need to disable it when migrating to the new interface.
Getting autostart using alarm can be quite frustrating. Here's some tips on getting it working.
Check your hardware
Check if your BIOS supports ACPI/RTC You will need to have a motherboard that supports both ACPI and a Real Time Clock Alarm Functions in the BIOS. Check your BIOS and look for a tab similar to "Advanced Power management".
The wake-up function is provided on most modern boards by the ability to "wake from RTC alarm" - setting a date and time in BIOS will cause the computer to power itself on and boot at the set time. This setting is likely found under a sub-menu of "Power Management" "APM", or "Advanced" - you just need to poke around to find it. It will likely be called something like Wake from RTC, Wake From Alarm, RTC Resume, etc.
see the initiate manual section
There are a lot of fussy BIOSes out there. If things are still not working for you...try the following:
- 1. Disable/Enable RTC in BIOS
In some cases you need to disable the RTC alarm function is the bios to make things work.
- Another possible glitch is, that the option 'Resume By Alarm' (or whatever it is called) is set to Enabled but wake up using /proc/acpi/alarm only works if the option is set to Disabled. Sounds weird but works with some boards.
- On many boards, when the RTC setting is enabled in the BIOS, it will wake only from a time set and saved from BIOS setup, and not from a time set outside of the BIOS setup environment - as we want. All of the boards the original author of this document needed this setting disabled to correctly wake with ACPI. This is the recommended starting point.
- 2. Time/Date not visible in BIOS
After you have set the RTC alarm from Linux, it could be that you not see changes in the BIOS but it still works.
- 3. Required to write time/date two times
Some users reported that their BIOS is only updated after writing 2 times to the alarm file. (reported with proc/acpi/alarm)
Additional source of info
Activating ACPI support when compiling your own kernel
The setup of /proc/acpi/alarm is done in kernel file drivers/acpi/sleep/proc.c and controlled by the CONFIG_ACPI_SLEEP_PROC_FS flag. You can test support for you architecture by going to you kernel source and do:
$grep -r CONFIG_ACPI_SLEEP_PROC_FS arch/* arch/x86_64/defconfig:CONFIG_ACPI_SLEEP_PROC_FS=y
( Processor type and features ---> [*] Support for hot-pluggable CPUs) so that "CONFIG_HOTPLUG_CPU=y" in the ".config" file. After this it is possible to set ([*] Sleep States) under ACPI support.
Moosylog - March 2007: Works fine with MSI RS482M-IL and openSUSE 10.2 after I made the following change to /etc/sysconfig/clock.....SYSTOHC="yes" to SYSTOHC="no".
Murph - April 2007: Works also great with the Legend QDI Advance 5/133E.
Fuchur - August 2007: Had to replace the wakeup script with the one from http://www.mythwiki.de/index.php?title=HOWTO_Mythwelcome as my mythshutdown produces another time format. Otherwise it seems to work so far.
Mattwire - September 2007: Works fine with MSI K8NGM2-FID and NC6120 laptop running Ubuntu Feisty and Gutsy. Both require modification to /etc/init.d/hwclock.sh to save the wakeup time.
Dumdideldum - September 2007: Works with Epox 8rda+ running Ubuntu Feisty. It is important to disable the wakeup on rtc in the Bios and editing the /etc/init.d/hwclock.sh as described in the Ubuntu guide linked in the section below.
Pkendall - September 2007: Works fine with MSI K9NBPM2-FID running Ubuntu Feisty. As above, edit the hwclock.sh file and make sure Bios RTC wakeup is disabled.
Jmwislez - September 2007: Problem with ASUS P5GD1 motherboard (BIOS v1.014). Writing 'echo "2007-09-09 14:15:00" > /proc/acpi/alarm' works perfectly, reading via 'cat /proc/acpi/alarm' yields the expected '2007-09-09 14:15:00', but the system doesn't start at the specified time. After a manually initiated boot, 'cat /proc/acpi/alarm' yields '2007-09-00 14:15:00', with '00' for the day.
Thewizzard - October 2007: Works with MSI K7N2 Delta-ILSR, be sure to use the hwclock.sh script and have it set the time two times.
Spitzbub - December 2007: Works with Biostar NF325-A7, be sure to modify your /etc/init.d/hwclock.sh script (or equivalent) to set the wake-up time again after the --systohc, as described above under Fussy Bios.
Per Olofsson - December 2007: Works very well with Asus P5GC-VM motherboard and Debian lenny with Linux 2.6.22. I don't use the "fussy BIOS" hack since I only suspend the system instead of shutting it down.
KIB - February 2008: Shuttle XPC model SS58G2 / SS58v10, motherboard FS58V10 works with Mythbuntu 7.10, kernel 2.6.22-14. Required BIOS settings - PM Wake Up Events -> IRQ8:enabled, PCIPME:enabled, Powerup by Alarm:disabled. I use /proc/acpi/alarm interface and the patch to hwclock.sh and hwclockfirst.sh is requred as above. Wake on LAN works as well - just add "ethtool -s eth0 wol umbg" to /etc/rc.local .
imcecil - April 2008: Work for Asus P5n-E SLI Gentoo 2.6.24 configured the Kernel as required above but used time_t as the wakeup time format (time since epoch) which seems to work when echoed straight to /sys/class/rtc/rtc0/wakealarm.
Cymen - April 2008: Works great for PCChips P53G but be sure to only have the rtc-cmos module loaded (not the rtc module -- if rtc module is loaded, unload both rtc and rtc-cmos and then load rtc-cmos again and the device will appear in /sys...). Blacklist the rtc module or don't compile it in (the option in under "character drivers" is the one to be excluded).
Moosylog - June 2008: Works fine with MSI RS482M-IL and openSUSE 11.0