Skip to content

Instantly share code, notes, and snippets.

@komamitsu
Last active January 14, 2023 14:08
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save komamitsu/93cbda449186b9bc71dd29309edeed14 to your computer and use it in GitHub Desktop.
Save komamitsu/93cbda449186b9bc71dd29309edeed14 to your computer and use it in GitHub Desktop.
Key remapping on Linux using xkb-options

Goal

  • Make Muhenkan key a left Control key
  • Make Hiragana Katakana key an Escape key
  • Make Capslock key a Zenkaku Hankaku key

Options

  • xmodmap: Easy, but my laptop's suspend/resume resets xmodmap configuration
  • xkb: Let's try this

Add new symbols to /usr/share/X11/xkb/symbols

  • (new) /usr/share/X11/xkb/symbols/muhe
xkb_symbols "ctrl" {
    key <MUHE> { [ Control_L ] };
    modifier_map Control { <MUHE> };
};
  • (new) /usr/share/X11/xkb/symbols/hktg
xkb_symbols "escape" {
    key <HKTG> { [ Escape ] };
};
  • (update) /usr/share/X11/xkb/symbols/capslock
$ diff -U2 capslock.orig capslock
--- capslock.orig       2021-06-09 05:20:40.000000000 +0900
+++ capslock    2023-01-08 00:22:47.560047494 +0900
@@ -83,4 +83,9 @@
 };
 
+xkb_symbols "hztg" {
+    key <CAPS> { [ Zenkaku_Hankaku ] };
+};
+
+
 hidden partial modifier_keys
 xkb_symbols "none" {

Update /usr/share/X11/xkb/rules/evdev to add the 3 entries

$ diff -U2 evdev.orig evdev
--- evdev.orig  2021-08-18 18:26:23.000000000 +0900
+++ evdev       2023-01-08 11:10:16.804830799 +0900
@@ -1043,4 +1043,5 @@
   caps:hyper           =       +capslock(hyper)
   caps:menu            =       +capslock(menu)
+  caps:hztg            =       +capslock(hztg)
   caps:none            =       +capslock(none)
   caps:ctrl_modifier   =       +capslock(ctrl_modifier)
@@ -1156,4 +1157,6 @@
   lv5:rwin_switch_lock_cancel     =       +level5(rwin_switch_lock_cancel)
   parens:swap_brackets   =   +parens(swap_brackets)
+  muhe:ctrl                          =      +muhe(ctrl)
+  hktg:escape                        =       +hktg(escape)

Update /usr/share/X11/xkb/rules/evdev.lst to add 3 entries

$ diff -U2 evdev.lst.orig evdev.lst
--- evdev.lst.orig      2021-08-18 18:26:23.000000000 +0900
+++ evdev.lst   2023-01-08 11:10:25.608871251 +0900
@@ -876,4 +876,5 @@
   caps:numlock         Make Caps Lock an additional Num Lock
   caps:ctrl_modifier   Make Caps Lock an additional Ctrl
+  caps:hztg            Make Caps Lock an additional Zenkaku Hankaku
   caps:none            Caps Lock is disabled
   altwin               Alt and Win behavior
@@ -983,2 +984,4 @@
   terminate            Key sequence to kill the X server
   terminate:ctrl_alt_bksp Ctrl+Alt+Backspace
+  muhe:ctrl            Make Muhenkan a Left Ctrl key
+  hktg:escape          Make Hiragana Katakana an Escape key

Set XKBOPTIONS in /etc/default/keyboard to the new options

XKBLAYOUT=us
BACKSPACE=guess
XKBOPTIONS="caps:hztg,muhe:ctrl,hktg:escape"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment