Ubuntu16.04で任意のキーの入れ替え
久々に実機にlinux環境用意する必要に迫られてUbuntu16.04を入れた。で、キーを入れ替えようと思ってxmodmap〜〜wとかやったけどうまくいかなくて無理やり解決したのでメモ
問題
昔のエントリで「ハマった点」としていたものと同じもの。簡単にいうと「xmodmapでキーの入れ替えを設定しても日本語入力のON/OFFを一度でもするとxmodmapで設定したものが消える」という状態。
やりたいこと
BackspaceキーとBackslash(bar)キー
を入れ替える、またその入れ替えが恒常的に保たれる
解決法
以下のブログを参照。ほぼ同じ方法。
xmodmap と setxkbmap。 » かけまわる子犬。
以下、自分の環境での作業メモ。
% setxkbmap -print xkb_keymap { xkb_keycodes { include "evdev+aliases(qwerty)" }; xkb_types { include "complete" }; xkb_compat { include "complete" }; xkb_symbols { include "pc+us+inet(evdev)" }; xkb_geometry { include "pc(pc105)" }; };
xkb_keycodesはevdevなので、/usr/share/X11/xkb/keycodes/evdev を見てパターンを理解。
xkb_symbols "basic" にあたりをつけて、key < BKSL >を変更、key < BKSP >が無いので追加。
/usr/share/X11/xkb/symbols/us
default partial alphanumeric_keys modifier_keys xkb_symbols "basic" { name[Group1]= "English (US)"; key <TLDE> {>_______[ grave,>___asciitilde>_____]>______}; key <AE01> {>_______[>______ 1,>___exclam >>_______]>______}; key <AE02> {>_______[>______ 2,>___at>_____>_______]>______}; key <AE03> {>_______[>______ 3,>___numbersign>_____]>______}; key <AE04> {>_______[>______ 4,>___dollar>_>_______]>______}; --- 略 --- //key <BKSL> {>_____[ backslash, bar>_______]>______}; key <BKSL> { [ BackSpace, BackSpace ] }; key <BKSP> { [ backslash, bar ] };
いちおうこれで今のところは求める動作になっている。なんという力づく。。。
検索してみるといろいろキー入れ替えのやり方見つかって結構試してみたけど、どれも日本語入力ON/OFFで死亡した。。。なにかスマートなやり方があるのか?それともキー入れ替える人が少ないのか?という感じでした。つらい。
ちなみに解決策を与えてくれたブログの最後に
setxkbmap -option の記述方法知りたいなぁ。
と書いてあったのでいちおうメモっとくと、setxkbmap -optionの内容は/usr/share/X11/xkb/rules/base を参照すればたぶんわかる。(3年前のエントリにコメントする勇気がちょっと無い)
追記:
ctrl とcaps の入れ替えは /etc/default/keyboard に XKBOPTIONS="ctrl:swapcaps"