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

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

More than 5 years have passed since last update.

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でカスタマイズ可能な修飾キーにする方法

oyas
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