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