23
23

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

xkbで無変換にctrlを割り当てる

Posted at

僕はここ5年位、無変換にctrl、変換にenterを割り当てて開発をしています。(Mac)
ubuntuでどうやるのかわかっていなくて調べてできたので書いておきます。

2015年現在の新し目のubuntuでは、キーマップの変更はxkbを使うのが推奨されているようなので、それを使います。

~/.xkbディレクトリに以下のようにファイルを設置して

% tree
.
├── keycodes/
│   └── mykeycodes
├── keymap/
│   └── mykbd
└── symbols/
    └── myswap

ファイルの中身はこんな感じ

% cat keycodes/mykeycodes
xkb_keycodes "mycodes" {

    <NFER> =   102;             // Muhenkan
    <XFER> =   100;             // Henkan
};



% cat keymap/mykbd
xkb_keymap {
  xkb_keycodes  { include "evdev+aliases(qwerty)+mykeycodes(mycodes)" };
  xkb_types     { include "complete" };
  xkb_compat    { include "complete+japan" };
  xkb_symbols   { include "pc+jp(106)+myswap(swapkeys)" };
  xkb_geometry  { include "pc(jp106)" };
};

% cat symbols/myswap
partial modifier_keys
xkb_symbols "swapkeys" {
  replace key <LCTL>  { [ Caps_Lock ] };
  replace key <CAPS> { [ Control_L ] };

  replace key <NFER> { [ Control_L ] };
  modifier_map Control { <NFER> };

  replace key <XFER> { [ Return ] };

  replace key <AB11> { [ underscore ] };

};


重要そうなのは、ディフォルトのkeycodesにNFERとXFERが入っていないので、 keycodes/mykeycodes で、それを追加する。
102やら100やらのkeycodeは xevなどで調べる。多分日本語キーボードならほぼ同じ。

keymap/mykbd ではmykeycodesと後述のmyswapを読み込む

symboles/myswap で実際に置き換えるキーを指定する。

上の例では、

  • ctrlとcapsを入れ替え
  • 無変換をctrl
  • 変換を改行
  • 右下のBackslashをunderscoreへ

としている。

で、これらを起動時に読み込ませないといけないのだけど、.xinitrc.xsessionrc やらに起動スクリプトを書いてみたけど、
ディスプレイが見つからないなどのエラーで実行できなかったので、起動時に手動で実行するスクリプトにした。
一緒にSandSの設定も読み込む

SandSの設定は以下を参考に。
http://qiita.com/ychubachi@github/items/95830219f1bdf912280b
https://gist.github.com/xr0038/11311831

# xkb_startup.sh

test -f $HOME/.xkb/keymap/mykbd && xkbcomp -I$HOME/.xkb $HOME/.xkb/keymap/mykbd $DISPLAY 2> /dev/null

# sands

xmodmap -e 'keycode 255=space'
xmodmap -e 'keycode 65=Shift_L';
PID=`pidof xcape`
if [ -z ${PID} ]; then
  xcape -e '#65=space'
fi

このスクリプトを起動のたびにダブルクリックする。

本当は起動時に勝手に設定されて欲しくて、これわからないとスリープするたびにセッション切れてスクリプト実行し直さないといけないのでなんとかしたい。

23
23
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
23
23

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?