Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
VKBD(4)			    Kernel Interfaces Manual		       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 ter-
       minals.

       The vkbd	driver,	like the pty(4)	driver,	 provides  two	interfaces:  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 char-
       acter-special 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	device
       /dev/vkbdctl.  When this	device is opened, vkbd will  return  a	handle
       for  the	 lowest	 unused	 vkbdctl  device  (use devname(3) to determine
       which).

       Each  virtual  AT  keyboard  supports  the  usual  keyboard   interface
       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 de-
       vice generates an input on the virtual AT keyboard, as if the  (non-ex-
       istent) 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  re-
       stricted	 to the	super-user.  A read(2) call will return	the virtual AT
       keyboard	status structure (defined in <dev/vkbd/vkbd_var.h>) if one  is
       available;  if  not,  it	 will  either  block  until  one  is or	return
       EWOULDBLOCK, depending 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.  Al-
       though 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 keyboard	is re-
       moved.  All queued scan codes are thrown	away.

SEE ALSO
       kbdcontrol(1), atkbdc(4), psm(4), syscons(4), vt(4)

HISTORY
       The vkbd	module was implemented in FreeBSD 6.0.

AUTHORS
       Maksim Yevmenkin	<m_evmenkin@yahoo.com>

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  virtual.	  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 obtain AT
       scan codes from the different sources and write them into the same vir-
       tual keyboard.  The  virtual  keyboard  state  synchronization  is  the
       user's responsibility.

FreeBSD	13.2			August 12, 2004			       VKBD(4)

NAME | SYNOPSIS | DESCRIPTION | SEE ALSO | HISTORY | AUTHORS | CAVEATS

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=vkbd&sektion=4&manpath=FreeBSD+14.2-RELEASE+and+Ports>

home | help