Linuxでのキー入力のカスタマイズ
Linuxでのキー入力は
スキャンコードがキーボードから届き
カーネルでキーコードに変換し /dev/input/eventX から取り出せる
ttyからテキストストリームでとりだすとキーシム または 文字列として取得できる
スキャンコード
スキャンコードはキーボードから届く押されてキーの物理的な識別コード。
キーコードへの変換はカーネル空間で行える。
その設定はkbdパッケージのloadkeysで動的に行える。また、setKeycodesで行えるがusbキーボードには効果がないらしい。より汎用的なものはudevとhwdbで変換することもできる。
キーコード
コンピュータ上でのキーを識別コード
スキャンコードを変換したもの。
/dev/input/eventXをreadしてバイナリ形式で取得できる。これを処理するライブラリとしてlibevdevがある。
その時に受け取れる構造体は以下のもの
code: C
struct input_event {
struct timeval time; // 発生時刻
unsigned short type; // キーボードイベントの場合 EV_KEYになる
unsigned short code; // キーボードイベントの場合キーコード(設定次第ではスキャンコードにもできる ioctlでKDGKBMODEでRAWを指定する)
unsigned int value; // キーが離れた場合は0 キーが押されたときは1 オートリピートしてるときは2
};
キーシム、文字列
キーコードのリテラル表現。キーボードに接続された標準入力からはこの情報を取ることができる。
キーコード自体も取得できるがシフトキーが押されているかどうかなど判定する必要があるがこれを使う場合は不要とできる