|
楼主 |
发表于 2005-1-10 23:17:14
|
显示全部楼层
在网上找了些资料,在Slackware 10 + kernel 2.6.7上也实现了这个功能
1.安装带ACPI支持的内核,保证 /etc/rc.d/rc.acpid 的可执行属性,必要时 chmod +x /etc/rc.d/rc.acpid
2.假如编译内核时,acpi支持的button项编译成了模块(CONFIG_ACPI_BUTTON=M),那么在 /etc/rc.d/rc.local 中添加一句:
/sbin/modprobe button
假如直接编译进了内核(CONFIG_ACPI_BUTTON=y),就不需要了;
如果没有选择button选项(CONFIG_ACPI_BUTTON=),则需要重新编译内核。
重新启动系统之后,按电源开关,系统应该执行poweroff过程并自动关机。
button 模块的作用是捕获“按下电源开关”的事件,然后根据 /etc/acpi/events/default 之中的规定,对事件进行处理。
/etc/acpi/events/default的内容是(除去所有注释):
- event=.*
- action=/etc/acpi/acpi_handler.sh %e
复制代码
意思是,把所有事件都交给 /etc/acpi/acpi_handler.sh 处理。
再看看 /etc/acpi/acip_handler.sh 的内容:
- #!/bin/sh
- # Default acpi script that takes an entry for all actions
- IFS=${IFS}/
- set $@
- case "$1" in
- button)
- case "$2" in
- power) /sbin/init 0
- ;;
- *) logger "ACPI action $2 is not defined"
- ;;
- esac
- ;;
- *)
- logger "ACPI group $1 / action $2 is not defined"
- ;;
- esac
复制代码
虽然我对shell脚本不熟,也看得出一旦捕获了 button.power 这个事件就执行 /sbin/init 0 ,即poweroff。因此按下电源开关和输入poweroff命令将得到同样的结果。 |
|