How can I know which of the /dev/input/eventX (X=0..7) have the Linux input stream?

Viewed 77014

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?

6 Answers

I know it's a little late to reply but I hope this is helpful for friends.

“mice” contains mouse input data, but to find the file related to the keyboards we need to check the files in folder “by-path”, keyboards file names end with “event-kbd”. We need to find the links to the keyboards, and then we can find the keyboards event file. The following commands can do this automatically for us:

kbdEvents=($(ls /dev/input/by-path | grep "event-kbd"))     
for forCounter in "${kbdEvents[@]}"
do
    eventFile=$(readlink --canonicalize "/dev/input/by-path/${forCounter}")     
    # do anything ...
done

This code is part of the code for the break time on my personal website : mazKnez.com

Following the others hints and some trial and error as I ain't a bash wizard, this is how I am using to get the inputXX of my bluetooth controller, to use with xboxdrv tool. Any other case that uses the /dev/input/eventXX and that shows up in cat /proc/bus/input/devices will also work.

#!/bin/bash
event="`sudo cat /proc/bus/input/devices | grep -Poz '("STK-7007F1"[\s\S]+?)\Kevent\d+'`"
echo $event #event26, for example

You may use other commands instead of echo. The "STK-7007FI" is how my controller is named when running cat /proc/bus/input/devices. The script will throw a warning regarding a null char or something for some reason beyond my linux commands knowledge, but it works fine even with it.

The -Poz flag in grep is to use multiline regex. The \K is a working alternative for lookbehind. There may be better ways to do it, but that's what I came up with.

Related