LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
123
返回列表 发新帖
楼主: windrose

slackware中设置用电源键直接关机

[复制链接]
发表于 2004-11-27 15:36:25 | 显示全部楼层
acpi...
每次都让我的硬盘“吧吱”一声,让我胆战心惊,最终还是使用apm
发表于 2004-11-27 17:06:55 | 显示全部楼层
有时候直接拔电线,重启时也没有什么..........
发表于 2004-11-29 11:47:11 | 显示全部楼层
没有读写硬盘的时候拨电源一般不会出问题。
 楼主| 发表于 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的内容是(除去所有注释):

  1. event=.*
  2. action=/etc/acpi/acpi_handler.sh %e
复制代码

意思是,把所有事件都交给 /etc/acpi/acpi_handler.sh 处理。
再看看 /etc/acpi/acip_handler.sh 的内容:

  1. #!/bin/sh
  2. # Default acpi script that takes an entry for all actions

  3. IFS=${IFS}/
  4. set $@

  5. case "$1" in
  6.   button)
  7.     case "$2" in
  8.       power) /sbin/init 0
  9.          ;;
  10.       *) logger "ACPI action $2 is not defined"
  11.          ;;
  12.     esac
  13.     ;;
  14.   *)
  15.     logger "ACPI group $1 / action $2 is not defined"
  16.     ;;
  17. esac
复制代码

虽然我对shell脚本不熟,也看得出一旦捕获了 button.power 这个事件就执行 /sbin/init 0 ,即poweroff。因此按下电源开关和输入poweroff命令将得到同样的结果。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表