EN JA
VKBD(4)
VKBD(4) FreeBSD Kernel Interfaces Manual VKBD(4)

名称

vkbd仮想の AT キーボードインタフェース

書式

device vkbd

解説

vkbd インタフェースは、 pty(4) の仮想の AT キーボード類似物としておおまかに記述することができるソフトウェアループバックメカニズムです、すなわち、 vkbd は、 pty(4) ドライバが端末にすることを仮想の AT キーボードに行います。

pty(4) ドライバと同様に、 vkbd ドライバは 2 つのインタフェースを提供します: ( vkbd の場合の仮想の AT キーボード、または pty(4) のための端末) をシミュレートする、普通の機能のようなキーボードインタフェース、とキャラクタ特殊デバイス“制御”インタフェースです。

仮想の AT キーボードは、オープンされた各制御デバイス毎に vkbd0, vkbd1, その他、と名前が付けられます。

vkbd インタフェースは、特殊制御デバイス /dev/vkbdctl でオープンできます。このデバイスがオープンされるとき、 vkbd は最も低い未使用の vkbdctl デバイス (どれかを決定するために devname(3) を使用します) のハンドルを返します。

それぞれの仮想の AT キーボードは、普通のキーボードインタフェース ioctl(2) をサポートしているので、他のキーボードのように kbdcontrol(1) で使用することができます。制御デバイスは、仮想の AT キーボードデバイスとまったく同じ ioctl(2) をサポートします。 AT スキャンコードを制御デバイスへ書き込むと、まるで (実在しない) ハードウェアがちょうどそれを受け取ったかのように、仮想の AT キーボードに関する入力が発生します。

仮想の AT キーボード制御デバイス、通常 /dev/vkbdctl< N>は、スーパユーザに制限されますが、排他的にオープンします (それが既にオープンされているなら、それをオープンすることはできません)。 read(2) 呼び出しは、利用可能であるなら、仮想の AT キーボード状態構造体 ( < dev/vkbd/vkbd_var.h> で定義される) を返します。そうでなければ、非ブロッキング I/O が有効にされたかどうかによって、有効になるまでブロックされるか、または EWOULDBLOCK を返します。

write(2) 呼び出しは、AT スキャンコードを仮想の AT キーボードから“受け取られる”ように渡します。各 AT スキャンコードは、 unsigned int として渡されなければなりません。 AT スキャンコードは unsigned int として渡されなければなりませんが、それでも write(2) に渡されるバッファのサイズは、バイトであるべきです、すなわち次の通りです。

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); 
}

入力キューに十分な空間がなければ、書き込むはブロックされます。

また制御デバイスは、読み込み書き込みのための select(2) をサポートします。

制御デバイスの最後のクローズでは、仮想の AT キーボードは取り除かれます。すべてのキューに入れられたスキャンコードは無駄となります。

歴史

vkbd モジュールは、 FreeBSD 6.0 で実装されました。

作者

Maksim Yevmenkin <m_evmenkin@yahoo.com>

警告

vkbd インタフェースは、ソフトウェアループバックメカニズムです、そのため、 ddb(4) は動作しません。 syscons(4) ドライバの現在の実現は、たとえ仮想であっても、1 つのキーボードからのみ受け付けることができます。したがって、接続されたものと仮想のキーボードの両方は同時にアクティブとなることはできません。しかしながら、異なったソースから AT スキャンコードを獲得して、同じ仮想のキーボードに、それらを書き込むことは本質的に可能です。仮想のキーボード状態の同期は、ユーザの責任です。
August 12, 2004 FreeBSD