CapsLockをCtrlにするまとめ
どうもCapsLockなんて爆発すればいいと思うAlisueです。
通常のキーボードではAの横という非常に押しやす位置にCapsLockという全く使用しないキーが配置されています。 非常にもったいないのでこのキーをCtrlとして使用することが多いのですが、方法がたくさんあるため一度まとめておきます。 なお本記事はEmacsWiki: Moving The Ctrl Keyの焼き増しのようなものなのでより詳しく知りたい方は原文を参照してください。
Gnome の設定を使用する方法(マウスで設定可能)
デスクトップパソコンとして使用する場合はGUIにて設定することが可能です。 以下ではDebian Wheezy(Gnome3)にて行う方法を記載します。
システム設定 > キーボードを開く
タイピング欄下部にある「レイアウトの設定」を開く
レイアウト欄下部にある「オプション(O)...」を開く
Ctrl キーの位置をクリックし「Caps Lock を Ctrl として扱う」にチェックを入れる
実際の設定はdconfから確認することができ
org.gnome.libgnomekbd.keyboard
のoptions
という項目に['ctrl\tctrl:nocaps']
という値が追加されます。
したがって下記のようにターミナルで直接この値を指定することも可能です。
# CapsLockをCtrlに変更
% gsettings set org.gnome.libgnomekbd.keyboard options "['ctrl\tctrl:nocaps']"
# CapsLockとCtrlを入れ替える
% gsettings set org.gnome.libgnomekbd.keyboard options "['ctrl\tctrl:swapcaps']"
# CapsLockを元に戻す
% gsettings set org.gnome.libgnomekbd.keyboard options "[]"
X Window System の設定を使用する方法
先ほどの方法はGnomeなどを使用していないと使えませんが、この方法ならば原理的には X Window Systemを利用しているすべてのLinuxで使用可能です。
xkb を使用して変更する方法
xkbにはオプションがいくつかあり、その中でCapsLockをCtrlにするオプションやCapsLockとCtrlを入れ替えるオプションがあります。 これを起動時にしていしてやればCapsLockをCtrlにすることが可能です。
setxkbmap を使用してキーボードオプションを指定する方法
ターミナルにてsetxkbmap
を呼び出すことによりキーボードオプションを直接変更することが可能です。
以下例を参照してください。
# CapsLockをCtrlに変更
% setxkbmap -option ctrl:nocaps
# CapsLockとCtrlを入れ替える
% setxkbmap -option ctrl:swapcaps
# CapsLockを元に戻す
% setxkbmap -option
オプションの内容から推測するにGnomeレベルでの設定はこのキーボードオプションを変更しているようです。
ただしGnomeレベルでの設定と違いsetxkbmap
で設定を行った場合はログイン中しか変更が反映されません。
したがって上記コマンドの中から必要なものを~/.profile
や/etc/profile
に加え自動的に呼び出すようにしてください。
なおFedora 15の場合~/.Xkbmap
というファイルがあると自動的に内容をsetxkbmap
の引数として使用するようです。
したがってこのファイルを作成しオプションの部分のみ記載すれば良いことになります。
X configuration file (/etc/X11/xorg.conf
など)で指定する方法
XのオプションなのでXの設定ファイルにて指定することも可能です。
/etc/X11/xorg.conf
や/etc/X11/xorg.conf.d/10-capslock.conf
などXの設定ファイルに下記のように記載してください。
Section "InputDevice"
Driver "keyboard"
Option "XkbOptions" "ctrl:nocaps" # CapsLockをCtrlに変更
Option "XkbOptions" "ctrl:swapcaps" # CapsLockとCtrlを入れ替える
EndSection
なおもしこの設定がうまく行かない場合は下記の設定を試してみてください。 最近のXorgはこちらの設定方法を推奨しているようです。
Section "InputClass"
Identifier "Keyboard Setting"
MatchIsKeyboard "yes"
Option "XkbOptions" "ctrl:nocaps" # CapsLockをCtrlに変更
Option "XkbOptions" "ctrl:swapcaps" # CapsLockとCtrlを入れ替える
EndSection
xmodmap を使用して再割当てを行う方法
xmodmap
はXにおいてキーボードマッピングを修正するために用いるソフトウェアです。
したがって今回のケースのようにCapsLockをCtrlに変更する場合に使えます。
通常xmodmap
の設定ファイルは~/.xmodmap
という名前で保存し/.xsession
内から下記のように呼び出します。
xmodmap ~/.xmodmap
ただ~/.xsession
は通常存在していないので新規作成することになると思います。
この時実行権限を忘れずに与えてあげてください(% chmod +x ~/.xsession
)。
~/.xsession
ファイルの役割に関しては英語ですが
What is “.xsession” for?
の回答がわかりやすくまとまっていると思います。
上記のように~/.xsession
から~/.xmodmap
を呼び出すように記載後に~/.xmodmap
に下記のどちらかを記載してください。
!
! CapsLockをCtrlに変更
!
remove Lock = Caps_Lock
keysym Caps_Lock = Control_L
add Control = Control_L
!
! CapsLockとCtrlを入れ替える
!
remove Lock = Caps_Lock
remove Control = Control_L
keysym Caps_Lock = Control_L
keysym Control_L = Caps_Lock
add Lock = Caps_Lock
add Control = Control_L
Xの外でも設定する場合(サーバーやVirtual Consoleなど)
先ほどの方法はXの機能を用いて変更を行なっていたためXの外では変更が適用されません。 サーバーやVirtual ConsoleでもCapsLockは邪魔者でしか無いため僕はこのレベルでの設定を行なっています。
dumpkeys
とloadkeys
を使用した方法
おそらくどのOSでも使用出来るであろう一般的な方法です。
まずdumpkeys
コマンドを使用して現在のキーマップをファイルに吐き出します。
次にキーマップを修正し最後にloadkeys
で適用します。
なお下記で保存するキーマップファイルは/usr/share/keymaps
に保存するので存在しない場合は下記コマンドで作成してください。
% sudo mkdir -p /usr/share/keymaps
変更部分のみを追加で読み込ませるパターン
変更部分のみを追加で読み込ませるパターンです。まず下記コマンドを実行してキーマップファイルのひな形を作成してください。
% sudo dumpkeys | head -1 | sudo tee /usr/share/keymaps/Caps2Ctrl.map
次にお好きなエディタ(Vim等)で作成した雛形に下記を加えてください。
keycode 58 = Control # CapsLock act as Ctrl
# keycode 29 = Caps_Lock # Ctrl act as CapsLock
# alt_is_meta # Fix the Alt key"
最後にloadkeys
で変更を読み込ませます。
% sudo loadkeys /usr/share/keymaps/Caps2Ctrl.map
これでログイン中のみ一時的にキーマップを変更することができます。なお恒常的に変更したい場合は/etc/rc.local
等に上記コマンドを(sudoを取り除いて)記載してください。
完全にキーマップを置き換えるパターン
すべてのキーマップを新しいキーマップで置き換えるパターンです。通常前記した変更部分のみを置き換えるパターンで事足りると思いますが念の為。 まず下記コマンドを実行して現在の完全なキーマップのコピーを作成してください。
% sudo dumpkeys | sudo tee /usr/share/keymaps/Caps2Ctrl-Full.map
次に作成した完全なキーマップのコピー上の必要箇所を前記を参考に修正してください。
最後にloadkeys
で変更箇所を読みこませる部分は同様です。
この完全に置き換える方法はsed
と組み合わせると非常に便利です。下記のようにワンライナーで置き換えることが可能になります。
ただCapsLockに割り当てられているものがCapsLockではなくCtrlL_Lockの場合があるためまず下記コマンドを実行してどちらが割り当てられているのかを確認してください。
% sudo dumpkeys | egrep "keycode\s*58"
次に下記コマンドを実行して実際の書き換えを行なってください。なおCtrlL_Lockが割り当てられていた場合はCaps_Lockの部分をCtrlL_Lockと読み替えて実行してください。
% sudo dumpkeys | sed 's/58\s*=\s*Caps_Lock/58 = Control/' | sudo loadkeys
# CtrlをCapsLockとして使用したい場合は下記コマンドも実行
% sudo dumpkeys | sed 's/29\s*=\s*Control/29 = Caps_Lock/' | sudo loadkeys
これでログイン中のみ一時的にキーマップを変更することができます。なお恒常的に変更したい場合は/etc/rc.local
等に上記コマンドを(sudoを取り除いて)記載してください。
console-setup
を利用した方法
比較的新しいDebianでは/etc/default/keyboard
というファイルが存在しておりXKBOPTIONS
を書き換えることでCapsLockをCtrlに変更することができます。
名前がXなのが気になりますが……。/etc/default/keyboard
をエディタで開き下記のように修正してください。
# XKBOPTIONS=""
XKBOPTIONS="ctrl:nocaps" # CapsLock --> Ctrl
# XKBOPTIONS="ctrl:swapcaps" # CapsLock <-> Ctrl
修正後に下記コマンドを実行して変更を適用してください。
% sudo dpkg-reconfigure -phigh console-setup
console-tools
を利用した方法
古いDebian系OSでは/etc/console-tools/remap
というファイルが存在しており自動的にdumpkeys
とloadkeys
の間に呼び出されるsed
スクリプトとして実行されます。
したがって先程dumpkeys
, sed
, loadkeys
を利用したワンライナーと同様に置き換えを行なってください(下記参照)。
# This turns caps lock into control
s/58\s*=\s*Caps_Lock/58 = Control/;
# CtrlをCapsLockとして使用したい場合は下記コマンドも実行
s/29\s*=\s*Control/29 = Caps_Lock/;
修正後に下記コマンドを実行して変更を適用してください。
% sudo invoke-rc.d console-screen.sh restart