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

  
 
  

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 de-
     scribed 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 interfaces: a key-
     board interface like the usual facility it is simulating (a virtual AT key-
     board in the case of vkbd, or a terminal for pty(4)), and a  character-spe-
     cial 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 keyboard.  The  con-
     trol  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 re-
     ceived it.

     The virtual AT keyboard control device, normally /dev/vkbdctl<N>, is exclu-
     sive-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 <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.  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 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 ac-
     cept 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 virtual keyboard.  The
     virtual keyboard state synchronization is the user's responsibility.

FreeBSD 15.1			 August 12, 2004			 VKBD(4)

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

home | help