Skip to content

Instantly share code, notes, and snippets.

@komamitsu
Last active October 22, 2024 18:38
Show Gist options
  • Select an option

  • Save komamitsu/93cbda449186b9bc71dd29309edeed14 to your computer and use it in GitHub Desktop.

Select an option

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"
@diegomdrs
Copy link
Copy Markdown

Thank you! This help me to understand xkb

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment