KEYBOARD(4) FreeBSD/i386 カーネルインタフェースマニュアル KEYBOARD(4)
名称
keyboard − PC キーボードのインタフェース |
解説
PC キーボードはコンソールの文字入力デバイスとして使用されます。キーボード は現在の仮想コンソールが専有します。仮想コンソールを切り替えるには、シー ケンス ALT+Fn を使ってください。これは、ALT を押しながらファンクション キーのひとつを押すという意味です。そうすると、そのファンクションキーの番 号と同じ仮想コンソールが現在の仮想コンソールとして選択され、キーボードや ディスプレイの専有的な使用権が与えられます。 コンソールでは、特別なキーシーケンスを用いることにより、キーボード上に物 理的に存在しない値を入力できます。この機能を使うには、ALT を押したままに して、数字キーパッドで 0 から 255 の 10 進数字を入力し、ALT を離してくだ さい。そうすると、入力された値がひとつの文字を表す ASCII 値として使われま す。このようにして、キーボード上に無い任意の ASCII 値を入力することができ ます。また、コンソールドライバは履歴機能も備えています。履歴機能は scroll-lock キーを押すことで有効になります。これは表示を固定し、最近スク ロールされた行に渡って矢印キーでスクロールアップ・ダウンできるようにしま す。 キーボードは、個々のユーザや国の違いによる配置に合わせて設定できます。 キーボード上のキーは次の機能のどれでも持つことができます: |
通常キー |
- そのキーに関連付けられた ASCII 値を入力。 |
|||||
ファンクションキー |
- ASCII 数値列を入力。 |
|||||
スイッチキー |
- 仮想コンソールを切り替える。 |
|||||
修飾キー |
- 別のキーの意味を変更する。 |
キーボードとは、1 から n の番号を付けられたキーの集合と見なせます。この番 号はよく、あるキーに対する「スキャンコード (scancode)」と呼ばれます。ある キーが押されたとき、そのキーの番号はビット 7 が 0 の 8 ビット文字に変換さ れ、離されたときはビット 7 が 1 の数値に変換されます。これにより、キーの マッピングが完全に設定可能となります。 それぞれのキーの持つ意味は PIO_KEYMAP ioctl の呼び出しによってプログラム できます。これは keymap_t 構造体を引数に取ります。この構造体の構成は次の ようになります: |
struct keymap { |
|||||
u_short |
n_keys; |
||||
struct key_t { |
|||||
u_char map[NUM_STATES]; |
|||||
u_char spcl; |
|||||
u_char flgs; |
|||||
} key[NUM_KEYS]; |
|||||
}; |
フィールド n_keys はいくつのキー定義 (スキャンコード) が続くかをシステム に示します。各スキャンコードはサブ構造体の key_t で指定されます。 各スキャンコードは、shift, control, alt の状態により 8 つの異なる値に変換 され得ます。これら 8 通りの状態は次のような配列 map で表現されます: alt scan cntrl alt alt cntrl code base shift cntrl shift alt shift cntrl shift map[n] 0 1 2 3 4 5 6 7 ---- ------------------------------------------------------ 0x1E ’a’ ’A’ 0x01 0x01 ’a’ ’A’ 0x01 0x01 これは、通常 0x1E のスキャンコードを持つ「A」と記されたキーのデフォルトの マッピングです。8 通りの状態が示されているように、「A」キーの通常の動作を 与えます。フィールド spcl は、キーに「特殊な (special)」扱いを与えるため に使われ、次のように解釈されます。各ビットは上記の状態のひとつに対応しま す。そのビットが 0 なら、そのキーは map[] の対応するエントリに示された数 値を送出します。ビットが 1 なら、そのキーは「特殊」です。すなわち、その キーは何も送出しません。代わりに、「状態 (state)」の変更を施します。つま り、そのキーは shift, control, alt, lock, switch-screen, ファンクション キー, あるいは no-op キーであるということです。 map のビットは逆向きにな ります。つまり、ビット 7 が base に、ビット 6 が shift に、などと対応しま す。 フィールド flgs は、そのキーが caps-lock (1)、num-lock (2)、またはその両 方 (3) に反応すべきか、あるいは両方とも無視 (0) するべきかを決めます。 kbdcontrol(1) ユーティリティは、こういった記述をカーネルに/カーネルから実 行時にロードするために使われます。これにより実行時にキー割り当てを変更す ることができます。あるいは、より重要なことですが、キーの正確な意味を (GIO_KEYMAP ioctl で) カーネルから取得します (例えば、X サーバが利用しま す)。 ファンクションキーは SETFKEY ioctl 呼び出しを用いてプログラムできます。 この ioctl は fkeyarg_t 型の引数を取ります: struct fkeyarg { |
u_short |
keynum; |
||||
char |
keydef[MAXFK]; |
||||
char |
flen; |
||||
}; |
フィールド keynum はどのファンクションキーをプログラムするかを決めます。 配列 keydef は使用する新しい文字列 (長さは MAXFK まで) を含み、その長さを flen に入れなければなりません。 GETFKEY ioctl 呼び出しは似たように働きますが、これは keynum の現在の設定 を返します。 ファンクションキーは次のように番号付けされます: F1-F12 key 1 - 12 |
Shift F1-F12 |
key 13 - 24 |
||||
Ctrl F1-F12 |
key 25 - 36 |
||||
Ctrl+shift F1-F12 |
key 37 - 48 |
||||
Home |
key 49 |
||||
Up arrow |
key 50 |
||||
Page Up |
key 51 |
||||
(keypad) - |
key 52 |
||||
Left arrow |
key 53 |
||||
(keypad) 5 key 54 |
|||||
Right arrow |
key 55 |
||||
(keypad) + |
key 56 |
||||
End |
key 57 |
||||
Down arrow |
key 58 |
||||
Page down |
key 59 |
||||
Insert |
key 60 |
||||
Delete |
key 61 |
||||
Right window |
key 62 |
||||
Left window |
key 63 |
||||
Menu |
key 64 |
kbdcontrol(1) ユーティリティで実行時にこれらの値を変更することもできま す。 |
作者
So/ren Schmidt 〈sos@FreeBSD.org〉 FreeBSD January 8, 1995 FreeBSD |