top page > Klaviatur > here

キーと各種コードの対応関係


概要

FreeBSD における PC-98 用および AT 互換機用の K/B のキーと scancode および keycode との対応を提示する. (X Window System は XFree86 4 系および X.Org 6 系.)


目次

1. PC-98
2. AT 互換機
2.1 us101
2.2 jp106

このページでは,"scancode" は system ssan code のうちキーを識別する部分のみを指すことにします.

"キーの刻印またはグループ" の欄のグループは,「英数」「Key Pad」「未使用」の三つです. またその後に書いた "(数字)" はその個数です.

keycode の欄の "<ESC>" のような表記は keycode 名 です. keycode 名keycode 番号との対応関係は,/usr/X11R6/lib/X11/xkb/keycodes/xfree98xfree86 に記されています.

1. PC-98

PC-98 ではすべてのキーに対して scancode + 8 = keycode です.

scancode キーの刻印またはグループ keycode
000ESC<ESC>  =   8
001-013英数 (13 個) ('1' から '\' まで) <AE01>-<AE12> =   9-20, <BKSL> =  21
014BS<BKSP> =  22
015TAB<TAB>  =  23
016-027英数 (12 個) ('Q' から '{' まで) <AD01>-<AD12> =  24-35
028Enter<RTRN> =  36
029-040英数 (12 個) ('A' から '}' まで) <AC01>-<AC12> =  37-48
041-051英数 (11 個) ('Z' から '_' まで) <AB01>-<AB11> =  49-59
052SPACE<SPCE> =  60
053XFER<XFER> =  61
054ROLL UP<PGUP> =  62
055ROLL DOWN<PGDN> =  63
056INS<INS>  =  64
057DEL<DELE> =  65
058UP<UP>   =  66
059LEFT<LEFT> =  67
060RIGHT<RGHT> =  68
061DOWN<DOWN> =  69
062HOME<HOME> =  70
063HELP<HELP> =  71
064-080(Enter を除く) Key Pad (17 個)<KP**> =  72-88
081NFER<NFER> =  89
082-086vf1-5<FK11>-<FK15> =  90-94
087-095未使用 (9 個)
096STOP<BRK>  = 104
097COPY<PRSC> = 105
098-107f1-f10<FK01>-<FK10> = 106-115
108-111未使用 (4 個)
112SHIFT<LFSH> = 120
113CAPS<CAPS> = 121
114かな<ALGR> = 122
115GRPH (Alt)<LALT> = 123
116CTRL<LCTL> = 124
117-127未使用 (11 個)

集計すると,次のようになります.

キーの総数         : 109 [1]
独立なキーの数     : 107  (二つある [SHIFT] と [Enter] が各々独立でない.)
設定できるキーの数 : 104  ([LWIN], [RWIN], [MENU] が使用できない.[2])

使用する code の数 : 104
未使用の code の数 :  24 = 9 + 4 + 11
計                 : 128

[1] PC-9821 Rv, Ra のキーの総数は 109 個,PC-9821 Ap は 106 個,PC-9821 La13 は 88 個である.

[2] /usr/src/sys/pc98/pc98/pc98kbd.cpckbd_read_char() にてこれらのキーの scancode を出力しようとしても反応がない. 従って,これらのキーは入力手段からして違うように思える. いずれにしても,FreeBSD においては,これらのキーは利用できない.

2. AT 互換機

AT 互換機では scancode + 8 = keycode となる部分とならない部分とがあります. us101 の scancode で言えば,(000-088) の範囲は前者,(089-107) の範囲は後者です. jp106 はさらに (108-127) の範囲も使いますが,そこでの両者の対応関係はまちまちです. そこで,scancode + 8 にならない keycode はその番号に色付けしました.

2.1  us101

こちらで確認した K/B は Happy Hacking Keyboard Lite 2 (英語配列) です.

Happy Hacking Keyboard Lite 2 は,厳密には 101/102 K/B ではなく,備わっていないキーがあります. (これは一つのキーを [Fn] キーを用いて使い分けている件ではなく,それも含めて提供されていないキーがあるということです.) それらは us.iso.kbd から推測し,下表では色付けしました.

scancode キーの刻印またはグループ keycode
000未使用 (1 個)
001ESC<ESC>  =   9
002-013英数 (12 個) <AE01>-<AE12> =  10-21
014BS<BKSP> =  22
015TAB<TAB>  =  23
016-027英数 (12 個) <AD01>-<AD12> =  24-35
028Enter<RTRN> =  36
029LCTRL<LCTL> =  37
030-040英数 (11 個) <AC01>-<AC11> =  38-48
041英数 (1 個) '`', '~' <TLDE> =  49
042LSHIFT<LFSH> =  50
043英数 (1 個)<BKSL> =  51
044-053英数 (10 個) <AB01>-<AB10> =  52-61
054RSHIFT<RTSH> =  62
055Key Pad '*' <KPMU> =  63
056LALT<LALT> =  64
057SPACE<SPCE> =  65
058CAPS<CAPS> =  66
059-068f1-f10 <FK01>-<FK10> =  67-76
069nlock <NMLK> =  77
070Scr Lk<SCLK> =  78
071-082Key Pad (12 個) (省略)
083Key Pad '.' DEL <KPDL> =  91
084-086未使用 (3 個)
087f11<FK11> =  95
088f12<FK12> =  96
089Key Pad CR <KPEN> = 108
090RCTRL <RCTL> = 109
091Key Pad '/' <KPDV> = 112
092PSc/SRq<PRSC> = 111
093RALT<RALT> = 113
094HOME<HOME> =  97
095UP <UP>   =  98
096ROLL DOWN<PGDN> = 105
097LEFT<LEFT> = 100
098RIGHT<RGHT> = 102
099End<END>  = 103
100DOWN<DOWN> = 104
101ROLL UP <PGUP> =  99
102INS<INS>  = 106
103DEL<DELE> = 107
104Pus/Brk<PAUS> = 110
105LWIN<LWIN> = 115
106RWIN<RWIN> = 116
107MENU <MENU> = 117
108-127未使用 (20 個)

Happy Hacking Keyboard Lite 2 では,以下のキーは刻印に二種類のキーが併記されています. FreeBSD では,これらは前者 (色付けした方) に設定されています.

scancode キーの刻印またはグループ keycode
092PSc/SRq <PRSC> = 111 / <SYRQ> =  92
104Pus/Brk <PAUS> = 110 / <BRK>  = 114

2.2  jp106

こちらで確認した K/B は Happy Hacking Keyboard Lite 2 (日本語配列),Libretto ff 1100 の K/B,および PC-98 配列 K/B です. 前二者は PS/2 かつ jp106 ,後者は USB かつ jp106 の亜種です.

jp106 K/B は,scancode (0-107) の範囲は us101 と同じ keycode です. ただし,ここでは示しませんが,いくつかのキーの keysym 名が異なります. 以下の表では,PC-98 配列とのキーの対応関係を示すためにこの範囲も示しました. (PC-98 配列の欄には jp106 と違う部分のみを記します.)

なお,Happy Hacking Keyboard Lite 2 には 109 個のキーが備わっていないので,jp.106..kbd から推測しました.

それと,keycode の欄に '/' がある場合,その左側が jp106,右側が PC-98 配列のものです. もちろん,後者は当方で設定したものです.

scancode jp106 PC-98 配列 keycode
108-111未使用 (4 個)
112カタカナひらがなかな <HKTG> = 208 / <ALGR> = 225
113-114未使用 (2 個)
115 英数 (1 個) 英数 (1 個) '_' <AB11> = 211 / <AB11> = 228
116-120未使用 (5 個)
121変換XFER <XFER> = 129 / <XFER> = 158
122未使用 (1 個)
123無変換NFER<NFER> = 131
124未使用 (1 個)
125英数 '\' <AE13> = 133 / <BKSL> = 133
126-127未使用 (2 個)
000未使用 (1 個)
001ESC <ESC>  =   9
002-013英数 (12 個) <AE01>-<AE12> =  10-21
014BS<BKSP> =  22
015TAB<TAB>  =  23
016-027英数 (12 個) <AD01>-<AD12> =  24-35
028Enter<RTRN> =  36
029LCTRLCTRL <LCTL> =  37
030-040英数 (11 個) <AC01>-<AC11> =  38-48
041全角半角vf5 <HZTG> = <TLDE> =  49 / <FK15> =  49
042LSHIFT<LFSH> =  50
043英数 (1 個) ']' <AC12> =  51
044-053英数 (10 個) <AB01>-<AB10> =  52-61
054RSHIFT<RTSH> =  62
055Key Pad '*' <KPMU> =  63
056LALT<LALT> =  64
057SPACE<SPCE> =  65
058CAPS<CAPS> =  66
059-068F1-F10f1-f10 <FK01>-<FK10> =  67-76
069Num Lockvf3 <NMLK> =  77 / <FK13> =  77
070Scroll Lockvf4 <SCLK> =  78 / <FK14> =  78
071-082Key Pad (12 個)(省略)
083Key Pad '.' DEL <KPDL> =  91
084-086未使用 (3 個)
087F11vf1<FK11> =  95
088F12vf2<FK12> =  96
089Key Pad CR未使用 (1 個) <KPEN> = 108
090RCTRL未使用 (1 個) <RCTL> = 109
091Key Pad '/' <KPDV> = 112
092PrtSc, SysRqCOPY <PRSC> = 111
093RALT未使用 (1 個) <RALT> = 113
094HOME <HOME> =  97
095UP <UP>   =  98
096PgDnROLL DOWN <PGDN> = 105
097LEFT <LEFT> = 100
098RIGHT <RGHT> = 102
099EndHELP <END>  = 103 / <HELP> = 103
100DOWN <DOWN> = 104
101PgUpROLL UP <PGUP> =  99
102INS <INS>  = 106
103DEL <DELE> = 107
104Pause/BreakSTOP <PAUS> = 110 / <BRK>  = 110
105LWIN<LWIN> = 115
106RWIN<RWIN> = 116
107MENU<MENU> = 117

scancode 112, 115, 121 がなぜ異なる keycode に変換されるのかは追求していませんが,同一の環境 (FreeBSD 6.2, X.Org 6.9.0, Libretto) にて実際にこうなっています.

(補足) XFree86 4.4.0 よりも前の version では次のキーの keycode が上の表と異なります.

scancode jp106 PC-98 配列 keycode
112カタカナひらがなかな <HKTG> = 120 / <ALGR> = 120
115 英数 (1 個) 英数 (1 個) '_' <AB11> = 123 / <AB11> = 123
121変換XFER <XFER> = 129 / <XFER> = 129

PC-98 配列 K/B は AT 互換機用の jp106 K/B の亜種であり,使用法もそれに準じます. ただし,両者は完全に対応が付くわけではないので,PC-98 と同様に使うためには jp106 用に提供された諸々の環境を修正する必要があります.

PC-98 配列の Key Pad の '=' と ',' を使えるようにするため,未使用の部分を利用して以下のように修正しました. <KPEQ>, <KPSP> は正規の名称ですが,keycode 134, 135 は当方で勝手に設定した値で,たまたま scancode + 8 の番号が未使用だったのでそれを使いました. 詳細は PC-98 K/B on AT を参照.

scancode jp106 PC-98 配列 keycode
126未使用 (1 個)Key Pad '=' なし / <KPEQ> = 134
127未使用 (1 個)Key Pad ',' なし / <KPSP> = 135

jp106 K/B について集計すると,次のようになります.

キーの総数         : 109
独立なキーの数     : 109
設定できるキーの数 : 109

使用する code の数 : 109
未使用の code の数 :  19
計                 : 128

PC-98 配列 K/B について集計すると,次のようになります.

キーの総数         : 109
独立なキーの数     : 108  ([Enter] が独立でない.)
設定できるキーの数 : 106  (Key Pad の '=', ',' 対応後は 108)

使用する code の数 : 106  (Key Pad の '=', ',' 対応後は 108)
未使用の code の数 :  22  (Key Pad の '=', ',' 対応後は  20)
計                 : 128

Libretto ff 1100 も jp106 K/B ですが,先の表とは以下のキーが異なります. (キーが無いのです.)

scancode jp106 Libretto keycode
069Num LockFn + F10 <NMLK> =  77
070Scroll LockFn + F12 <SCLK> =  78
093RALT未使用 <RALT> = 113 / なし
106RWIN未使用 <RWIN> = 116 / なし