다음 이전 차례

15. loadkeys와 xmodmap의 사용예

키보드상의 Caps Lock과 Ctrl 키를 바꾸려면 아래와 같이 하면 된다. (keymaps 0-15를 사용한다고 가정했다. dumpkeys | head -1로 확인해볼 수 있다.)

        % loadkeys
        keymaps 0-15
        keycode 58 = Control
        keycode 29 = Caps_Lock
        %
X 환경에서만 이것들을 바꾸려면 다음과 같이 하면 된다.
        % xmodmap .xmodmaprc
여기서 .xmodmaprc에는 아래와 같은 내용이 들어있어야 한다.
        remove Lock = Caps_Lock
        remove Control = Control_L
        keysym Control_L = Caps_Lock
        keysym Caps_Lock = Control_L
        add Lock = Caps_Lock
        add Control = Control_L
도데체 여기에 있는 키 번호란 것이 무엇일까? Backspace는 리눅스에서는 14이고 X에서는 22라니? 뭐 별거 아니고 임의로 붙였다고 보면 된다. 리눅스에서 사용되는 키 번호를 보고 싶으면 showkey(1)를 사용하면 되고, X에서는 비슷한 것으로 xev(1)를 사용하면 된다. 종종 X에서 사용하는 번호는 리눅스에서 사용하는 번호에 8을 더하면 된다.

사람들이 종종 바꾸기 좋아하는 것이 기능키이다. F12를 누르면 "emacs "라는 문자열이 생기도록 하려면 아래와 같이 하면 된다.

        % loadkeys
        keycode 88 = F12
        string F12 = "emacs "
        %
좀 더 직접적인 방법으로는 다음과 같은 것이 있다. (i) showkey(1)를 사용하여 바꾸고자 하는 키의 키코드를 알아낸다. (ii) 현재 keymap을 저장하고 복사본을 만들어 다음과 같이 편집한다.
        % dumpkeys > my_keymap
        % cp my_keymap trial_keymap
        % emacs trial_keymap
        % loadkeys trial_keymap
        %
테이블 형식은 dumpkeys의 출력을 보면 충분히 추측할 수 있고 keytables(5)에 잘 문서화되어 있다. 새로운 keymap 기능을 원한다면 /etc/rc.local에 아래의 내용을 넣어 호출하여 부팅시에 자동적으로 실행되게 하면 된다.
        loadkeys my_new_keymap
변경키를 바꾸게 되면 혼란스러워짐을 유의하라. 대개 초심자들이 잘 빠지는 함정은 숙련자가 되어야만 빠져나오는 방법을 알게 된다.

keymaps에 대한 디폴트 디렉토리는 /usr/lib/kbd/keytables이다. keymaps에 대한 디폴트 확장자는 .map이다. 따라서 loadkeys uk라고 하면 아마도 /usr/lib/kbd/keytables/uk.map를 로드하게 될 것이다.

(내가 쓰는 머신에서는) /dev/console/dev/tty0에 심볼릭 링크되어 있다. 그리고 커널은 /dev/tty0를 현재 VT와 같은 것으로 간주한다. XFree86 1.3은 /dev/tty0의 소유자를 바꾸지만 종료한 후에 이것을 재설정하지는 않는다. 따라서 loadkeys 또는 dumpkeys는 말을 안들을 수도 있다. 왜냐하면 다른 사용자가 /dev/tty0소유하고 있을 수 있기 때문이다. 이런 경우 X를 먼저 실행시켜 보라. 콘솔에서가 아니면 (그리고 수퍼유저가 아니면) 키보드 매핑은 바꿀 수 없음을 유의하자.

15.1 `오직 한 손가락으로만 타이핑할 수 없을 때'

"Shift, Ctrl, Alt 키를 토글 형식으로 만들 수 있을까?"

할 수 있다. 아래와 같이 명령을 내리자.

        % loadkeys
        keymaps 0-15
        keycode 29 = Control_Lock
        keycode 42 = Shift_Lock
        keycode 56 = Alt_Lock
        %
이렇게 하고 나면 왼쪽 Control, Shift, Alt 키가 토글 형식으로 반응할 것이다. 여기에 사용되는 번호는 showkey를 사용하면 볼 수 있다. (보통 29, 97, 42, 54, 56, 100이 각각 왼쪽, 오른쪽 control, shift alt 키에 해당한다.) 또한 각각의 기능은 Control_Lock, Shift_Lock, Alt_Lock, ALtGr_Lock이다.

"`sticky' 변경키는 가능한가?"

커널 버전 1.3.33 이후에는 `sticky' 변경키를 인식한다. `sticky' 변경키는 다음에 눌려진 키에 작용하는 것을 말한다. 예를 들어, 대문자 `A'를 치기 위해 3심볼 시퀀스 Shift_Lock a Shift_Lock을 쳐야 하는 곳에서 이 키를 쓰면 2심볼 시퀀스 SShift_Lock a만으로 해결된다. kbd 패키지 0.93보다 낮은 버전에는 아직 이러한 sticky 변경에 대한 코드가 포함되어 있지 않다. 따라서 이 키의 16진수 코드를 호출해야만 사용할 수 있다.

        % loadkeys
        keymaps 0-15
        keycode 54 = 0x0c00
        keycode 97 = 0x0c02
        keycode 100 = 0x0c03
        %
이렇게 하면 오른쪽 Shift, Ctrl, Alt 키가 해당 왼쪽 키들의 sticky 형식으로 반응할 것이다. >0.93부터는 아래와 같은 명령으로 같은 효과를 낼 수 있다.
        % loadkeys
        keymaps 0-15
        keycode 54 = SShift
        keycode 97 = SCtrl
        keycode 100 = SAlt
        %
이렇게 하면 Ctrl-Alt-Del을 한 손으로 입력할 수 있게 된다.

이 예에서 keymaps 줄은 사용자가 사용하고 있는 모든 keymaps을 적어야 한다. 사용하고 있는 keymaps을 확이하려면 아래와 같이 명령을 내리면 된다.

        % dumpkeys | head -1


다음 이전 차례