[해결] 키보드 리매핑 문제

[url=http://ubuntu.or.kr/viewtopic.php?p=7499#p7499:3fthkl1m]Dust님의 한/영 전환키 글타래[/url:3fthkl1m] 에 이으려다가 제가 하는건 조금 다른거 같아 새 글타래를 엽니다. 같이 묶여져야 한다고 판단되시면 합쳐 주시기 바랍니다.

에전에 오프 모임에서도 한번 말한적이 있습니다만… 전 원래 맥 유저 출신이라 컨트롤을 새끼손가락으로 쓰는것이 상당히 불편합니다. 그래서 될 수 있으면 컨트롤, 알트, 슈퍼 (윈도우) 키의 위치를 바꿔서 쓰고 싶은데… 윈도우즈에서는 KeyTweak이란 프로그램으로 바로 바꿔줄수 있는데, 리눅스에서는 스캔코드라는 것을 쉽게 적용시키기가 어렵네요. 일단 제가 하고 싶은건 이겁니다.

[b:3fthkl1m]왼쪽 Control 키를 Super_L 키로
왼쪽 Super 키를 Alt_L 키로
왼쪽 Alt 키를 Control_L 키로.[/b:3fthkl1m]

Xev에서 키코드를 보면 각각

[code:3fthkl1m]왼쪽 Control = 37, Control_L
왼쪽 Super = 115, Super_L
왼쪽 Alt = 64, Alt_L[/code:3fthkl1m]

CLI에서 showkey - s 로 받은 스캔코드는 다음과 같습니다 (On press - relese는 생략합니다).

[code:3fthkl1m]왼쪽 Control = 0x1d (29)
왼쪽 Super = 0xe0 0x5b (e05b)
왼쪽 Alt = 0x38 (56)[/code:3fthkl1m]

그럼 이런 상황에서 ~/.Xmodmap 을 뭐라고 생성해야 제가 원하는 효과가 나올까요? 이런 식의 가이드는 거의 대부분이 한/영키, 한자키 추가랑 caps lock를 control로 바꾸는거 뿐이라 감이 안잡히네요.

파폭에서 복사한답시고 자꾸 about:config 창을 여는거 그만하고 싶어요… ㅠ.ㅠ

.Xmodmap을 다음과 같이 작성했습니다.

[code:zmnyuz8x]keycode 37 = Super_L
keycode 64 = Control_L
keycode 115 = Alt_L[/code:zmnyuz8x]

그러니 xev에서는 분명 컨트롤 키를 눌렀을대 Super_L이, 슈퍼 키를 눌렀을때 Alt_L이, 그리고 알트 키를 눌렀을때 Control_L이라고 나옵니다만 [b:zmnyuz8x]실제로는 전혀 안 바뀌어져 있습니다[/b:zmnyuz8x]. 여기서 뭘 더 해야 하죠?

키보드 설정에 키배치 옵션 서는 불가능 한가요?
[attachment=0:f9lsx0ql]key.png[/attachment:f9lsx0ql]
키배치 옵션에서 안된다면.
어느정도 조절 후 gconf 설정에서 .키값 바꾸는 거로 편집 시도 할꺼 같습니다.
정! 꼭 해야 한다면 …

일단 해결봤습니다. 솔직히 아직까지 keycode를 사용해서 리매핑하는 방식은 잘 감이 안옵니다만… 일단 잡혀 있는 키를 바꿔치기 하는 것은 훨씬 이해하기 쉬운 방법으로 가능했습니다.

  1. 일단 터미널을 열고

[code:2w3twq7k]xmodmap[/code:2w3twq7k]
을 입력합니다. 그럼 현재 특수기능 키들이 어떻게 매칭되어 있는지 리스트가 나옵니다.

  1. 자신의 홈 디렉토리 안에서 .Xmodmap을 생성합니다. 그리고 다음과 같이 작성해 주면 됩니다.

[code:2w3twq7k]! 사용되고 있는 키를 해제시킨다
remove control = Control_L
remove mod4 = Super_L
remove mod1 = Alt_L

! 키를 바꿔치기해 준다.
! 형식은 keysym [원하는 키의 기능] [실제 키보드의 키]
keysym Control_L = Alt_L !알트 키를 컨트롤 키로 작동하게 한다
keysym Alt_L = Super_L ! 슈퍼 키를 알트 키로 작동하게 한다
keysym Super_L = Control_L ! 컨트롤 키를 슈퍼 키로 작동하게 한다

!바꿔치기 한 키를 다시 추가해 준다.
add control = Control_L
add mod4 = Super_L
add mod1 = Alt_L[/code:2w3twq7k]

  1. 재부팅 후, .Xmodmap을 로드하겠냐는 경고창이 나오면 그대로 로딩해 주면 된다.

  2. 적용되었는지를 보려면 터미널에서 xmodmap을 실행해 본다.

근데 일단 이렇게 해서 원하는 결과를 내기는 했는데 제가 뭔가 잘못하고 있는건지 100% 깔끔한 솔루션은 아닌듯 합니다. 현재 위와 같이 적용한 지금, xmodmap을 실행하면 다음과 같은 결과가 나오는데,

[code:2w3twq7k]xmodmap: up to 4 keys per modifier, (keycodes in parentheses):

shift Shift_L (0x32), Shift_R (0x3e)
lock Caps_Lock (0x42)
control Control_L (0x40), Control_R (0x6d), Control_L (0x7d)
mod1 Alt_L (0x73), Alt_R (0x71), Meta_L (0x9c), Alt_L (0x7f)
mod2 Num_Lock (0x4d)
mod3
mod4 Super_L (0x25), Hyper_L (0x80)
mod5 Mode_switch (0x5d), ISO_Level3_Shift (0x7c)[/code:2w3twq7k]

보시다시피 Control_L과 Alt_L이 2개씩 잡히고 있습니다. 그 줄의 맨 앞쪽의 것은 기본값이고 맨 뒤쪽의 것이 제가 새로 추가해 놓은건데… 왜 슈퍼는 이런 문제 없이 잘 들어갔는데 Control과 Alt만 이렇게 되는지는 잘 모르겠습니다. 아시는 분 계신가요?

암튼 드디어 3개 OS에서 거의 동일한 방식으로 키보드 쇼트컷을 쓸 수 있어 아주 만족중입니다. 근데 버릇이 무섭다고… 지금까지 우분투 써오면서 계속 여기선 키매핑을 바꾸기 전 주의하던 버릇이 남아 오히려 역으로 나도 모르게 바꾸기 전의 키들로 손이 가는군요 ㅋㅋ 뭐 좀 지나면 괜찮겠죠.