|
楼主 |
发表于 2010-10-1 19:02:25
|
显示全部楼层
才发现,其实sleepd基本就符合我的要求,实现思路和我的脚本也几乎一样:https://bbs.archlinux.org/viewtopic.php?id=98965不过从aur直接构建的版本启动后直接退出。
strace跟踪发现,sleepd访问/proc/acpi/battery以及/proc/acpi/ac_adapter获取当前电源模式,但我的内核没有编译/proc/acpi支持(内核不推荐特性),所以ac模块加载失败,不存在上述proc入口。
研究一下sleepd源码,因为作者耍了一个小聪明
if (acpi_batt_count == 0) {
/* Where else would the power come from, eh? ;-) */
假设没有电池就肯定是交流供电模式,前提是要增加--ac-unused=睡眠时间参数。
因此内部逻辑并没有用到这两个proc入口,只要屏蔽掉sleepd.c检查失败退出代码就可以正常运行(643行):
else {
fprintf(stderr, "sleepd: no APM or ACPI support detected\n");
//exit(1);
}
arch系统配置/etc/conf.d/sleepd:
# This is a configuration file for /etc/rc.d/sleepd
# Parameters to pass to sleepd
# --unused=number_of_seconds_idling_before_sleep (default=600)
# --ac-unused=number_of_seconds_idling_on_AC_before_sleep (default=)
# --battery=percentage_below_which_to_sleep_or_hibernate
# --sleep-command=... (with acpi, defaults to hibernate --force)
# --hibernate-command=... (default is to use --sleep-command)
PARAMS=(
"--unused=900"
"--ac-unused=900"
"--battery=2"
"--sleep-command=/usr/sbin/pm-suspend"
# "--sleep-command=/usr/sbin/pm-suspend --quirk-vbestate-restore"
#"--hibernate-command=/usr/sbin/pm-hibernate"
) |
|