Getting the Kindle to change its screensaver is as simple as running /usr/bin/powerd_test -p twice. The script to do so:
/usr/bin/powerd_test -p | |
sleep 3 | |
/usr/bin/powerd_test -p |
I wanted the screensaver to be changed every 3 hours, excluding nighttime. It's a matter of appending to /etc/crontab/root:
0 9 * * * /mnt/us/changeSS.sh | |
0 12 * * * /mnt/us/changeSS.sh | |
0 15 * * * /mnt/us/changeSS.sh | |
0 18 * * * /mnt/us/changeSS.sh | |
0 21 * * * /mnt/us/changeSS.sh |
Then I ran into a pesky problem. The screensaver changer works if I ran it manually. It doesn't work via the cron job. Or rather, I discovered that the Kindle goes to sleep after 1 minute in screensaver mode.
After fiddling with /usr/bin/powerd_test -s for quite some time I discovered the following. The Kindle has 4 power levels: Active, Screen Saver, Ready to suspend, and sleep. Active stays on for 10 minutes, Screen Saver stays on for 1 minute, and Ready to suspend stays on for 5 seconds. This is my log:
[root@kindle root]# /usr/bin/powerd_test -s | |
Powerd state: Active | |
Remaining time in this state: 581.725642 | |
defer_suspend:1 | |
suspend_grace:0 | |
prevent_screen_saver:0 | |
drive_mode:unknown | |
Battery Level: 88% | |
Last batt event at: 88% | |
Charging: No | |
batt_full=0 | |
Battery logging: On | |
[root@kindle root]# /usr/bin/powerd_test -s | |
Powerd state: Screen Saver | |
Remaining time in this state: 56.331120 | |
defer_suspend:1 | |
suspend_grace:0 | |
prevent_screen_saver:0 | |
drive_mode:unknown | |
Battery Level: 88% | |
Last batt event at: 88% | |
Charging: No | |
batt_full=0 | |
Battery logging: On | |
[root@kindle root]# /usr/bin/powerd_test -s | |
Powerd state: Screen Saver | |
Remaining time in this state: 0.984457 | |
defer_suspend:1 | |
suspend_grace:0 | |
prevent_screen_saver:0 | |
drive_mode:unknown | |
Battery Level: 88% | |
Last batt event at: 88% | |
Charging: No | |
batt_full=0 | |
Battery logging: On | |
[root@kindle root]# /usr/bin/powerd_test -s | |
Powerd state: Ready to suspend | |
Remaining time in this state: 4.947582 | |
defer_suspend:0 | |
suspend_grace:0 | |
prevent_screen_saver:0 | |
drive_mode:unknown | |
Battery Level: 88% | |
Last batt event at: 88% | |
Charging: No | |
batt_full=0 | |
Battery logging: On |
I can wake up my Kindle via the command "lipc-set-prop com.lab126.powerd wakeUp 1" provided it is in one of those 3 states. To try and suspend my Kindle in the "ScreenSaver" or "Ready to suspend" state for as long as possible, I investigated the seemingly useless property, deferSuspend, from com.lab126.powerd. When you run it, it gives the error:
com.lab126.powerd failed to set value for property deferSuspend (0x8 lipcErrNoSuchProperty)
I discovered that the property can only be set DURING THE READY TO SUSPEND STATE. That means after 11 minutes of leaving the Kindle alone I have a 5 second window to change the time left in "Ready to Suspend" state. See my logs:
csuspend_grace:0 | |
prevent_screen_saver:0 | |
drive_mode:unknown | |
Battery Level: 88% | |
Last batt event at: 88% | |
Charging: No | |
batt_full=0 | |
Battery logging: On | |
com.lab126.powerd failed to set value for property deferSuspend (0x8 lipcErrNoSu chProperty) | |
[root@kindle root]# /usr/bin/powerd_test -s; lipc-set-prop com.lab126.powerd def | |
erSuspend 1000 | |
^[[APowerd state: Screen Saver | |
Remaining time in this state: 0.124960 | |
defer_suspend:0 | |
suspend_grace:0 | |
prevent_screen_saver:0 | |
drive_mode:unknown | |
Battery Level: 88% | |
Last batt event at: 88% | |
Charging: No | |
batt_full=0 | |
Battery logging: On | |
com.lab126.powerd failed to set value for property deferSuspend (0x8 lipcErrNoSu chProperty) | |
[root@kindle root]# /usr/bin/powerd_test -s; lipc-set-prop com.lab126.powerd def | |
erSuspend 1000 | |
Powerd state: Ready to suspend | |
Remaining time in this state: 4.070775 | |
defer_suspend:0 | |
suspend_grace:0 | |
prevent_screen_saver:0 | |
drive_mode:unknown | |
Battery Level: 88% | |
Last batt event at: 88% | |
Charging: No | |
batt_full=0 | |
Battery logging: On | |
[root@kindle root]# /usr/bin/powerd_test -s; lipc-set-prop com.lab126.powerd def | |
erSuspend 1000 | |
Powerd state: Ready to suspend | |
Remaining time in this state: 999.684285 | |
defer_suspend:1 | |
suspend_grace:0 | |
prevent_screen_saver:0 | |
drive_mode:unknown | |
Battery Level: 88% | |
Last batt event at: 88% | |
Charging: No | |
batt_full=0 | |
Battery logging: On | |
[root@kindle root]# /usr/bin/powerd_test -s; lipc-set-prop com.lab126.powerd def | |
erSuspend 3000000 | |
Powerd state: Ready to suspend | |
Remaining time in this state: 995.529458 | |
defer_suspend:1 | |
suspend_grace:0 | |
prevent_screen_saver:0 | |
drive_mode:unknown | |
Battery Level: 88% | |
Last batt event at: 88% | |
Charging: No | |
batt_full=0 | |
Battery logging: On | |
[root@kindle root]# /usr/bin/powerd_test -s; lipc-set-prop com.lab126.powerd def | |
erSuspend 3000000 | |
Powerd state: Ready to suspend | |
Remaining time in this state: 2999997.991570 | |
defer_suspend:1 | |
suspend_grace:0 | |
prevent_screen_saver:0 | |
drive_mode:unknown | |
Battery Level: 88% | |
Last batt event at: 88% | |
Charging: No | |
batt_full=0 | |
Battery logging: On | |
[root@kindle root]# |
My screensaver changing script ended up as:
lipc-set-prop com.lab126.powerd wakeUp 1 | |
sleep 3 | |
/usr/bin/powerd_test -p | |
a=0 | |
while [ $a -lt 50 ] | |
do | |
lipc-set-prop com.lab126.powerd deferSuspend 86400 | |
sleep 2 | |
a=`expr $a + 1` | |
done |
Hello,
ReplyDeletewhy 86400?