スポンサーリンク

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

スポンサーリンク