xev を使えば,各々のキーに対応する keycode 番号と keysym を知ることができます.
% xev
として起動すれば,"Event Tester" という名前の小さな Window ができます.
そこから別の Window に Focus を移さないようにして (移ってしまったら再度ここに戻して),例えば PC-98 にて [a], [TAB], [CTRL] のキーを打てば,xev を起動した terminal に次のように表示されます.
KeyRelease event, serial 24, synthetic NO, window 0x1000001,
root 0x3b, subw 0x0, time 7044604, (347,489), root:(376,546),
state 0x0, keycode 37 (keysym 0x61, a), same_screen YES,
XLookupString gives 1 bytes: (61) "a"
KeyRelease event, serial 24, synthetic NO, window 0x1000001,
root 0x3b, subw 0x0, time 6985487, (199,327), root:(228,384),
state 0x0, keycode 23 (keysym 0xff09, Tab), same_screen YES,
XLookupString gives 1 bytes: (09) " "
KeyRelease event, serial 24, synthetic NO, window 0x1000001,
root 0x3b, subw 0x0, time 1469250, (672,773), root:(817,918),
state 0x4, keycode 124 (keysym 0xffe3, Control_L), same_screen YES,
XLookupString gives 0 bytes: ← 対応する ASCII code がない.
/usr/X11R6/include/X11/keysymdef.h をこれらのキーに対して抜粋すると,次のようになっています.
#define XK_a 0x0061 /* U+0061 LATIN SMALL LETTER A */
#define XK_Tab 0xff09
#define XK_Control_L 0xffe3 /* Left control */