Monday, 26 August 2013

A single key on keyboard produces extra keypresses for each simultaneously pressed key

A single key on keyboard produces extra keypresses for each simultaneously
pressed key

I recently acquired MK-85 mechanical USB keyboard from QPAD. The keyboard
works perfect on Windows. It works perfect in Syslinux. It works almost
perfect on Linux. The only issue on Linux is that a single key is
misbehaving (Gentoo (3.6.11), Arch Linux and Linux Mint (2.6.38) are all
affected).
The keyboard is a 105-key German layout keyboard and the key in question
is the one between Ä and ENTER. On US layout this corresponds to the key
"\", on German layout this corresponds to "#" and on Scandinavian layout
it's '.
When this key is pressed with other keys, it produces an extra keypress
for each other key that is simultaneously pressed. For example, under
Scandinavian layout if I want to type the word "don't" really fast I end
up with: don'''t'
The behaviour can be observed with the program showkeys:
kb mode was UNICODE
[ if you are trying this under X, it might not work
since the X server is also reading /dev/console ]
press any key (program terminates 10s after last keypress)...
keycode 28 release
keycode 32 press // d pressed
keycode 24 press // o pressed
keycode 49 press // n pressed
keycode 32 release // d released
keycode 43 press // ' pressed
keycode 24 release // o released
keycode 43 release // ' released
keycode 43 press // ' pressed, extra ' produced
keycode 49 release // n released
keycode 43 release // ' released
keycode 43 press // ' pressed, extra ' produced
keycode 20 press // t pressed
keycode 43 release // ' released
keycode 43 press // ' pressed, extra ' produced
keycode 20 release // t released
keycode 43 release // ' released
keycode 43 press // ' pressed, extra ' produced
keycode 43 release // ' released (REAL)
It only happens with this single key, regardless of keyboard layout.
Another way it manifests itself is if I press and hold a key, it repeats,
and I press and hold another key which should also start repeating:
aaaaaaaaaakkkkkkkkkkkkk (works as intended)
¨¨¨¨¨¨¨¨¨¨fffffffffffff (works as intended)
''''''''''a'''''''''''' (a is not repeated, instead ' continues)
On Windows this issue does not exist:
OnKeyDown, Key code=68, Control keys=, Key name d
OnKeyPress d
OnKeyDown, Key code=79, Control keys=, Key name o
OnKeyPress o
OnKeyDown, Key code=78, Control keys=, Key name n
OnKeyPress n
OnKeyup, Key code=68, Control keys=, Key name d
OnKeyDown, Key code=191, Control keys=, Key name ........OEM specific
OnKeyPress '
OnKeyup, Key code=79, Control keys=, Key name o
OnKeyup, Key code=78, Control keys=, Key name n
OnKeyDown, Key code=84, Control keys=, Key name t
OnKeyPress t
OnKeyup, Key code=191, Control keys=, Key name ........OEM specific
OnKeyup, Key code=84, Control keys=, Key name t
What do you think SE? Hardware issue? It works fine in Syslinux which
makes me feel like there'''s' something wrong on Linux side. Any pointers,
ideas or better ways to debug? If getting this to work right requires
patching the kernel I'm up for it.
I thank for your time humbly.

No comments:

Post a Comment