.____ .__ .___ __ | | |__| ____ __ _____ ___ /\ /\ | | ____ ______ __ ___/ |_ | | | |/ \| | \ \/ / \/ \/ | |/ \\____ \| | \ __\ | |___| | | \ | /> < /\ /\ | | | \ |_> > | /| | |_______ \__|___| /____//__/\_ \ \/ \/ |___|___| / __/|____/ |__| \/ \/ \/ \/|__| a pure-perl interface to Linux's input system .oO( What's this about Linux's input system? ) If your Linux kernel is version 2.6.0 or higher, go look in /dev/input. You might see something like this: total 0 crw-r--r-- 1 root root 13, 64 Dec 31 1969 event0 crw-r--r-- 1 root root 13, 65 Dec 31 1969 event1 crw-r--r-- 1 root root 13, 66 Dec 31 1969 event2 crw-r--r-- 1 root root 13, 67 Dec 31 1969 event3 crw------- 1 beppu root 13, 0 Dec 31 1969 js0 crw-r--r-- 1 root root 13, 63 Dec 31 1969 mice crw-r--r-- 1 root root 13, 32 Dec 31 1969 mouse0 The Linux kernel has implemented a nice system whereby you open one of these files and wait for events to happen. When an event happens, the kernel will write a predictably sized C structure to these virtual files. This works for practically every input device that Linux supports, whether it be a keyboard, a mouse, a joystick or whatever. Just `cat /proc/bus/inputs/devices` to see what you have at your disposal. [ XXX - to be continued ] Furthermore, this system lets you receive makes and breaks which are really useful for anyone trying to write an application that needs to handle complex input sequences (like a game). .oO( Why do I like it so much? ) It's like a Grand Unified Input System that fits perfectly into the everything-is-a-file model that Unix users have come to know and love. It'll take any input device, regardless of what bus it's connected to and make it so that you, the programmer, can treat them equally in your code. It's also super simple to program for. And now, with this Perl module, it's become even easier. .oO( What does this perl module distribution provide? ) Linux::Input This is the main class that lets you access the input system. `perldoc Linux::Input` for the details. Linux::Input::Joystick This is a subclass of Linux::Input that reads joystick events. They are very similar to the universal catch-all events, but not quite the same. This particular interface existed from around the 2.2 series, and the new input system is a direct descendant of this work. When you use this module, you'll want to read from joystick device files. They're typically named like: /dev/input/js0 /dev/input/js9 /dev/js0 /dev/js1 NOTE: You don't have to use Linux::Input::Joystick to access joysticks. You can use Linux::Input for joysticks, too. However, you will not be reading from joystick device files. Instead, you will read from one of the event device files. evtest.pl After you install this distribution, try typing: evtest.pl /dev/input/event* Then, move you mouse, push some keys, move your gamepad around, etc.... This will help figure out if this distribution works on your system. Special thanks to Vojtech for creating this system in the first place. I hope other Unixes implement it, too.