Acpi hotkeys

From ArchWiki

Jump to: navigation, search


Contents

[edit] Summary

There are many guides on how to configure multimedia hotkeys using program such as xev or keyTouch. However, this guide explains how to use the simple utility of acpi_listen and generate your own script for hotkeys.

[edit] Who Should be Using This Guide

This guide assumes that you know your keyboard signals through acpi. If you do not know whether or not this is the case, I suggest looking:

[edit] Installing Necessary Tools

You should already have these tools installed, but just to make sure you will need

sudo pacman -S acpi acpid acpitool

Refer to this guide on what modules you should load (i.e. through /etc/rc.conf or modprobe)

[edit] Using acpi_listen

Under root, or with sufficient access to the input devices, run:

acpi_listen

If pressing a special key, such as previous or next, receives a response that looks similar to:

hkey VALZ 00000000 00000b31

then all is well and we can continue.

[edit] Configuring ACPID

The ACPI daemon reacts to ACPI events according to the 'handler.sh' file. This is located in

/etc/acpi/handler.sh

You can either directly edit this file, to react to the ACPI events, or you can point it to another shell script (i.e. /etc/acpi/hotkeys.sh)

Under the section

case "$1" in

Add the following lines:

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
	;;

The '00000b31' etc. values are the response received from acpi_listen. In 'hkey VALZ 00000000 00000b31', $4 is the final part, which was what distinguished my keys apart.

Also, the exailectl script is a brief shell script I created for controlling Exaile music player. As the ACPID is run from root, you will need to use

sudo -u (username) exaile

for example, otherwise it will not detect your user-level program and recreate another.


[edit] Old: Sample Script

As keyTouch and other keyboard programs did not work for me, or did not work effectively, prior to editing my handler.sh file I created my own script that runs in the background and reacts directly from the output of acpi_listen. However it is a poor method to use, caused my laptop to be constantly active and noisy. I have provided the script here anyway, feel free to use it / modify it to suit your needs and post suggestions on how it can be improved. Currently, it is setup for a Toshiba Satellite A50 laptop to control exaile, but can be modified very easily for Amarok, Xine or other non-music related functions (internet, email).

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

Note: This does not need to be run as root if you can receive an acpi_listen response from a user account (again, meaning you have access to the input devices).

Personal tools