왜 하게 되었나

노트북 에서 Caps Lock키를 거의 쓰지 않는 나로써는, 그 위치에 걸리적거리는 Caps Lock대신 Ctrl키가 있다면 정말 편하겠다는 생각을 했다. (실제로 Sun 키보드는 Caps Lock 위치에 Ctrl이 위치하기도 한다.) 특히나 Emacs나 bash의 readline을 많이 쓰는 경우에는 Ctrl과 다른 키를 함께 누르는 경우가 많기 때문에 Ctrl키가 누르기 쉬우면 정말 편하다. XFree86에서는 xmodmap으로 키 값을 쉽게 바꿀 수 있지만, Windows에서는 이를 어떻게 해야하는지 몰라서 Google에서 한참을 헤메다가 그 방법을 알아내어 지금은 아주 편하게 Caps Lock을 Ctrl로 쓰고 있다.

어떻게 했나

여러 곳을 헤메다가 Microsoft KB에서 관련 자료를 발견할 수 있었다. regedit.exe 같은 프로그램으로 Windows 레지스트리의

HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Control\\Keyboard Layout

키에 Scancode Map 이진 값을 만들고, 여기에 다음과 같은 값을 주면 된다.

00000000 00000000 0200000000 1D003A00 00000000

여기서 각 값이 의미하는 것은 다음과 같다.

|| || || ||0x00000000 ||헤더: 버젼. 모두 0으로 둔다. || ||0x00000000 ||헤더: 플래그. 모두 0으로 둔다. || ||0x00000002 ||개수를 나타내는 것(마지막의 빈 값까지 포함해서). || ||0x003A001D ||CAPS LOCK 키 --> 왼쪽 CTRL 키 (0x3A --> 0x1D). || ||0x00000000 ||마감해주는 빈 값. ||

중요한 것은 레지스트리에 들어가는 이진 값은 모두 little-endian 형식이라는 것이다. 따라서 우리가 보통 쓰는 순서와 반대로 입력을 해야한다는데에 주의하자.

여기서 0x1D 같은 것은 Windows에서의 스캔 코드인데 스캔 코드에 관한 자세한 것은 Key Support, Keyboard Scan Codes, and Windows를 참고하면 된다. 또는 keyview.exe를 이용해서 쉽게 알아낼 수도 있다. 여기서는 Caps Lock을 Ctrl로 바꾸기만 했는데, 원한다면 얼마든지 다른 키들도 필요에 맞게 바꿀 수 있다. 심지어는 볼륨키나 절전키 같은 것까지 마음대로 특정 키에 할당해서 쓸 수도 있다. :)

레지스트리를 편집하기 귀찮은 사람은 아래의 레지스트리 파일을 받아 등록시켜준 후에 재부팅해서 쓰기 바란다.

참고 자료


sab hacking