Ubuntu 10.10 で CapsLock を Ctrl にする

2010/12/22 (水)

‘A’の左隣が Ctrl でないと使いにくいのは衆目の一致するところ。
なので、このキーマップを何とかしたい。

CapsLockとCtrlを入れ替えてもいいけど、
CapsLockなんて使わないから、Ctrlに変更してしまうのが好み。

こんなのは、xorg.confの

Section “InputDevice”

Option "XkbOtopns" "ctrl:nocaps"

とか、

Option "XkbOtopns" "ctrl:swapcaps"

と書いときゃいいだろと思ってたんだけど、やってみると効かない。
なんで?

調べてみた。

Ubuntu 8.10のX.orgはctrl:swapcapsが効かない
http://raising-heart.blogspot.com/2008/11/ubuntu-810xorgctrlswapcaps.html
によると、キーボードドライバとして(kbdではなく)、
evdevというのが使われてることが原因らしい。

/var/log/Xorg.0.log を見ると、確かに、evdevで上書きしている。

というわけで、上記サイトに習って、下記内容で
/etc/X11/Xsession.d/10setxkbmap を作ってみた。

#!/bin/sh
setxkbmap -option ctrl:nocaps

これで確かに、憎きCapsLockがCtrlに替わる。

しかしながら、これって、Xsessionが始まるとき、つまり、ログインする際に走るスクリプト。
ログイン前ではキーマップの変更はされないということ。

これは今ひとつおもしろくない。

gdmの画面では有効ではないってことだから。

ログイン前のgdmの画面のときに、キャラクタコンソールに行こうと思って、
Ctrl+Alt+F1 を押したときにハマってしまう。

ということで、Ubuntu日本語フォーラムで教えたもらった。
https://forums.ubuntulinux.jp/viewtopic.php?id=10224
それによれば、/etc/gdm/Init/Default にしかるべきことを書いておけばいいらしい。

ありがとうございます。結果から言うと上手くいきました。

/etc/gdm/Init/Default を見たところ、
/etc/X11/Xmodmap を読み込んでくれそうな雰囲気があったので、
このファイルに

remove Lock = Caps_Lock
keysym Caps_Lock = Control_L
add Control = Caps_Lock

と記述してみたのですが、これはうまくいきませんでした。

しょうがないので、

/etc/gdm/Init/Default の一番最後、

exit 0

の直前に、

setxkbmap -option ctrl:nocaps

と書いてやったら期待通りの動作になりました。

また、この設定は、ログイン後も引き継いでくれるようです。

# ちなみに、exit 0 の直前に、
# xmodmap /etc/X11/Xmodemap
# と直書きしてみましたが、期待したキーマップにはなりませんでした。
# ログイン後に、このコマンドを実行すればキーマップは変更されるので、
# 記述内容は間違ってはいないと思います。

直書きで今ひとつスマートではありませんが、とりあえずは、期待した動作が得られました。
ありがとうございます。

これでなんとかめでたし、めでたし、である。

ついでに、コンソールでも設定を変更した