June 26, 2018

AntergosでCapsLockキーをCtrlキー化

PCに新しいOSを入れたら、何はともあれ、CapsLockキーをCtrlキー化したい。Linuxの場合、/etc/X11/xorg.conf.d/10-capslock.confというファイルを作り、以下のように書けばいい。

Section "InputClass"
  Identifier "Keyboard Setting"
  MatchIsKeyboard "on"
  Option "XkbOptions" "ctrl:nocaps"
EndSection

そのはずだったが、Antergosでは効かなかった。

KillX

原因は、あとからロードされる99-killX.conf(Antergosのインストーラが作るファイル)。

Section "ServerFlags"
   Option "DontZap" "false"
EndSection
Section "InputClass"
   Identifier      "Keyboard Defaults"
   MatchIsKeyboard   "yes"
   Option         "XkbOptions" "terminate:ctrl_alt_bksp"
EndSection

これは、Ctrl+Alt+BackspaceキーによりXを殺せるようにするための設定。最後のXkbOptionsが私のctrl:nocapsを上書いてしまうのだ。マージしてくれないんだぁ……。へぇ〜。

というわけで、99の方を編集するなり、10のファイル名を変える(数字で始める必要は無い)なりすれば、回避できる。しかし上書いてしまうということは、この仕組みに乗っている限り、キーボードに対するXkbOptionsは1箇所にしか書けないということだ。これは何か間違っている気がする。

setxkbmap

幸い、別の手段もある。setxkbmapコマンドだ。

$ setxkbmap -option "ctrl:nocaps"

こっちはマージしてくれるので、99-killX.confが設定したterminate:ctrl_alt_bkspも生きたままだ。ただし、この設定はログアウトすると消えてしまうので、~/.xprofileに書いておく必要がある。

~/.xprofile
if [ -f ~/.xprofile.org ]; then
   source ~/.xprofile.org
fi

export PATH=~/bin:~/local/bin:$PATH
export VTE_CJK_WIDTH=1

xset -b

setxkbmap -model jp106 -layout jp -option "ctrl:nocaps"     # ←これ

export GTK_IM_MODULE=fcitx
export QT_IM_MODULE=fcitx
export XMODIFIERS="@im=fcitx"

export LC_MESSAGES=en_US.utf8
export LC_CTYPE=ja_JP.utf8

xkbのオプションに設定できる項目は、ctrlterminate以外にも沢山あって、/usr/share/X11/xkb/rules/base.lstで確認することができる。

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

複数のオプションを設定したいなら、

$ setxkbmap -option "ctrl:nocaps" -option "grp:switch" \
  -option "compose:ralt" -option "terminate:ctrl_alt_bksp"

って感じでオーケイ。

一旦すべてのオプションをクリアしたいときは、-optionに空値をセットすればいい。

$ setxkbmap -option -option "ctrl:nocaps" -option "grp:switch" \
  -option "compose:ralt" -option "terminate:ctrl_alt_bksp"
Tags: antergos