CapsLockを左Shiftキーにする 備忘録 (Linux / Windows)

CapsLockを左Shiftキーにする

キーボードで要らないキーといえば、CapsLockとNumLock, Scroll Lock, Pauseキーです。この内、Scroll LockとPauseキーは僻地にあるので押し間違えることがありませんが、CapsLockはまぁまぁ良い位置にあって、よく使う左Shiftキーと押し間違えやすいです。
ブラインドタッチのできる人でもキー入力が多いと押し間違えてイラッとしたことがあることでしょう。
NumLockもテンキーの 7 や / を入力するときに間違えて押してしまってその後でイラッっとしますが今回は置いておきます。

このCapsLockをEscapeキーやControlキーと入れ替えるというのは結構多いかと思いますが、「がとらぼ」の中の人はCtrlは左下の方が好きだし、Escはvimエディタで多用していて既に指が左上遠くで慣れてしまっているのでキーを入れ替えるのは好きではありません。

そこで、キーを入れ替えるのではなく、CapsLock機能を廃止して左ShiftをCapsLockキーに割り当てます。つまり左Shiftキーが2個になります。「え〜?」と思われるかもしれませんが、これが意外と具合が良いのです。

Linuxの場合

Linuxではxmodmapが最初から入っていることが多いかと思われますのでそれを使います。最近のLinuxではxmodmap非推奨という話がありますが2023年現在も問題なく使用できます。インプットメソッドフレームワークのFcitxで日本語入力する際にキーの割当によっては不具合があるという噂ですが、今回の変更では影響ないでしょう。

以下、面倒なのでズバリだけ。

CapsLockはキーコード66番なのでそれに左シフト「Shift_L」を割り当てます。

ユーザー自身に対して適用するので管理者にならないで(sudoも使いません)、以下のコマンドを実行。
$ xmodmap -e "keycode 66 = Shift_L"

これで、普通に英数字を入力し、シフトを押しながら入力し、最後にCapsLockを押しながら入力してみます。CapsLockを押しながら入力した文字がシフトを押しながらと同じなら成功です。

これで、コマンドを実行したときはCapsLockが左シフトキーと同じ動作になりましたが、ユーザーとしてログインしたときに自動的にこの状態にするためには以下を行います。

ユーザーのホームディレクトリに、以下の2つのファイルを作成します。 xmodmapの設定ファイル
.Xmodmap (追記、または無ければ新規作成 内容は1行)
keycode 66 = Shift_L
ユーザーがログインしたときにxmodmapが実行されるよう.xinirtcに記述。
.xinitrc (追記、または無ければ新規作成 内容は1行)
xmodmap ~/.Xmodmap

~ はUnix系OSではユーザーディレクトリを意味します。つまり、ユーザーがfoobarさんなら/home/foobar (または/usr/home/foobarなど)のことです。ファイル名の先頭が.(ピリオド)は非表示ファイルになります。 非表示ファイルは例えば ls -l ~ だと表示されませんが、ls -al ~ だと表示されます。

システムを再起動するなり再ログインするなりして以後の入力でCapsLockが左シフトキーを同じ動作になれば成功です。

Windowsの場合

幾つかの方法がありますが、一番簡単なのはレジストリ(ファイル)を使うのだと思われます。
レジストリエディタは、操作に慣れていない方にとっては操作が解りにくく間違いやすいですが、レジストリファイルであればファイルをダブルクリックするだけです。(確認を求められるので承認します)。

書き換えるキーのスキャンコードですが、先程LinuxではCapsLockは66番と書きましたが、Windowsのスキャンコードはそれとは異なり、CapsLockは30番(16進数で0x003A)です。ちなみに左Shiftは44番(16進数で0x002A)、右Shiftは57番(16進数で0x0036)、CapsLockと入れ替える人が多い左Ctrlは58番(16進数で0x001D)です。

設定するレジストリは HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout です。
ここに、Scancode Mapという名前の値(バイナリ値)を作成します。(キーを作成するのではありません)
最初は00,00,00,00,00,00,00,00の固定で良いようです。
マッピング数は今回は1つ書き換えるだけなので1ですが、終端のNULLを数に加えるということなので書き換え数+1の今回は2です。値は02,00,00,00です。
何に書き換えるかを値を先に書きます。今回は左Shiftの0x002Aなので、2A,00です。
次に何を書き換えるかを書きます。今回はCapsLockの0x003Aなので3A,00です。
他にも書き換える場合はここに追加します。今回は1つしか書き換えないのでありません。
最後にNULLを付けます。00,00,00,00です。

つまり、値は 00,00,00,00,00,00,00,00,02,00,00,00,2A,00,3A,00,00,00,00,00 になります。
 CapsLock_to_Shift_Left.reg CapsLockを左Shiftキーにするレジストリ
1
2
3
4
Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout]
"Scancode Map"=hex:00,00,00,00,00,00,00,00,02,00,00,00,2a,00,3a,00,00,00,00,00
 Retrieve_CapsLock.reg CapsLock機能を取り戻すレジストリ(キーカスタムを削除します)
1
2
3
4
Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout]
"Scancode Map"=-

上のCapsLock_to_Shift_Left.regは、CapsLockを左Shiftにするレジストリです。
Retrieve_CapsLock.regは、CapsLockキーに戻す(Scancode Mapの値を削除してキーマップのカスタムを初期状態にする)レジストリです。リンクをクリックしてダウンロードしてください。ダウンロードしたレジストリファイルをダブルクリックで適用できます。レジストリによっては適用後即時反映されるものがありますが、このキーマップのカスタムは即時反映ではなくシステムの再起動が必要なようです。

ご注意
上の2つのレジストリは既にScancode Map値が存在する場合(何らかのキーのカスタム設定を行っている場合)、それらの既存の設定を無視して上書きまたは削除します。既存の設定がある場合は迂闊に実行しないでください。
セキュリティツールによってはレジストリファイルをダウンロードしようとすると警告が出る或いはダウンロードを止められる可能性があります。
レジストリファイルはダブルクリックするだけで適用できますが、先にメモ帳やテキストエディタで開いて中味を確認してください。明らかに不適切な内容であったり全く意味不明であればダブルクリックして適用するべきではありません。

CapsLockを左Shiftにすることで発生する日本語変換への影響

LinuxのFcitxやWindows IMEではCapsLockが英数字変換モードへの切り替えに割り当てられています。CapsLockが単なる左Shiftキーに割り当てられたことで、英数字変換モードへの切り替えができなくなります。英数字変換モードへの切り替えキーを何かのキーに割り当て直してください。FcitxやWindows IMEの設定で行えます。もっとも、半角の英数字を入力してからその部分を選択状態にして「かな/カナ」を押して「変換」で用は足りるので割り当て直すまでもありませんが。