ACPI 快捷键 (简体中文)

From ArchWiki

Jump to: navigation, search


i18n
English
简体中文


Contents

概要

有许多指南讲如何通过xev或keyTouch这样的软件来设置多媒体快捷键.然而这篇指南将向您介绍一种通过使用简单实用的acpi_listen命令来创建您的快捷键动作脚本.(译者注:acpi_listen在acpid包中).

谁适用本指南

这篇指南假定您知道ACPI的对应的键盘信号.如果您不知道或者您的情况没有被列出来,推荐您查看如下资料:

安装必要工具

您可能已经安装了这些工具了,但是还是确认一下您已经安装了这些软件acpi acpid acpitool,如果没有安装,用下面命令安装它们.

sudo pacman -S acpi acpid acpitool

查看上面列表 您应该加载什么模块 (通过如下方式装载: 编辑 /etc/rc.conf 或 手动 modprobe)

使用 acpi_listen

使用root用户,或者有足够权限访问输入设备, 执行命令:

acpi_listen

试着按下一个特殊键,比如Forward或者Back,接收到的反馈如果跟下面类似:

hkey VALZ 00000000 00000b31

那说明一切正常,我们可以往下继续.

配置 ACPID

ACPI 的守护进程(daemon)对ACPI事件的作用是根据'handler.sh'文件的.该文件位于

/etc/acpi/handler.sh

您可以直接编辑该文件, 将快捷键反应到ACPI事件, 或者您也可以将这些快捷键指向别的自己定义的一些脚本 (例如: /etc/acpi/hotkeys.sh)

在这行之下

case "$1" in

添加如下行的内容:

hkey)
	case "$4" in
		00000b31)
		echo "PreviousButton pressed!"
		exailectl p
		;;
	00000b32)
		echo "NextButton pressed!"
		exailectl n
		;;
	00000b33)
		echo "Play/PauseButton pressed!"
		exailectl pp
		echo "executed.."
		;;
	00000b30)
		echo "StopButton pressed!"
		exailectl s
		;;
	*)
		echo "Hotkey Else: $4"
		;;
	esac
	;;

这个 '00000b31' 之类的值就是通过acpi_listen监听到的快捷键的值. 在acpi_listen监听到的值中'hkey VALZ 00000000 00000b31', $4也就是最后部分, 就是区别于其他键的部分.

并且,我为了控制Exaile音乐播放器写了一个简单的 exailectl 脚本. 因为ACPID是在root级别的守护进程, 所以您需要用下面方式来写控制脚本

sudo -u (用户名) exaile

不然的话,快捷键的动作不会检测到您的用户正在运行的程序,它就会去重新启动另一个程序而不是对当前的程序作出反应.


旧:脚本示例

因为修改handler.sh之前KeyTouch和别的一些快捷键管理软件在我的机器上不能工作, 或工作的不正常,所以我想创建一个适合我自己的脚本放在后台运行,并针对acpi_listen的事件直接作出反应. 这是一个很可怜的办法,因为这个办法使得我的笔记本电脑不停的吵闹(译者:唱歌?).我把它放到这里来, 大家请随意下载修改以适用于您的情况,同时欢迎大家提出一些建议. 现在,这个设定是适用在 Toshiba Satellite A50 笔记本上用来控制 exaile 的, 但是也可以很方便的修改成用来控制Amarok, Xine 或者其他跟音乐播放没有关系的功能,例如(互联网浏览器,电子邮件等).

export STOP_MYHOTKEY=0
i=`acpi_listen -c 1`
case "$i" in
	"hkey VALZ 00000000 00000b31")
		#echo "PREVIOUS"
		exaile -p
		;;
	"hkey VALZ 00000000 00000b32")
		#echo "NEXT"
		exaile -n
		;;
	"hkey VALZ 00000000 00000b33")
		exaile -t
		;;
	"hkey VALZ 00000000 00000b30")
		#echo "STOP"
		exaile -s
		;;
	*)
		#echo "ELSE: $i"
		;;
esac
e=`echo $STOP_MYHOTKEY`
if [ "$e" != "1" ]
then
	./myHotkey.sh &
fi

注意: 如果您的普通用户可以运行acpi_listen,并不是必须要用root账户去做.(只要您拥有访问输入装置的权限即可).

Personal tools