Help us understand the problem. What is going on with this article?

Ubuntu 16.04 で XKB を使ってキーマップをカスタマイズする

More than 1 year has passed since last update.

いつも分からなくなるのでメモ

概要

こんなことがやりたくなったら、キーマップをカスタマイズすることになる。

  • JIS 配列キーボードを使っているが、US 配列として使いたい
  • Caps Lock を Control に割り当てたい

やり方は幾つかあるようだ。XKB を使う方法.Xmodmap を編集する方法

XKB の方が新しい仕組みなので、そっちでやる。

下準備

デスクトップ右上のキーボードアイコンから「設定」をクリックし、「入力メソッドの設定」画面を出す。

キーボード - 日本語
Mozc

のように表示されているかと思う。
Mozc で直接入力モードと変換モードを切り替えつつ使えばよく、
「キーボード - 日本語」が残っている意味がないと思うので Mozc だけにする。

Mozc

次に、dconf-editor をインストールして /org/gnome/settings-daemon/plugins/keyboard/active を 0 に設定する。

$ sudo apt install dconf-editor
$ dconf-editor

左側のリストから org > gnome ... とたどっていく。active からチェックマークをはずす。
active 0 とすることにより、スリープからの復帰や入力メソッドの切り替え時に XKB の設定値が初期化されないようになる。

参考:http://blog.goo.ne.jp/ikunya/e/86c7c228787112acd3a664c1a4e31ef3 の 2014-05-11 05:44:30 のコメント

XKB の設定

xkbで無変換にctrlを割り当てる が参考になる。

キーボードレイアウトを US 配列とし、Caps Lock を Control に割り当て、その他ちょっとしたキーマップのカスタマイズを行う。

ファイル構成はこうなる:

$HOME/.xkb/
    keymap/
        mykbd
    symbols/
        custom

keymap/mykbd が主となるファイル。ベースとなるファイルを setxkbmap で作成し、それを編集していくと便利。

$ setxkbmap -print > ~/.xkb/keymap/mykbd

中身はこんな感じ。変更したのは xkb_symbols の行だけ。

xkb_keymap {
        xkb_keycodes  { include "evdev+aliases(qwerty)" };
        xkb_types     { include "complete"      };
        xkb_compat    { include "complete"      };
        xkb_symbols   { include "pc+us+inet(evdev)+custom(jpus)+custom(ctrl)+custom(kana)"      };
        xkb_geometry  { include "pc(pc105)"     };
};

symbols/custom は先ほどのキーマップファイルから include されているファイル。こんな中身。

xkb_symbols "jpus" {
  replace key <AE13> { [ backslash, bar ] };
  replace key <AC12> { [ Return ] };
};

xkb_symbols "ctrl" {
  replace key <CAPS> { [ Control_L ] };
  modifier_map Control { <CAPS> };
};

xkb_symbols "kana" {
  replace key <NFER> { [ Muhenkan ] };
  replace key <XFER> { [ Henkan ] };
};

設定のまとまりごとに jpus とか ctrl とかの名前を付けて分けているが、すべてまとめてもよいはず。

JIS 配列を無理やり US 配列にすると、"|\" と印刷されたキーを押しても何も反応しなくなる。
その代わり、"}]" と印刷されたキーを押すと "|\" と入力される。
やっぱりバックスペースの位置は右上であってほしい。そのための設定が jpus だ。

replace key <AE13> { [ backslash, bar ] }; は "|\" キーで "|\" を入力するための設定。
replace key <AC12> { [ Return ] }; は "}]" キーで Return を入力するための設定。

AE13 や AC12 というのは /usr/share/X11/xkb/symbols/jp から見つけた名前。

~/.xkb/keymap/mykbd をログイン時に読み込ませる

X 起動時に先ほど定義したキーマップファイルを読み込ませるように設定する。

Gnome のアプリケーション自動起動機能を使うことにした。

まずキーマップファイルを読み込ませるスクリプトを準備しておく。

~/bin/load_xkbmap.sh

#!/bin/sh

if [ -s $HOME/.xkb/keymap/mykbd ]
then
    sleep 1
    xkbcomp -I$HOME/.xkb $HOME/.xkb/keymap/mykbd $DISPLAY 2>/dev/null
fi

sleep を入れておかないと、タイミング問題で上手く適用されない場合がある。
自分の環境では 1 秒で十分安定するようだが、適宜 sleep 時間を調整してほしい。

スクリプトに実行権限を付けておく。

$ chmod +x ~/bin/load_xkbmap.sh

手動で load_xkbmap.sh を実行して、希望のキーマップになっていることを確認する。

キーマップがうまく設定できたら自動起動するようにしておく。

$ gnome-session-properties

で自動起動設定画面が開くので、項目を 1 つ追加する。

  • 名前:Load XKB Map (なんでもいい)
  • コマンド:/home/.../bin/load_xkbmap.sh

これで、起動時に独自キーマップが自動で読み込まれる。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away