How can I know which of the /dev/input/eventx (x=0..7) have the Linux input stream?
http://stackoverflow.com/questions/6990978/how-can-i-know-which-of-the-dev-input-eventx-x-0-7-have-the-linux-input-stre
|
thanks for reading my question. I am trying to capture linux keyboard/mouse input, and I am reading events from like /dev/input/event2. But it seems the input are sometimes directed to /dev/input/event2, sometimes to /dev/input/event3. I wonder if there is a place I can find out which of the stream has the input? |
Just stumbled across this -- rather late in the day.
You can find out the names and other attributes of different devices using:
cat /proc/bus/input/devices
Run this in Terminal, it will work just fine:
cat /proc/bus/input/devices | awk '/keyboard/{for(a=0;a>=0;a++){getline;{if(/kbd/==1){ print
$NF;exit 0;}}}}'
http://www.thelinuxdaily.com/2010/05/grab-raw-keyboard-input-from-event-device-node-devinputevent/
Grab Raw Keyboard Input from Event Device Node (/dev/input/event)
The following is a quick c program that will capture raw keyboard data from the event device node such as /dev/input/event1. Simply compile and run with the specific device node as an argument. ie. ./keyboard_key_capture /dev/input/event1.
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
|
#include <stdio.h>#include <stdlib.h>#include <string.h>#include <unistd.h>#include <errno.h>#include <fcntl.h>#include <dirent.h>#include <linux/input.h>#include <sys/types.h>#include <sys/stat.h>#include <sys/select.h>#include <sys/time.h>#include <termios.h>#include <signal.h>void handler (int sig){ printf ("nexiting...(%d)n", sig); exit (0);}void perror_exit (char *error){ perror (error); handler (9);}int main (int argc, char *argv[]){ struct input_event ev[64]; int fd, rd, value, size = sizeof (struct input_event); char name[256] = "Unknown"; char *device = NULL; //Setup check if (argv[1] == NULL){ printf("Please specify (on the command line) the path to the dev event interface devicen"); exit (0); } if ((getuid ()) != 0) printf ("You are not root! This may not work...n"); if (argc > 1) device = argv[1]; //Open Device if ((fd = open (device, O_RDONLY)) == -1) printf ("%s is not a vaild device.n", device); //Print Device Name ioctl (fd, EVIOCGNAME (sizeof (name)), name); printf ("Reading From : %s (%s)n", device, name); while (1){ if ((rd = read (fd, ev, size * 64)) < size) perror_exit ("read()"); value = ev[0].value; if (value != ' ' && ev[1].value == 1 && ev[1].type == 1){ // Only read the key press event printf ("Code[%d]n", (ev[1].code)); } } return 0;} |
Here is an example output from running the above command. Notice that Code[] is printed before the key that was pressed.
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
# ./keyb_key_cap_x86 /dev/input/by-id/usb-Dell_Dell_USB_Keyboard-event-kbd Reading From : /dev/input/by-id/usb-Dell_Dell_USB_Keyboard-event-kbd (Dell Dell USB Keyboard)Code[30]aCode[48]bCode[46]cCode[32]dCode[18]eCode[33]fCode[34]gCode[35]hCode[23]iCode[36]jCode[37]kCode[38]lCode[50]mCode[49]nCode[24]oCode[25]pCode[16]qCode[19]rCode[31]sCode[20]tCode[22]uCode[47]vCode[17]wCode[45]xCode[21]yCode[44]zCode[2]1Code[3]2Code[4]3Code[5]4Code[6]5Code[7]6Code[8]7Code[9]8Code[10]9Code[11]0 |
This is only an example program that I picked up from work. I hope it will be of use to somebody out there so it can quickly help you get started with your project.
|
To find out, go to /dev/input/by-id or /dev/input/by-path and do a Also, i thought it would be helpful for all those who come across this page to find this helpful link to some code which captures keyboard events. |

浙公网安备 33010602011771号
/dev/input/by-idor/dev/input/by-path, they have symbolic links to the right/dev/input/event<x>. – n.m. Aug 9 '11 at 6:35