在ThinkPad T23上使用Slackware Linux

--配置 ACPID和ThinkPad功能键

Author:Cherife Li

简介

一般地,acpid从/etc/acpi/events/目录下读取内容并执行/etc/acpi/actions/下面的脚本,并把所有执行的动作记录在/var/log/acpid文件里。

前提条件

在内核里启用了ACPI电源管理支持。
		[*] ACPI Support
[*] Sleep States
<*> AC Adapter
<*> Battery
<*> Button
<*> Video
<*> Generic Hotkey (EXPERIMENTAL)
<*> Fan
<*> Dock
<*> Processor
<*> Thermal Zone
<M> IBM ThinkPad Laptop Extras
可以直接修改.config文件的以下部分:
		#
# Power management options (ACPI, APM)
#
CONFIG_PM=y
# CONFIG_PM_LEGACY is not set
# CONFIG_PM_DEBUG is not set
# CONFIG_PM_SYSFS_DEPRECATED is not set
# CONFIG_SOFTWARE_SUSPEND is not set

#
# ACPI (Advanced Configuration and Power Interface) Support
#
CONFIG_ACPI=y
CONFIG_ACPI_SLEEP=y
CONFIG_ACPI_SLEEP_PROC_FS=y
# CONFIG_ACPI_SLEEP_PROC_SLEEP is not set
CONFIG_ACPI_AC=y
CONFIG_ACPI_BATTERY=y
CONFIG_ACPI_BUTTON=y
CONFIG_ACPI_VIDEO=y
CONFIG_ACPI_HOTKEY=y
CONFIG_ACPI_FAN=y
CONFIG_ACPI_DOCK=y
CONFIG_ACPI_PROCESSOR=y
CONFIG_ACPI_THERMAL=y
# CONFIG_ACPI_ASUS is not set
CONFIG_ACPI_IBM=m
# CONFIG_ACPI_TOSHIBA is not set
CONFIG_ACPI_BLACKLIST_YEAR=0
# CONFIG_ACPI_DEBUG is not set
CONFIG_ACPI_EC=y
CONFIG_ACPI_POWER=y
CONFIG_ACPI_SYSTEM=y
CONFIG_X86_PM_TIMER=y
# CONFIG_ACPI_CONTAINER is not set
上面的<M> IBM ThinkPad Laptop Extras(CONFIG_ACPI_IBM=m)即是ibm-acpi,从kernel 2.6.10 之后集成到内核里。如果你的kernel比较老,可以去http://ibm-acpi.sourceforge.net/去看看并下载。
如果修改了.config文件,重新编译一次内核。
如果IBM ThinkPad Laptop Extras编译成了模块的形式,需要在开机的时候加载他,这里有一个脚本/etc/rc.d/rc.ibm-apci供参考:
		#!/bin/sh
# ibm-acpi - Support special ACPI events on IBM Thinkpads
# $Id: ibm-acpi.init,v 1.3 2004/10/14 10:42:38 dws Exp $

case "$1" in
start|reload|restart|force-reload)
;;
stop)
exit
;;
*)
exit
;;
esac

# load the module
/sbin/modprobe ibm_acpi

# successful?
[ -d /proc/acpi/ibm ] || exit

echo enable,0xffff >/proc/acpi/ibm/hotkey
然后可以把rc.ibm-apci放到rc.M里面。当然别忘了/etc/rc.d/rc.acpid为可执行。
还需要ACPID package,slackcware 11.0 最新的是acpid-1.0.4-i486-2,这个包一般系统里都装上了。

几个例子

1 FN+F3 关闭LCD

执行该动作需要对screen有执行控制的权限,执行xhost +local:root,可以把root换成你的用户名。
还需要在 /etc/X11/XF86Config 或者 /etc/X11/xorg.conf 配置文件里的Monitor部分加上Option "DPMS"。

/etc/acpi/events/f3
		event=ibm/hotkey HKEY 00000080 00001003
action=/etc/acpi/actions/f3.sh %e
/etc/acpi/actions/f3.sh
		#!/bin/bash

# default display on current host
DISPLAY=:0.0

# find out if DPMS is enabled
STATUS=`/usr/X11R6/bin/xset -display $DISPLAY -q | grep -e 'DPMS is'`

# enable DPMS if disabled
if [ "$STATUS" == " DPMS is Disabled" ]
then
echo "Enabling DPMS ..."
/usr/X11R6/bin/xset -display $DISPLAY +dpms
fi

# find out if the monitor is on
STATUS=`/usr/X11R6/bin/xset -display $DISPLAY -q | grep 'Monitor'`

if [ "$STATUS" == " Monitor is On" ]
then
echo "[`date`] Turning display OFF"
/usr/X11R6/bin/xset -display $DISPLAY dpms force off
else
echo "[`date`] Turning display ON"
/usr/X11R6/bin/xset -display $DISPLAY dpms force on # turn monitor on
/usr/X11R6/bin/xset -display $DISPLAY s activate # un-blank monitor
fi
exit 0
2 FN+F4 待机

/etc/acpi/events/f4
		event=ibm/hotkey HKEY 00000080 00001004
action=/etc/acpi/actions/f4.sh %e
/etc/acpi/actions/f4.sh
		#!/bin/bash

FGCONSOLE=`fgconsole`
chvt 8
sync
hwclock --systohc

echo -n "mem" > /sys/power/state

hwclock --hctosys
vbetool post

if [ "$FGCONSOLE" -ge "7" ] ; then
chvt $FGCONSOLE
else
chvt 7
chvt $FGCONSOLE
fi
3 POWER 键关机

/etc/acpi/events/power
		event=button/power PWRF 00000080 xxxxxxxx
action=/etc/acpi/actions/power.sh %e
/etc/acpi/actions/power.sh
		#!/bin/sh
# power down the system
/sbin/halt -p

参考文档

http://www.thinkwiki.org/wiki/APM_vs._ACPI
http://www.thinkwiki.org/wiki/How_to_get_special_keys_to_work
http://www.thinkwiki.org/wiki/Problem_with_display_remaining_black_after_resume

The End.

Valid XHTML & CSS|©2008 dOtImes.cOm, All rights reserved.|Creative Commons|Linux on Laptops| TuxMobil|Firefox
Google™ Powered
Posted and Maintained by Cherife Li
Last Update: Sunday, 2007-10-07, 1:05, GMT+0800.