XKBでCapsLockをEscに割り当てる(Ubuntuでキーマッピング変更)

  • 8
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

xmodmapコマンドで変更できるみたいですが、最近は、setxkbmapコマンドを使う方がいい?みたいなのでその方法を考えてみました。

環境

Ubuntu 15.10
IM: fcitx 4.2.9

setxkbmapコマンド

調べた結果、以下のコマンドで実現できるみたいです。

$ setxkbmap -option caps:escape

しかし、問題が2つありました。

  • CapsLockを押すと、EscとCapsLock両方を入力したようになる
  • 日本語を入力するために、入力メソッドを直接入力からmozcに変更すると、設定が無効になって元のCapsLockに戻ってしまう

XKBの設定ファイルを書き換える

まず、ひとつ目の問題を解決するために、XKBの設定ファイルを直接編集することにしました。

現在の設定の確認

$ setxkbmap -print

結果:

xkb_keymap {
    xkb_keycodes  { include "evdev+aliases(qwerty)" };
    xkb_types     { include "complete"  };
    xkb_compat    { include "complete"  };
    xkb_symbols   { include "pc+jp+us:2+inet(evdev)+capslock(escape)"   };
    xkb_geometry  { include "pc(pc105)" };
};

xkb_symbols を見てみると、pc,jp,us,inet(のevdev),capslock(のescape)を読み込んでいることがわかります。

設定ファイルの編集

それぞれのオプションの細かい設定は、以下のフォルダ内のファイルに書かれていました。

/usr/share/X11/xkb/symbols/

ここを、編集します。
/usr/share/X11/xkb/symbols/capslock を開いて、32行目付近の

partial hidden modifier_keys
xkb_symbols "escape" {
    key <CAPS> { [ Escape ] };
};

この部分を、以下のように書き換えます。

partial hidden modifier_keys
xkb_symbols "escape" {
    key <CAPS> { [ Escape, Escape ] };
};

(この書き方でいいのか自信ないですが、とりあえず期待通りに動くようになります。)

設定を反映させる

設定を反映させるために、以下を実行し、PCを再起動してください。

$ sudo rm -rf /var/lib/xkb/*

確認

$ setxkbmap -option caps:escape

ちゃんと、CapsLockを押した時、Escを押した動作をすると思います。

入力メソッドを切り替えても、設定が消えないようにする

これは、dconfに設定することでうまく行きました。以下のコマンドを実行してください。

$ dconf write /org/gnome/desktop/input-sources/xkb-options "['caps:escape']"

これは、dconf-editorgnome-tweak-toolを使っても編集ができます。

これで入力メソッドを切り替えても常にCapsLockがEscに割り当てられた状態にできました。

応用

CapsLockをEscに割り当てる以外のこともできるように、いろいろメモしておきます。

setxkbmap -option で設定できるオプションの一覧は、以下のファイルに書かれています。

/usr/share/X11/xkb/rules/base.lst

ここから、欲しいオプションを探して使います。

それでも、この一覧にないキーマッピングを設定したい場合があると思います。
そこで、setxkbmap -option で指定できる独自のオプションを作ります。

一覧に新しいオプションを追加

/usr/share/X11/xkb/rules/evdevのoption一覧の最後に、自分で作ったオプションuser:keymapを追加します。(baseに追加すると動かなかったのでevdevに追加します)

/usr/share/X11/xkb/rules/evdev
// 1040行目あたりから
! option    =>  symbols
   grp:shift_toggle  =   +group(shifts_toggle)
   altwin:menu       =   +altwin(menu)
   altwin:meta_alt   =   +altwin(meta_alt)
   altwin:alt_win    =   +altwin(alt_win)
   altwin:ctrl_win   =   +altwin(ctrl_win)
   ......
   user:keymap       =   +user(keymap)       // 追加

symbolに新しい設定ファイルを作る

新しく/usr/share/X11/xkb/symbols/userというファイルを作ります。
内容は、/usr/share/X11/xkb/symbols/以下にあるファイル(例えば、capslock、ctrl、jp、inetなど)を参考にして書いてください。

例:

/usr/share/X11/xkb/symbols/user
// 独自のキーマップ設定
partial hidden modifier_keys
xkb_symbols "keymap" {
    key <ESC>  { [ Zenkaku_Hankaku ] };     // Escを全角半角キーに変更
    key <HZTG> { [ Escape ] };              // 全角半角キーをEscに変更
    key <HENK> { [ Return ] };              // 変換をEnterに変更
    key <MUHE> { [ BackSpace ] };           // 無変換をバックスペースに変更
};

確認

$ sudo rm -rf /var/lib/xkb/*を実行して再起動した後、以下を実行。

$ setxkbmap -option user:keymap

ただしく設定が反映されていれば成功です。

$ setxkbmap -printを実行すると例えば以下のようになります。

xkb_keymap {
    xkb_keycodes  { include "evdev+aliases(qwerty)" };
    xkb_types     { include "complete"  };
    xkb_compat    { include "complete"  };
    xkb_symbols   { include "pc+jp+us:2+inet(evdev)+user(keymap)"   };
    xkb_geometry  { include "pc(pc105)" };
};

自分で作るときは、user、keymapの部分は好きなように変えてください。

参考

Xorg でのキーボード設定 - ArchWiki
ubuntu 14.04 unity desktopでCtrlとCapsLockを入れ替え後に、Shift+英数(CapsLock)をCtrlへ変更する
Ubuntu:無変換・変換キーをMeta・Hyperキー化してAutoKeyでカスタマイズ可能な修飾キーにする方法