I wasn't sure exactly which board to post this in, but I guess for starters you would have to know some code to understand the problem so I'll try here first, and for anyone who can help thanks a million in advance!
I don't think you'll find this to be an elementary question. The situation is that I am installing some software to run on a custom build factory machine. It's sort of an embedded system. I installed minimal debian and hacked it down to less than 1 Gb to fit on the limited drive space, and we have a little 800 x 600 LCD attached to it. It's all working well, and a very interesting project.
Here's the catch. The "keyboard" (if you can call it that) or "keypad" is kind of like a big cellphone keypad from before the "smart phone, touch screen, etc" days, kind of like "bubble buttons" that make a pop/click when you hit them. It has a sort of flat bus cable that connects directly to the main board, but it is PS/2 standard (like the old circle plug-in mouse and keyboards standard). And seems to work OK with some i8042 params sent to the boot sequence.
So far so good, right? So here's the heart of the problem. The keyboard seems to work fine in a non-GUI tty, but when I get into X, I want to bang my head in frustration. The keys keep repeating, so that one tap of a '1' will go 11111111111111111111... until you hit enter or shut the machine off or something. In order to tame the beast down a bit I did
That stops keyboard repeats... so now I can hit the '1' and just get a single '1' as expected... but wait it only works ONCE now...? So if I hit '1' it will display a 1 or do the function that 1 calls, but after having done it once, it won't do it again until rebooting.
Some investigation and after learning everything there is to know about xorg's relation with keyboards, I come to find that it's actually kind of the keypad's fault.
Here's where you might need to be a coder to understand. Each press of this strange keypad's keys will send a "key press" signal, but it does not send a "key release" signal when you let off the key. Because it is a custom, odd little keypad and that's just how it is. If you don't know, most systems and coding methods expect each key to have both a "key down" and "key up" signal to be sent. Otherwise you can't know if the key press is complete. So now we can see why this keypad was sending 11111111111111.... instead of just 1 after one tap.... Xorg sees that the key was pressed down, but nothing told it that my finger left, so it assumes I'm just holding it down infinitely.
However...
It works just fine in a non-GUI tty (bang.head.on.desk.repeat.)
So then I spent a day or two all over the web learning about how to send a key signal to Xorg and tried customizing my application to send a release signal for each key press signal to reset the keys after strike. I've been through all of these...
Code:
$ xset
$ xinput
$ xkbset
$ ...
And nothing seems to help.
I also tried to see if there was someway I could just reset the whole keypad after each key stroke... no avail.
Mind you it's supposed to be a regular old PS/2 keyboard, and I can confirm that it is in fact sending regular standard keypress signals... just not releasing them ever.
Does anyone have any advice for this?
Much appreciated if you do. Hope you enjoyed the reading otherwise! and feel free to ask if you have any questions.