Help answer threads with 0 replies.
Go Back > Forums > Linux Forums > Linux - Hardware
User Name
Linux - Hardware This forum is for Hardware issues.
Having trouble installing a piece of hardware? Want to know if that peripheral is compatible with Linux?


  Search this Thread
Old 06-26-2010, 11:49 PM   #1
LQ Newbie
Registered: Sep 2009
Posts: 28

Rep: Reputation: 2
How does my key board work?

Perhaps this is a silly question.

When I press a key on the keyboard, I am closing a switch, then what? I know that each character is encoded in ASCII as a byte. For example if I press the "a" key, is the byte 01100001 immediately sent to the cpu. Or, is that number stored in some memory location that the kernel reads periodically?
Click here to see the post LQ members have rated as the most helpful post in this thread.
Old 06-27-2010, 03:20 AM   #2
LQ Guru
Registered: Mar 2004
Distribution: SusE 8.2
Posts: 5,863
Blog Entries: 1

Rep: Reputation: Disabled
Hi -

1. No, when you press the "a" key, you do *not* immediately get an "a".
The hardware generates a "keycode", which is the first of several steps before you finally read a letter "a".

2. No, pressing the key generates an interrupt on your motherboard, which is originally handled by the BIOS. It takes awhile before the kernel finally gets it.

3. No, the kernel doesn't poll the BIOS keyboard buffer. It simply fetches data that's already available (courtesy of the BIOS) when requested.

4. Once an application in user space requests a keystroke from the kernel, then the fun REALLY starts happening. Here's more than you probably ever wanted to know about keyboard handling "at the top of the stack":

Here's an excerpt from the article, which answers much of your original question:

Keyboard generalities

You press a key, and the keyboard controller sends scancodes to the kernel keyboard driver. Some keyboards can be programmed, but usually the scancodes corresponding to your keys are fixed. The kernel keyboard driver just transmits whatever it receives to the application program when it is in scancode mode, like when X is running. Otherwise, it parses the stream of scancodes into keycodes, corresponding to key press or key release events. (A single key press can generate up to 6 scancodes.) These keycodes are transmitted to the application program when it is in keycode mode (as used, for example, by showkey and some X servers). Otherwise, these keycodes are looked up in the keymap, and the character or string found there is transmitted to the application, or the action described there is performed. (For example, if one presses and releases the a key, then the keyboard produces scancodes 0x1e and 0x9e, this is converted to keycodes 30 and 158, and then transmitted as 0141, the ASCII or latin-1 code for `a'; if one presses and releases Delete, then the keyboard produces scancodes 0xe0 0x53 0xe0 0xd3, these are converted to keycodes 111 and 239, and then transmitted as the 4-symbol sequence ESC [ 3 ~, all assuming a US keyboard and a default keymap. An example of a key combination to which an action is assigned is Ctrl-Alt-Del.)

The translation between unusual scancodes and keycodes can be set using the utility setkeycodes - only few people will need it. The translation between keycodes and characters or strings or actions, that is, the keymap, is set using the utilities loadkeys and setmetamode. For details, see getkeycodes(8), setkeycodes(8), dumpkeys(1), loadkeys(1), setmetamode(1). The format of the files output by dumpkeys and read by loadkeys is described in keymaps(5).

Where it says `transmitted to the application' in the above description, this really means `transmitted to the terminal driver'. That is, further processing is just like that of text that comes in over a serial line. The details of this processing are set by the program stty.
'Hope that helps .. PSM
2 members found this post helpful.
Old 06-27-2010, 03:28 AM   #3
Registered: Aug 2005
Location: Anchorage, Alaska (soon EU, hopefully)
Distribution: Anything NOT SystemD (ie. M$) related.
Posts: 918

Rep: Reputation: 42
Interesting question.

I was about to start researching this topic because I want to encrypt my keystrokes from the keyboard itself, all the way down the line...

I read once where the Stunnel (vpn) program might help me.

Last edited by halvy; 06-27-2010 at 03:30 AM.
Old 06-27-2010, 08:29 AM   #4
LQ 5k Club
Registered: Sep 2009
Posts: 6,443
Blog Entries: 3

Rep: Reputation: 721Reputation: 721Reputation: 721Reputation: 721Reputation: 721Reputation: 721Reputation: 721
Originally Posted by phenyloxime View Post
I know that each character is encoded in ASCII as a byte. For example if I press the "a" key, is the byte 01100001 immediately sent to the cpu.

Your keyboard knows nothing about ASCII. Every time a key is pressed, it emits a few bytes. Each key sends a different code when pressed and when released. These codes have nothing to do with ASCII, not even the letter keys. The kernel then gets those codes, and uses a look-up table (when you change the keyboard layout, you are actually changing this look-up table) to see which key/character the code corresponds to.
1 members found this post helpful.



Thread Tools Search this Thread
Search this Thread:

Advanced Search

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is Off
HTML code is Off

Similar Threads
Thread Thread Starter Forum Replies Last Post
key board divyashree Linux - Hardware 2 07-14-2009 02:41 PM
Fedora Key Board V Naveen Fedora 1 06-05-2007 11:57 PM
Which ioctl to use to get the key pressed in the key board? Sreeram B S Linux - Kernel 0 02-24-2007 02:02 AM
Key Board Short Cuts pujansrt SUSE / openSUSE 3 08-31-2006 11:56 PM
usb key board baparekh Linux - Hardware 0 02-14-2004 06:50 AM > Forums > Linux Forums > Linux - Hardware

All times are GMT -5. The time now is 09:29 AM.

Main Menu
Write for LQ is looking for people interested in writing Editorials, Articles, Reviews, and more. If you'd like to contribute content, let us know.
Main Menu
RSS1  Latest Threads
RSS1  LQ News
Twitter: @linuxquestions
Facebook: linuxquestions Google+: linuxquestions
Open Source Consulting | Domain Registration