2011-05-12 11:36:46 -07:00
|
|
|
.TH KBDFS 8
|
|
|
|
.SH NAME
|
|
|
|
kbdfs \- keyboard and console filesystem
|
|
|
|
.SH SYNOPSIS
|
|
|
|
.B aux/kbdfs
|
|
|
|
[
|
|
|
|
.B -Dd
|
|
|
|
] [
|
|
|
|
.B -s
|
|
|
|
.I srv
|
|
|
|
] [
|
|
|
|
.B -m
|
|
|
|
.I mntpnt
|
|
|
|
] [
|
2011-05-11 16:31:29 -07:00
|
|
|
.I filename
|
2011-05-12 11:36:46 -07:00
|
|
|
]
|
|
|
|
.nf
|
|
|
|
|
|
|
|
.B mount -b /srv/cons /dev
|
|
|
|
.B /dev/cons
|
|
|
|
.B /dev/consctl
|
|
|
|
.B /dev/kbd
|
|
|
|
.B /dev/kbin
|
|
|
|
.B /dev/kbmap
|
|
|
|
.fi
|
|
|
|
.SH DESCRIPTION
|
|
|
|
.PP
|
|
|
|
Started on
|
|
|
|
.IR boot (8),
|
|
|
|
.IR kbdfs
|
|
|
|
translates raw keyboard scancodes from
|
|
|
|
.B /dev/scancode
|
|
|
|
(see
|
|
|
|
.IR kbd (3))
|
|
|
|
and its
|
|
|
|
.BR kbin
|
|
|
|
file and optionaly reads console input from
|
|
|
|
.I consfile
|
|
|
|
to provide initial keyboard and console input.
|
|
|
|
.PP
|
|
|
|
It serves a one-level directory containing the files
|
|
|
|
.BR cons,
|
|
|
|
.BR consctl,
|
|
|
|
.BR kbd,
|
|
|
|
.BR kbin
|
|
|
|
and
|
|
|
|
.BR kbmap.
|
|
|
|
.PP
|
|
|
|
The
|
|
|
|
.B -D
|
|
|
|
flag enables a debug trace of
|
|
|
|
.I 9p
|
|
|
|
messages and
|
|
|
|
.B -d
|
|
|
|
prevents
|
|
|
|
.IR kbdfs
|
|
|
|
from making its memory private.
|
|
|
|
.PP
|
|
|
|
The
|
|
|
|
.B -s
|
|
|
|
option causes
|
|
|
|
.IR kbdfs
|
|
|
|
to post its channel on
|
2011-05-11 16:31:29 -07:00
|
|
|
.B /srv/\fIsrv\fP.
|
2011-05-12 11:36:46 -07:00
|
|
|
On system startup,
|
|
|
|
.IR boot (8)
|
|
|
|
sets this to
|
|
|
|
.B cons.
|
|
|
|
With the
|
|
|
|
.B -m
|
|
|
|
option,
|
|
|
|
.IR kbdfs
|
2011-05-11 16:31:29 -07:00
|
|
|
mounts itself on
|
2011-05-12 11:36:46 -07:00
|
|
|
.I mntpnt
|
2011-05-11 16:31:29 -07:00
|
|
|
(see
|
|
|
|
.IR bind (2)),
|
2011-05-12 11:36:46 -07:00
|
|
|
otherwise on
|
|
|
|
.B /dev
|
2011-05-11 16:31:29 -07:00
|
|
|
(the default).
|
2011-05-12 11:36:46 -07:00
|
|
|
.SS Console
|
|
|
|
.PP
|
|
|
|
Reading the
|
|
|
|
.BR cons
|
|
|
|
file returns characters typed on the console. Normally, characters
|
|
|
|
are buffered to enable erase and kill processing. A control-U,
|
|
|
|
.LR ^U ,
|
|
|
|
typed at the keyboard
|
|
|
|
.I kills
|
|
|
|
the current input line (removes all
|
|
|
|
characters from the buffer of characters not yet read via cons), and a
|
|
|
|
backspace
|
|
|
|
.I erases
|
|
|
|
the previous non-kill, non-erase character from the
|
|
|
|
input buffer. Killing and erasing only delete characters back to, but
|
|
|
|
not including, the last newline. Characters typed at the keyboard
|
|
|
|
actually produce 16-bit runes (see
|
|
|
|
.IR utf (6)),
|
|
|
|
but the runes are translated into the variable-length
|
|
|
|
.SM UTF
|
|
|
|
encoding (see
|
|
|
|
.IR utf (6))
|
|
|
|
before putting them into the buffer. A
|
|
|
|
.IR read (2)
|
2011-05-11 16:31:29 -07:00
|
|
|
of a length greater than zero causes the process to wait until a newline
|
2011-05-12 11:36:46 -07:00
|
|
|
or a
|
|
|
|
.LR ^D
|
|
|
|
ends the buffer, and then returns as much of the buffer as the
|
|
|
|
argument to read allows, but only up to one complete line. A
|
|
|
|
terminating
|
|
|
|
.LR ^D
|
|
|
|
is not put into the buffer. If part of the line remains, the next
|
|
|
|
read will return bytes from that remainder and not part of any new
|
|
|
|
line that has been typed since.
|
|
|
|
.PP
|
|
|
|
If the string
|
|
|
|
.B rawon
|
|
|
|
has been written to the
|
|
|
|
.BR consctl
|
|
|
|
file and the file
|
|
|
|
is still open,
|
|
|
|
.BR cons
|
|
|
|
is in
|
|
|
|
.IR "raw mode" :
|
|
|
|
characters are not echoed as they are typed,
|
|
|
|
backspace,
|
|
|
|
.L ^U
|
|
|
|
and
|
|
|
|
.L ^D
|
|
|
|
are not treated specially, and characters are
|
|
|
|
available to read as soon as they are typed. Ordinary mode is
|
|
|
|
reentered when
|
|
|
|
.B rawoff
|
|
|
|
is written to
|
|
|
|
.BR consctl
|
|
|
|
or this file is closed.
|
|
|
|
.PP
|
|
|
|
A write (see
|
|
|
|
.IR read (2))
|
|
|
|
to
|
|
|
|
.BR cons
|
|
|
|
causes the characters to be printed on the console screen.
|
|
|
|
.PP
|
2011-05-11 16:31:29 -07:00
|
|
|
When a
|
|
|
|
.I filename
|
|
|
|
is passed to
|
2011-05-12 11:36:46 -07:00
|
|
|
.IR kbdfs (8)
|
2011-05-11 16:31:29 -07:00
|
|
|
as its last argument, it reads and processes the
|
2011-05-12 11:36:46 -07:00
|
|
|
characters from that file and forwards them to the
|
|
|
|
.BR cons
|
|
|
|
file with the same text processing applied as on keyboard input.
|
|
|
|
This is used on serial consoles.
|
|
|
|
.SS Keyboard
|
|
|
|
A read on the
|
|
|
|
.BR kbd
|
2011-05-11 16:31:29 -07:00
|
|
|
file returns a null terminated, variable-length,
|
2011-05-12 11:36:46 -07:00
|
|
|
.SM UTF
|
|
|
|
encoded string of all the keys that are currently pressed (key is
|
|
|
|
down) on the keyboard. This includes all keys that have a keyboard
|
|
|
|
mapping and modifier keys. No key is treated specially. A new event
|
|
|
|
is generated on each state change or at keyboard repeat rate and put
|
|
|
|
in a buffer. Each
|
|
|
|
.IR read (2)
|
|
|
|
will return a single event or block until there are new events
|
2011-05-11 16:31:29 -07:00
|
|
|
available. The read data is always terminated with a null-byte,
|
|
|
|
so when all keys are released (all keys are up), a single
|
|
|
|
null-byte will be returned. Newly pressed keys are appended to the
|
|
|
|
string before the null-byte. Key releases remove the
|
|
|
|
character from the string. Change on a modifier key like
|
2011-05-12 11:36:46 -07:00
|
|
|
.B Shift
|
|
|
|
or
|
|
|
|
.B Num
|
|
|
|
will not change
|
2011-05-11 16:31:29 -07:00
|
|
|
the characters already present in the string, but will
|
|
|
|
take effect on newly pressed keys.
|
2011-05-12 11:36:46 -07:00
|
|
|
.PP
|
|
|
|
Raw scancodes can be written to the
|
|
|
|
.BR kbin
|
2011-05-13 23:22:53 -07:00
|
|
|
file for external keyboard input (used for USB keyboards).
|
2011-05-12 11:36:46 -07:00
|
|
|
.SS "Keyboard map"
|
|
|
|
Scancodes are maped to Unicode characters with a number of
|
|
|
|
translation tables. These tables can be accessed with the
|
|
|
|
.BR kbmap
|
|
|
|
file.
|
|
|
|
.PP
|
|
|
|
Reads return the current contents of the map.
|
|
|
|
Each entry is one line containing three 11 character numeric fields,
|
|
|
|
each followed by a space:
|
|
|
|
a table number, an index into the table (scan code), and the decimal value
|
|
|
|
of the corresponding Unicode character (0 if none).
|
|
|
|
The table numbers are platform dependent; they typically distinguish
|
|
|
|
between unshifted and shifted keys.
|
|
|
|
The scan code values are hardware dependent and can vary
|
|
|
|
from keyboard to keyboard.
|
|
|
|
.PP
|
|
|
|
Writes to the file change the map.
|
|
|
|
Lines written to the file must contain three space-separated fields,
|
|
|
|
representing the table number, scan code index, and Unicode character.
|
|
|
|
Values are taken to be decimal unless they start with
|
|
|
|
.B 0x
|
|
|
|
(hexadecimal) or
|
|
|
|
.B 0
|
|
|
|
(octal).
|
|
|
|
The Unicode character can also be represented as
|
|
|
|
.BI ' x
|
|
|
|
where
|
|
|
|
.I x
|
|
|
|
gives the UTF-8 representation of the character
|
|
|
|
(see
|
|
|
|
.IR utf (6)),
|
|
|
|
or as
|
|
|
|
.BI ^ X
|
|
|
|
to represent a control character.
|
|
|
|
.SH "SEE ALSO"
|
|
|
|
.IR cons (3),
|
|
|
|
.IR keyboard (6),
|
|
|
|
.IR utf (6),
|
|
|
|
.IR kbd (3)
|
|
|
|
.SH FILES
|
|
|
|
.B /dev/lib/kbmap/*
|
|
|
|
.SH SOURCE
|
|
|
|
.B /sys/src/cmd/aux/kbdfs.c
|