kernc / kernc/logkeys

Wiki Enhancement - How to force correct eventX - needs root

Open
#92 0 comments 0 reactions 0 assignees View on GitHub
auto-migrated Priority-Medium Type-Defect
Dominant language
C++
Stars
834
Forks
254
PR merge metrics
No merged PRs in 30d

Description

```
Hi!

I have a USB keyboard. So Every time my keyboard gets a different input event
device.

I found out how to setup it a very nice way!

First I discovered the device this way:

As root, for each existing device eventX in /dev/input/, where X is a number
between 0 and 31 inclusively, write:

$ cat /dev/input/eventX

then type some arbitrary characters. If you see any output, that is the device
to be used. If you don't see any output, press Ctrl+C and continue with the
next device.

Then I found out this boot it was assigned to the event4!

Then I did:
udevadm info --attribute-walk -n /dev/input/event4 | less

And got this:

-- Start of output
Udevadm info starts with the device specified by the devpath and then
walks up the chain of parent devices. It prints for every device
found, all possible attributes in the udev rules key format.
A rule to match, can be composed by the attributes of the device
and the attributes from one single parent device.

looking at device '/devices/pci0000:00/0000:00:12.0/usb4/4-5/4-5:1.0/input/input4/event4':
KERNEL=="event4"
SUBSYSTEM=="input"
DRIVER==""

looking at parent device '/devices/pci0000:00/0000:00:12.0/usb4/4-5/4-5:1.0/input/input4':
KERNELS=="input4"
SUBSYSTEMS=="input"
DRIVERS==""
ATTRS{name}=="Microsoft Wired Keyboard 600"
ATTRS{phys}=="usb-0000:00:12.0-5/input0"
ATTRS{uniq}==""
ATTRS{modalias}=="input:b0003v045Ep0750e0111-e0,1,4,11,14,k71,72,73,74,75,77,79,7A,7B,7C,7D,7E,7F,80,81,82,83,84,85,86,87,88,89,8A,8C,8E,96,98,9E,9F,A1,A3,A4,A5,A6,AD,B0,B1,B2,B3,B4,B7,B8,B9,BA,BB,BC,BD,BE,BF,C0,C1,C2,F0,ram4,l0,1,2,sfw"

looking at parent device '/devices/pci0000:00/0000:00:12.0/usb4/4-5/4-5:1.0':
KERNELS=="4-5:1.0"
SUBSYSTEMS=="usb"
DRIVERS=="usbhid"
ATTRS{bInterfaceNumber}=="00"
ATTRS{bAlternateSetting}==" 0"
ATTRS{bNumEndpoints}=="01"
ATTRS{bInterfaceClass}=="03"
ATTRS{bInterfaceSubClass}=="01"
ATTRS{bInterfaceProtocol}=="01"
ATTRS{modalias}=="usb:v045Ep0750d0110dc00dsc00dp00ic03isc01ip01"
ATTRS{supports_autosuspend}=="1"
-- End of output (The output is very long, so I truncated the first lines,
because we already got all we need.)

So I created a file /etc/udev/rules.d/10-local.rules
KERNEL=="event?",
ATTRS{modalias}=="usb:v045Ep0750d0110dc00dsc00dp00ic03isc01ip01",
SYMLINK+="input/mskbd1"

This means:
When udev create the device eventX, if one of his parents has the specified
ATTRS{modalias}, then create a symlink input/mskbd1.

After this I created a dir /var/log/logkeys and a file /etc/rc.d/rc.logkeys:
#!/bin/sh
while [ 1 ];
do
PROGRAM1="/usr/local/bin/logkeys"
APPCHK=$(ps aux | grep -c $PROGRAM1)
if [ $APPCHK = '1' ] ; then
#echo logkeys is not running, lets start it
if [ -c /dev/input/mskbd1 ] ; then
#echo the correct device exists, lets start logkeys
DTSTAMP=$(date "+%Y%m%d")
HMSTAMP=$(date "+%H%M")
/usr/local/bin/logkeys -s -m /usr/local/logkeys/pt_BR.map -o /var/log/logkeys/logkeys_${DTSTAMP}_${HMSTAMP}.log -d /dev/input/mskbd1
fi
fi
done

Remember to chmod +x /etc/rc.d/rc.logkeys

This is a spawner that keeps logkeys running after a kill. The log file has a
timestamp in filename.
And will use the device /dev/input/mskbd1 created in the udev rules above.

Thank you!
Weber Kai
Greetings from Brazil!

```

Original issue reported on code.google.com by `weber...@gmail.com` on 7 Jul 2012 at 12:50

Contributor guide

No contributing guide indexed for this repository

Research direction

No repository file, wiki page, or test is named. Review the supplied event-device discovery, udev symlink, and startup-script instructions first, then identify the appropriate documentation location. Done means the relevant wiki guidance is added or updated with the described way to select the keyboard device consistently.

Written by the indexing model from the issue text.

Assessment

Tech stack
linux, shell
Domain
documentation, operating-systems
Issue type
Documentation
Difficulty
2/5
Estimated time
1-3 hours
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.