상세 컨텐츠

본문 제목

리눅스에서 키보드 리매핑 - Part 2

Ubuntu&Linux

by Vulpes Vulpes.Noctis 2009.11.08 15:10

본문

예전에 작성한 리눅스에서 키보드 리매핑이 요 1년간 잘 작동했었는데 이번에 9.10으로 올라가면서 먹히지 않게 되었습니다. 제가 파악한 바로의 원인은 기존에 사용했던 .Xmodmap파일에서 사용했던 구문인
remove control   = Control_L
remove mod4      = Super_L
remove mod1      = Alt_L
을 하는 과정에서 Control_L, Super_L, Alt_L이 애시당초 하나 이상 잡혀 있는 경우라면 엉뚱한 녀석이 해제가 될 수도 있고, 이는 나중에 수정해서 추가할때 전체의 매핑이 어긋나는 결과를 초래한다는 것입니다. 고로, 좀 더 확실한 방법을 찾았습니다.

우선 터미널에서 xmodmap을 실행해서, 현재 기능 키에 뭐가 물려 있는지 알아냅니다.
shift       Shift_L (0x32),  Shift_R (0x3e)
lock        Caps_Lock (0x42)
control     Control_L (0x25)
mod1        Alt_L (0x40),  Hangul (0x6c),  Meta_L (0xcd)
mod2        Num_Lock (0x4d)
mod3     
mod4        Super_L (0x85),  Super_R (0x86),  Super_L (0xce),  Hyper_L (0xcf)
mod5        ISO_Level3_Shift (0x5c),  Mode_switch (0xcb)
왼쪽이 실제 기능, 오른쪽이 키네임, 그리고 괄호 안이 16진수로 표현된 키코드입니다. 제 경우, 변환을 원하는 키가 Control_L, Alt_L, Super_L이니까, 각각 control, mod1, mod4가 해당이 됩니다.

여기서 문제가 된 것이 mod4인데, Super_L이 2개가 있습니다. 다른 키의 경우도 이렇게 되어 있을 가능성이 있는데, 내가 원하는 키가 구체적으로 어느 쪽인지 알아내기 위해 xev로 원하는 키의 키코드를 찾아냅니다. 터미널에서 xev를 실행하면 그 순간부터 xev를 종료할때까지 모든 키보드와 마우스의 인풋이 터미널에 다음과 유사하게 출력되게 됩니다.
KeyPress event, serial 33, synthetic NO, window 0x3e00001,
    root 0x72, subw 0x0, time 2442612, (166,-12), root:(177,108),
    state 0x10, keycode 37 (keysym 0xffeb, Control_L), same_screen YES,
    XLookupString gives 0 bytes:
    XmbLookupString gives 0 bytes:
    XFilterEvent returns: False
여기서 필요한건 위에서 하얀색으로 표시한 부분입니다. 키코드 37에 Control_L이 물려 있는 상황이죠. 이런 식으로 원하는 키의 현재 배열을 알아냅니다.

자신의 홈 디렉토리 안에서 .Xmodmap 이란 이름을 가진 파일을 생성한 후에 (파일명 앞의 [.] 주의 - 이래야 일반 사용시 눈에 보이지 않습니다). 내용을 다음과 같이 작성해 줍니다.
! 키코드를 원하는 키네임이랑 매칭시킨다. 형식은 keycode # = 원하는 키 값.
keycode 37    = Super_L
keycode 133    = Alt_L
keycode 64    = Control_L

! 해당 기능에 사용되고 있는 키를 완전히 해제시킨다
clear control
clear mod4
clear mod1

! 바꿔치기 한 키를 다시 추가한다
add control   = Control_L
add mod4      = Super_L
add mod1      = Alt_L
기존에 사용한 remove가 어째선지 제대로 듣질 않아서 아예 확실한 clear을 사용했습니다. 그리고 맨 처음에 아예 키코드에 강제로 키네임을 배겅했기에 기존처럼 remove 한 후 배열을 바꾸는 과정이 삭제되었습니다.

이렇게 바꾸고 나니 다시 정상적으로 작동을 하더군요. 뭔가 다른 키를 써보고 싶은 분들도 이 정보를 응용하면 쉽게 원하는 결과를 낼 수 있을겁니다.


관련글 더보기

댓글 영역