Skip to content

Instantly share code, notes, and snippets.

@tachesimazzoca
Last active June 11, 2017 03:50
Show Gist options
  • Save tachesimazzoca/59994d670345e219f5ba9283ce617df3 to your computer and use it in GitHub Desktop.
Save tachesimazzoca/59994d670345e219f5ba9283ce617df3 to your computer and use it in GitHub Desktop.
Using JIS Keyboard as US Keyboard on XKB

Using JIS Keyboard as US Keyboard on XKB

The command setxkbmap allows us to modify any key mapppings in user X session. However each time the input method is changed, the modified states will be reset. Since I have no clue to solve this problem, I decided to rewrite the global symbol file at my own risk.

$ cp /usr/share/X11/xkb/symbols/jp /path/to/backup/jp.default
$ patch -u /usr/share/X11/xkb/symbols/jp < js-ansi.patch

Before editing xkb resources, I highly recommend that you save the current keymap. Just save the original keymap and restore it.

$ xkbcomp $DISPLAY /path/to/backup.xkb
$ xkbcomp /path/to/backup.xkb $DISPLAY

If you do something wrong while editing, you can recover the original keymap by just hitting the up-arrow (history back) and enter keys.

// Symbols for Japanese 106-keys keyboards (by tsuka@kawalab.dnj.ynu.ac.jp).
default partial alphanumeric_keys
xkb_symbols "106" {
include "jp(common)"
name[Group1]= "Japanese";
key <AE10> { [ 0, asciitilde ] };
key <AE13> { [ backslash, bar ] };
};
hidden partial alphanumeric_keys
xkb_symbols "common" {
// "Common" keys for jp 106/109A layouts.
key <HZTG> {
type[Group1]="PC_ALT_LEVEL2",
symbols[Group1]= [ Zenkaku_Hankaku, Kanji ]
};
key <AE01> { [ 1, exclam ] };
key <AE02> { [ 2, quotedbl ] };
key <AE03> { [ 3, numbersign ] };
key <AE04> { [ 4, dollar ] };
key <AE05> { [ 5, percent ] };
key <AE06> { [ 6, ampersand ] };
key <AE07> { [ 7, apostrophe ] };
key <AE08> { [ 8, parenleft ] };
key <AE09> { [ 9, parenright ] };
key <AE11> { [ minus, equal ] };
key <AE12> { [ asciicircum, asciitilde] };
key <AD01> { [ q, Q ] };
key <AD02> { [ w, W ] };
key <AD03> { [ e, E ] };
key <AD04> { [ r, R ] };
key <AD05> { [ t, T ] };
key <AD06> { [ y, Y ] };
key <AD07> { [ u, U ] };
key <AD08> { [ i, I ] };
key <AD09> { [ o, O ] };
key <AD10> { [ p, P ] };
key <AD11> { [ at, grave ] };
key <AD12> { [ bracketleft, braceleft ] };
key <CAPS> { [ Eisu_toggle, Caps_Lock ] };
key <AC01> { [ a, A ] };
key <AC02> { [ s, S ] };
key <AC03> { [ d, D ] };
key <AC04> { [ f, F ] };
key <AC05> { [ g, G ] };
key <AC06> { [ h, H ] };
key <AC07> { [ j, J ] };
key <AC08> { [ k, K ] };
key <AC09> { [ l, L ] };
key <AC10> { [ semicolon, plus ] };
key <AC11> { [ colon, asterisk ] };
key <AC12> { [ bracketright, braceright ] };
key <AB01> { [ z, Z ] };
key <AB02> { [ x, X ] };
key <AB03> { [ c, C ] };
key <AB04> { [ v, V ] };
key <AB05> { [ b, B ] };
key <AB06> { [ n, N ] };
key <AB07> { [ m, M ] };
key <AB08> { [ comma, less ] };
key <AB09> { [ period, greater ] };
key <AB10> { [ slash, question ] };
key <AB11> { [ backslash, underscore] };
key <LCTL> { [ Control_L ] };
key <NFER> { [ Muhenkan ] };
key <XFER> {
type[Group1]="PC_ALT_LEVEL2",
symbols[Group1]= [ Henkan, Mode_switch ]
};
key <HKTG> {
type[Group1]="PC_ALT_LEVEL2",
symbols[Group1]= [ Hiragana_Katakana, Romaji ]
};
key <EISU> {
type[Group1]="PC_ALT_LEVEL2",
symbols[Group1]= [ Eisu_toggle ]
};
key <KANA> {
type[Group1]="PC_ALT_LEVEL2",
symbols[Group1]= [ Hiragana_Katakana ]
};
key <PRSC> {
type[Group1]= "PC_ALT_LEVEL2",
symbols[Group1]= [ Print, Execute ]
};
};
partial alphanumeric_keys
xkb_symbols "henkan" {
key <XFER> {
type[Group1]="PC_ALT_LEVEL2",
symbols[Group1]= [ Henkan, Mode_switch ]
};
};
partial alphanumeric_keys
xkb_symbols "OADG109A" {
include "jp(common)"
name[Group1]= "Japanese (OADG 109A)";
key <AE10> { [ 0 ] };
key <AE13> { [ yen, bar ] };
};
// 86 keys with kana map
partial alphanumeric_keys
xkb_symbols "kana86" {
include "srvr_ctrl(fkey2vt)"
include "pc(editing)"
include "keypad(numoperdecsep)"
include "altwin(menu)"
include "jp(kana)"
include "jp(OADG109A)"
name[Group1]= "Japanese (Kana 86)";
key <ESC> { [ Escape ] };
key <NMLK> { [ Num_Lock ] };
key <BKSP> { [ BackSpace ] };
key <TAB> { [ Tab, ISO_Left_Tab ] };
key <RTRN> { [ Return ] };
key <LFSH> { [ Shift_L ] };
key <RTSH> { [ Shift_R ] };
key <LWIN> { [ Super_L ] };
key <LALT> { [ Alt_L ] };
key <SPCE> { [ space ] };
key <RALT> { [ Alt_R ] };
// For compatibility with other keyboards connected at the same time:
key <RWIN> { [ Super_R ] };
key <RCTL> { [ Control_R ] };
};
partial alphanumeric_keys
xkb_symbols "kana" {
name[Group1]= "Japanese (Kana)";
key <HZTG> {
type[Group1]="PC_ALT_LEVEL2",
symbols[Group1]= [ Zenkaku_Hankaku, Kanji ]
};
key <AE01> { [ kana_NU ] };
key <AE02> { [ kana_FU ] };
key <AE03> { [ kana_A, kana_a ] };
key <AE04> { [ kana_U, kana_u ] };
key <AE05> { [ kana_E, kana_e ] };
key <AE06> { [ kana_O, kana_o ] };
key <AE07> { [ kana_YA, kana_ya ] };
key <AE08> { [ kana_YU, kana_yu ] };
key <AE09> { [ kana_YO, kana_yo ] };
key <AE10> { [ kana_WA, kana_WO ] };
key <AE11> { [ kana_HO ] };
key <AE12> { [ kana_HE ] };
key <AE13> { [ prolongedsound ] };
key <AD01> { [ kana_TA ] };
key <AD02> { [ kana_TE ] };
key <AD03> { [ kana_I, kana_i ] };
key <AD04> { [ kana_SU ] };
key <AD05> { [ kana_KA ] };
key <AD06> { [ kana_N ] };
key <AD07> { [ kana_NA ] };
key <AD08> { [ kana_NI ] };
key <AD09> { [ kana_RA ] };
key <AD10> { [ kana_SE ] };
key <AD11> { [ voicedsound ] };
key <AD12> { [ semivoicedsound, kana_openingbracket ] };
key <CAPS> { [ Eisu_toggle, Caps_Lock ] };
key <AC01> { [ kana_CHI ] };
key <AC02> { [ kana_TO ] };
key <AC03> { [ kana_SHI ] };
key <AC04> { [ kana_HA ] };
key <AC05> { [ kana_KI ] };
key <AC06> { [ kana_KU ] };
key <AC07> { [ kana_MA ] };
key <AC08> { [ kana_NO ] };
key <AC09> { [ kana_RI ] };
key <AC10> { [ kana_RE ] };
key <AC11> { [ kana_KE ] };
key <AC12> { [ kana_MU, kana_closingbracket ] };
key <AB01> { [ kana_TSU, kana_tsu ] };
key <AB02> { [ kana_SA ] };
key <AB03> { [ kana_SO ] };
key <AB04> { [ kana_HI ] };
key <AB05> { [ kana_KO ] };
key <AB06> { [ kana_MI ] };
key <AB07> { [ kana_MO ] };
key <AB08> { [ kana_NE, kana_comma ] };
key <AB09> { [ kana_RU, kana_fullstop ] };
key <AB10> { [ kana_ME, kana_middledot ] };
key <AB11> { [ kana_RO ] };
key <LCTL> { [ Control_L ] };
key <NFER> { [ Muhenkan ] };
key <XFER> {
type[Group1]="PC_ALT_LEVEL2",
symbols[Group1]= [ Henkan, Mode_switch ]
};
key <HKTG> {
type[Group1]="PC_ALT_LEVEL2",
symbols[Group1]= [ Hiragana_Katakana, Romaji ]
};
key <PRSC> {
type[Group1]= "PC_ALT_LEVEL2",
symbols[Group1]= [ Print, Execute ]
};
};
partial alphanumeric_keys
xkb_symbols "nicola_f_bs" {
key <BKSP> {
type="",
symbols[Group1]= [ bracketright, braceright ]
};
key <AE10> { [ 0, underscore ] };
key <AD11> { [ colon, asterisk ] };
key <AC11> { [ BackSpace, BackSpace ] };
key <AC12> { [ Escape ] };
key <AB11> { [ at, grave ] };
};
// Copied from macintosh_vndr/jp
partial alphanumeric_keys
xkb_symbols "mac" {
include "jp(kana)"
name[Group1]= "Japanese (Macintosh)";
replace key <CAPS> { [ Caps_Lock ] };
};
partial alphanumeric_keys
xkb_symbols "hztg_escape" {
replace key <HZTG> { [ Escape ] };
};
partial alphanumeric_keys
xkb_symbols "dvorak" {
include "jp(OADG109A)"
name[Group1]= "Japanese (Dvorak)";
key <AE11> { [ at, grave ] };
key <AD01> { [ colon, asterisk ] };
key <AD02> { [ comma, less ] };
key <AD03> { [ period, greater ] };
key <AD04> { [ p, P ] };
key <AD05> { [ y, Y ] };
key <AD06> { [ f, F ] };
key <AD07> { [ g, G ] };
key <AD08> { [ c, C ] };
key <AD09> { [ r, R ] };
key <AD10> { [ l, L ] };
key <AD11> { [ slash, question ] };
key <AC02> { [ o, O ] };
key <AC03> { [ e, E ] };
key <AC04> { [ u, U ] };
key <AC05> { [ i, I ] };
key <AC06> { [ d, D ] };
key <AC07> { [ h, H ] };
key <AC08> { [ t, T ] };
key <AC09> { [ n, N ] };
key <AC10> { [ s, S ] };
key <AC11> { [ minus, equal ] };
key <AB01> { [ semicolon, plus ] };
key <AB02> { [ q, Q ] };
key <AB03> { [ j, J ] };
key <AB04> { [ k, K ] };
key <AB05> { [ x, X ] };
key <AB06> { [ b, B ] };
key <AB08> { [ w, W ] };
key <AB09> { [ v, V ] };
key <AB10> { [ z, Z ] };
};
// EXTRAS:
partial alphanumeric_keys
xkb_symbols "sun_type6_suncompat" {
include "sun_vndr/jp(sun_type6_suncompat)"
};
partial alphanumeric_keys
xkb_symbols "sun_type6" {
include "sun_vndr/jp(sun_type6)"
};
partial alphanumeric_keys
xkb_symbols "sun_type7_suncompat" {
include "sun_vndr/jp(sun_type7_suncompat)"
};
partial alphanumeric_keys
xkb_symbols "suncompat" {
include "sun_vndr/jp(suncompat)"
};
partial alphanumeric_keys
xkb_symbols "sun_type7" {
include "sun_vndr/jp(sun_type7)"
};
9,10c9,10
< key <AE10> { [ 0, asciitilde ] };
< key <AE13> { [ backslash, bar ] };
---
> key <AE10> { [ 0, parenright ] };
> key <AE13> { [ grave, asciitilde ] };
21a22,23
> key <TLDE> { [ grave, asciitilde ] };
>
23c25
< key <AE02> { [ 2, quotedbl ] };
---
> key <AE02> { [ 2, at ] };
27,32c29,34
< key <AE06> { [ 6, ampersand ] };
< key <AE07> { [ 7, apostrophe ] };
< key <AE08> { [ 8, parenleft ] };
< key <AE09> { [ 9, parenright ] };
< key <AE11> { [ minus, equal ] };
< key <AE12> { [ asciicircum, asciitilde] };
---
> key <AE06> { [ 6, asciicircum ] };
> key <AE07> { [ 7, ampersand ] };
> key <AE08> { [ 8, asterisk ] };
> key <AE09> { [ 9, parenleft ] };
> key <AE11> { [ minus, underscore ] };
> key <AE12> { [ equal, plus ] };
44,45c46,47
< key <AD11> { [ at, grave ] };
< key <AD12> { [ bracketleft, braceleft ] };
---
> key <AD11> { [ bracketleft, braceleft ] };
> key <AD12> { [ bracketright, braceright ] };
47c49
< key <CAPS> { [ Eisu_toggle, Caps_Lock ] };
---
> key <CAPS> { [ Control_L ] };
58,60c60,62
< key <AC10> { [ semicolon, plus ] };
< key <AC11> { [ colon, asterisk ] };
< key <AC12> { [ bracketright, braceright ] };
---
> key <AC10> { [ semicolon, colon ] };
> key <AC11> { [ apostrophe, quotedbl ] };
> key <AC12> { [ backslash, bar ] };
73c75
< key <LCTL> { [ Control_L ] };
---
> key <LCTL> { [ Eisu_toggle, Caps_Lock ] };
117,118c119,120
< key <AE10> { [ 0 ] };
< key <AE13> { [ yen, bar ] };
---
> key <AE10> { [ 0, parenright ] };
> key <AE13> { [ grave, asciitilde ] };
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment