diff options
Diffstat (limited to 'share/man/man4/keyboard.4')
-rw-r--r-- | share/man/man4/keyboard.4 | 171 |
1 files changed, 171 insertions, 0 deletions
diff --git a/share/man/man4/keyboard.4 b/share/man/man4/keyboard.4 new file mode 100644 index 000000000000..e1a5ac28d41a --- /dev/null +++ b/share/man/man4/keyboard.4 @@ -0,0 +1,171 @@ +.\" +.\" $FreeBSD$ +.\" +.Dd January 8, 1995 +.Dt KEYBOARD 4 +.Os +.Sh NAME +.Nm keyboard +.Nd pc keyboard interface +.Sh DESCRIPTION +The PC keyboard is used as the console character input device. +The keyboard +is owned by the current virtual console. +To switch between the virtual consoles use the sequence +.Ar ALT+Fn , +which means hold down ALT and press one of the function keys. +The +virtual console with the same number as the function key is then +selected as the current virtual console and given exclusive use of +the keyboard and display. +.Pp +The console allows entering values that are not physically +present on the keyboard via a special keysequence. +To use this facility press and hold down ALT, +then enter a decimal number from 0-255 via the numerical keypad, then +release ALT. +The entered value is then used as the ASCII value for one +character. +This way it is possible to enter any ASCII value, not present +on the keyboard. +The console driver also includes a history function. +It is activated by +pressing the scroll-lock key. +This holds the display, and enables the cursor +arrows for scrolling up and down through the last scrolled out lines. +.Pp +The keyboard is configurable to suit the individual user and the different +national layout. +.Pp +The keys on the keyboard can have any of the following functions: +.Pp +.Bl -tag -width "Modifier Key" -compact +.It "Normal key" +Enter the ASCII value associated with the key. +.It "Function key" +Enter a string of ASCII values. +.It "Switch Key" +Switch virtual console. +.It "Modifier Key" +Change the meaning of another key. +.El +.Pp +The keyboard is seen as a number of keys numbered from 1 to n. +This +number is often referred to as the "scancode" for a given key. +The number +of the key is transmitted as an 8 bit char with bit 7 as 0 when a key is +pressed, and the number with bit 7 as 1 when released. +This makes it +possible to make the mapping of the keys fully configurable. +.Pp +The meaning of every key is programmable via the PIO_KEYMAP ioctl call, that +takes a structure keymap_t as argument. +The layout of this structure is as +follows: +.Pp +.Bd -literal -offset indent + struct keymap { + u_short n_keys; + struct key_t { + u_char map[NUM_STATES]; + u_char spcl; + u_char flgs; + } key[NUM_KEYS]; + }; +.Ed +.Pp +The field n_keys tells the system how many keydefinitions (scancodes) +follows. +Each scancode is then specified in the key_t substructure. +.Pp +Each scancode can be translated to any of 8 different values, depending +on the shift, control, and alt state. +These eight possibilities are +represented by the map array, as shown below: +.Bd -literal + alt + scan cntrl alt alt cntrl + code base shift cntrl shift alt shift cntrl shift + map[n] 0 1 2 3 4 5 6 7 + ---- ------------------------------------------------------ + 0x1E 'a' 'A' 0x01 0x01 'a' 'A' 0x01 0x01 +.Ed +.Pp +This is the default mapping for the key labelled 'A' which normally has +scancode 0x1E. +The eight states are as shown, giving the 'A' key its +normal behavior. +The spcl field is used to give the key "special" treatment, and is +interpreted as follows. +Each bit corresponds to one of the states above. +If the bit is 0 the +key emits the number defined in the corresponding map[] entry. +If the bit is 1 the key is "special". +This means it does not emit +anything; instead it changes the "state". +That means it is a shift, +control, alt, lock, switch-screen, function-key or no-op key. +The bitmap is backwards i.e., +7 for base, 6 for shift etc. +.Pp +The flgs field defines if the key should react on caps-lock (1), +num-lock (2), both (3) or ignore both (0). +.Pp +The +.Xr kbdcontrol 1 +utility is used to load such a description into/outof +the kernel at runtime. +This makes it possible to change the key +assignments at runtime, or more important to get (GIO_KEYMAP ioctl) +the exact key meanings from the kernel (e.g.\& used by the X server). +.Pp +The function keys can be programmed using the SETFKEY ioctl call. +.Pp +This ioctl takes an argument of the type fkeyarg_t: +.Bd -literal -offset indent + struct fkeyarg { + u_short keynum; + char keydef[MAXFK]; + char flen; + }; +.Ed +.Pp +The field keynum defines which function key that is programmed. +The array keydef should contain the new string to be used (MAXFK long), +and the length should be entered in flen. +.Pp +The GETFKEY ioctl call works in a similar manner, except it returns +the current setting of keynum. +.Pp +The function keys are numbered like this: +.Bd -literal -offset indent + F1-F12 key 1 - 12 + Shift F1-F12 key 13 - 24 + Ctrl F1-F12 key 25 - 36 + Ctrl+shift F1-F12 key 37 - 48 + + Home key 49 + Up arrow key 50 + Page Up key 51 + (keypad) - key 52 + Left arrow key 53 + (keypad) 5 key 54 + Right arrow key 55 + (keypad) + key 56 + End key 57 + Down arrow key 58 + Page down key 59 + Insert key 60 + Delete key 61 + + Left window key 62 + Right window key 63 + Menu key 64 +.Ed +.Pp +The +.Xr kbdcontrol 1 +utility also allows changing these values at runtime. +.Sh AUTHORS +.An S\(/oren Schmidt Aq sos@FreeBSD.org |