バージョン 2.1 以降,XFree86 は可能な限り Linux の keymap を用いて X 用の keymap を初期化するようになっています.とはいっても,Linux にはキー一つ あたり 16 のエントリーがあり(shift, AltGr, Ctrl, Alt の組み合わせ), 総計 256 のエントリーがあることになるのに対し,X にはキー一つあたり4つの エントリー(Shift, Mod の組み合わせ)しかありません.従って,失われてしまう 情報があるのは致し方ありません.
X はまず最初に,Xconfig というファイルを読み込みます.ここでは LeftAlt, RightAlt, RightCtl, ScrollLock の各キーがそれぞれ Meta, ModeShift, Compose, ModeLock あるいは ScrollLock として定義されているかもしれません.詳しくは, X386keybd(1), XFree86kbd(1) のマニュアルページをお読み下さい.
RightCtl が ModShift あるいは ModeLock と定義されていない限り,LeftAltはMod と なっています.RightCtl が ModShift/Modelock になっている場合には,RightCtl が Mod になります.RightAlt がMod と定義されている場合は,RightAltがMod になり ます.Linux のキーが持ちうる 16 種類の意味から XFree86 がどの 4 種類を選択 するかは,これによって決まります.注:現在 Linux は 左右二つの Ctrl/Shift の 区別をしないような初期設定を採用していますが,X はそれぞれこの二つを区別して います.
ついでカーネルの keymap を読み込み,対応する X 用設定が作成されますが,大抵は いいかげんなものです."action keys"( Show_Memory, Show_State, Show_Registers, Last_Console, Console_n, Scroll_Backward, Scroll_Forward, Caps_On,Boot)に 対するビンディングは無視されます.デッドキー,各種ロックキー (ShiftLock を除 く), "ASCII-x" keys も同様に取り扱われます.
続いて,Xconfig ファイルの定義が用いられます.(つまり,Xconfig の合成定義で Linux keymap の値を上書きすることになるのです)
ファンクションキーと関連づけられた文字列はどうなるのでしょう?どうにもならな いというのが答えです.Xにはこうした概念がないからです.(xterm で機能キーに 文字列を定義することは可能です.ただし,キーを最初に取得するのはウインドーマ ネージャーだということを忘れないようにしてください)
著者は,どういう方法でxtermが X keymapを使用するようになるのか存じません.
Alt キーが押されたときにはXのkeymapを使用しなければならないということをxterm がどのようにして知るのかを,著者は承知していません. どうやら eightBitInput をチェックし,この値が真か偽かに応じて,文字の高次ビット をセットするか,(setmetamode(1) が端末にたいして行うように)Escape 文字を付け 加えるかのいずれかを行っているようです.