vkbd(4)

NAME

vkbd - the virtual AT keyboard interface

SYNOPSIS

device vkbd

DESCRIPTION

The vkbd interface is a software loopback mechanism that can
be loosely
described as the virtual AT keyboard analog of the pty(4),
that is, vkbd
does for virtual AT keyboards what the pty(4) driver does
for terminals.
The vkbd driver, like the pty(4) driver, provides two inter
faces: a keyboard interface like the usual facility it is simulating (a
virtual AT
keyboard in the case of vkbd, or a terminal for pty(4)), and
a characterspecial device ``control'' interface.
The virtual AT keyboards are named vkbd0, vkbd1, etc., one
for each control device that has been opened.
The vkbd interface permits opens on the special control de
vice
/dev/vkbdctl. When this device is opened, vkbd will return
a handle for
the lowest unused vkbdctl device (use devname(3) to deter
mine which).
Each virtual AT keyboard supports the usual keyboard inter
face ioctl(2)s,
and thus can be used with kbdcontrol(1) like any other key
board. The
control device supports exactly the same ioctl(2)s as the
virtual AT keyboard device. Writing AT scan codes to the control device
generates an
input on the virtual AT keyboard, as if the (non-existent)
hardware had
just received it.
The virtual AT keyboard control device, normally
/dev/vkbdctl<N>, is
exclusive-open (it cannot be opened if it is already open)
and is
restricted to the super-user. A read(2) call will return
the virtual AT
keyboard status structure (defined in if one is available;
if not, it
will either block until one is or return EWOULDBLOCK, de
pending on
whether non-blocking I/O has been enabled.
A write(2) call passes AT scan codes to be ``received'' from
the virtual
AT keyboard. Each AT scan code must be passed as unsigned
int. Although
AT scan codes must be passes as unsigned ints, the size of
the buffer
passed to write(2) still should be in bytes, i.e.,

static unsigned int codes[] =
{
/* Make Break */
0x1e, 0x9e
};
int
main(void)
{
int fd, len;
fd = open("/dev/vkbdctl0", O_RDWR);
if (fd < 0)
err(1, "open");
/* Note sizeof(codes) - not 2! */
len = write(fd, codes, sizeof(codes));
if (len < 0)
err(1, "write");
close(fd);
return (0);
}
Write will block if there is not enough space in the input
queue.
The control device also supports select(2) for read and
write.
On the last close of the control device, the virtual AT key
board is
removed. All queued scan codes are thrown away.

SEE ALSO

kbdcontrol(1), atkbdc(4), pcvt(4), psm(4), syscons(4)

CAVEATS

The vkbd interface is a software loopback mechanism, and,
thus ddb(4)
will not work with it. Current implementation of the
syscons(4) driver
can accept input from only one keyboard, even if it is vir
tual. Thus it
is not possible to have both wired and virtual keyboard to
be active at
the same time. It is, however, in principal possible to ob
tain AT scan
codes from the different sources and write them into the
same virtual
keyboard. The virtual keyboard state synchronization is the
user's
responsibility.

HISTORY

The vkbd module was implemented in FreeBSD 6.0.

AUTHORS

Maksim Yevmenkin <m_evmenkin@yahoo.com>
BSD August 12, 2004
Copyright © 2010-2025 Platon Technologies, s.r.o.           Home | Man pages | tLDP | Documents | Utilities | About
Design by styleshout