ACPI 快捷键 (简体中文)
From ArchWiki
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账户去做.(只要您拥有访问输入装置的权限即可).