Re: PROBLEM: keyboard shift not registered under fast typing or auto-repeat

From: Andries Brouwer
Date: Wed Aug 27 2003 - 05:52:34 EST


On Tue, Aug 26, 2003 at 08:38:50PM -0400, Carl Nygard wrote:

> Summary: Keyboard shift state not registered under fast typing or
> autorepeat
>
> If someone can help point me where to look at the code, I've already
> looked into ./drivers/char/keyboard.c but didn't see anything obvious.
> More specific help would be appreciated.

You must look at input/input.c at occurrences of repeat_key.
(And afterwards at char/keyboard.c at kbd_event, kbd_keycode.)

You'll see that the current 2.6 code ignores a lot of what the keyboard
is telling us and synthesizes its own events.

What happens in your autorepeat case:
- Press a key, repeat_key is set to its keycode.
If you keep it pressed then the keyboard repeats are ignored,
but the kernel generates its own repeats using a timer.
- Press Shift, repeat_key is set to its keycode.
Now the timer repeat generates repeats of the Shift-down event,
but that does not generate keyboard input.

But in your autorepeat case the kernel does precisely what the
keyboard also would have done: repeat the last key that was pressed.
Also the hardware keyboard does not send anything after Press A,
Press Shift, Release Shift.

Incidentally, both add_keyboard_randomness() and add_mouse_randomness()
are called - we invent more randomness than one might have thought
at first.

Andries


> Kernel doesn't register shift state when typing quickly. Example, 'ls
> *' shows up as 'ls 8' when typed fast. Also, holding '-' key down, once
> it's repeating, shift key makes no difference.

So, the first part of what you say, when true, would be a bug.
But a bug difficult to distinguish from a finger coordination error.
The second part is correct behaviour.

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/