Hi, acpid in principle supports button events from the input layer. The problem is just, that the necessary events are not defined. This is from Debian's acpid (1.0.10-2) in file input_layer.c:
static struct evtab_entry evtab[] = { {{{0,0}, EV_KEY, KEY_POWER, 1}, "button/power PBTN 00000080 00000000"}, {{{0,0}, EV_KEY, KEY_SLEEP, 1}, "button/sleep SBTN 00000080 00000000"}, {{{0,0}, EV_KEY, KEY_SUSPEND, 1}, "button/suspend SUSP 00000080 00000000"}, {{{0,0}, EV_SW, SW_LID, 1}, "button/lid LID close"}, {{{0,0}, EV_SW, SW_LID, 0}, "button/lid LID open"} }; I've recorded all the button events when the Fn key is pressed on my Thinkpad T42p and also merged events found in the version here: http://www.tedfelix.com/linux/acpid-netlink.html With these additions, acpid is able to listen to all Fn button events. So acpid should be patched to include these: static struct evtab_entry evtab[] = { {{{0,0}, EV_KEY, KEY_POWER, 1}, "button/power PBTN 00000080 00000000"}, {{{0,0}, EV_KEY, KEY_SLEEP, 1}, "button/sleep SBTN 00000080 00000000"}, {{{0,0}, EV_KEY, KEY_SUSPEND, 1}, "button/suspend SUSP 00000080 00000000"}, {{{0,0}, EV_SW, SW_LID, 1}, "button/lid LID close"}, {{{0,0}, EV_SW, SW_LID, 0}, "button/lid LID open"}, /* blue access IBM button on Thinkpad T42p*/ {{{0,0}, EV_KEY, KEY_PROG1, 1}, "button/prog1 PROG1 00000080 00000000"}, {{{0,0}, EV_KEY, KEY_VENDOR, 1}, "button/vendor VNDR 00000080 00000000"}, {{{0,0}, EV_KEY, KEY_FN_F1, 1}, "button/fnf1 FNF1 00000080 00000000"}, {{{0,0}, EV_KEY, KEY_FN_F2, 1}, "button/fnf2 FNF2 00000080 00000000"}, /* Fn-F2 produces KEY_BATTERY on Thinkpad T42p */ {{{0,0}, EV_KEY, KEY_BATTERY, 1}, "button/battery BAT 00000080 00000000"}, {{{0,0}, EV_KEY, KEY_SCREENLOCK, 1}, "button/screenlock SCRLCK 00000080 00000000"}, {{{0,0}, EV_KEY, KEY_COFFEE, 1}, "button/coffee CFEE 00000080 00000000"}, {{{0,0}, EV_KEY, KEY_SLEEP, 1}, "button/sleep SBTN 00000080 00000000"}, {{{0,0}, EV_KEY, KEY_WLAN, 1}, "button/wlan WLAN 00000080 00000000"}, {{{0,0}, EV_KEY, KEY_FN_F6, 1}, "button/fnf6 FNF6 00000080 00000000"}, {{{0,0}, EV_KEY, KEY_SWITCHVIDEOMODE, 1}, "button/videomode VMOD 00000080 00000000"}, {{{0,0}, EV_KEY, KEY_FN_F9, 1}, "button/fnf9 FNF9 00000080 00000000"}, {{{0,0}, EV_KEY, KEY_FN_F10, 1}, "button/fnf10 FNF10 00000080 00000000"}, {{{0,0}, EV_KEY, KEY_FN_F11, 1}, "button/fnf11 FNF11 00000080 00000000"}, /* Fn-F9 produces KEY_F24 on Thinkpad T42p */ {{{0,0}, EV_KEY, KEY_F24, 1}, "button/fnf24 FNF24 00000080 00000000"}, {{{0,0}, EV_KEY, KEY_SUSPEND, 1}, "button/suspend SUSP 00000080 00000000"}, {{{0,0}, EV_MSC, 4, 12}, "button/fnbs FNBS 00000080 00000000"}, {{{0,0}, EV_MSC, 4, 13}, "button/fnins FNINS 00000080 00000000"}, {{{0,0}, EV_MSC, 4, 14}, "button/fndel FNDEL 00000080 00000000"}, {{{0,0}, EV_MSC, 4, 18}, "button/fnpgdown FNPGDOWN 00000080 00000000"}, {{{0,0}, EV_KEY, KEY_ZOOM, 1}, "button/zoom ZOOM 00000080 00000000"}, {{{0,0}, EV_KEY, KEY_BRIGHTNESSDOWN, 1}, "button/brightnessdown BRTDN 00000080 00000000"}, {{{0,0}, EV_KEY, KEY_BRIGHTNESSUP, 1}, "button/brightnessup BRTUP 00000080 00000000"}, {{{0,0}, EV_KEY, KEY_KBDILLUMTOGGLE, 1}, "button/kbdillumtoggle KBILLUM 00000080 00000000"}, {{{0,0}, EV_KEY, KEY_VOLUMEDOWN, 1}, "button/volumedown VOLDN 00000080 00000000"}, {{{0,0}, EV_KEY, KEY_VOLUMEUP, 1}, "button/volumeup VOLUP 00000080 00000000"}, /* mute button produces KEY_MIN_INTERESTING on Thinkpad T42p */ {{{0,0}, EV_KEY, KEY_MIN_INTERESTING, 1}, "button/mininteresting MININT 00000080 00000000"} }; Other models might produce different events. They can all be found with `input-events' from the input-utils package. To find the device to listen on, call lsinput and look for the right one. For instance mine shows: # lsinput ... /dev/input/event6 bustype : BUS_HOST vendor : 0x1014 product : 0x5054 version : 16641 name : "ThinkPad Extra Buttons" phys : "thinkpad_acpi/input0" bits ev : EV_SYN EV_KEY EV_MSC ... So I would call `input-events 6' Cheers, harry
signature.asc
Description: PGP signature