컨텐츠 바로가기

우분투: 한영, 한자키 추가. (ibus, 또는 xmodmap 사용)

http://nemonein.egloos.com/5222946

** 2015.02.03
이 글을 쓴 지 대략 1년쯤 되었는데, 그동안 우분투는 14.04, 즉 LTS 가 나왔고, 그 뒤 floor 님의 덕택에 ibus(ibus-hangul) 에도 새 기능이 추가되었다.
여러 가지 기능이 추가되었고, 이 기능에 대해선 다른 글에서 언급한 적이 있지만, 이 글에서 언급할 기능은 오른쪽 Alt 와 Ctrl 을 각각 한글/한자로 사용할 수 있게 해주는 선택사항이다. (그런데.. 아직 이 기능을 직접 써보질 않아서 되는지는 모르겠다. ㅎㅎㅎ)

floor 님의 3beol PPA 를 추가하고 최신으로 판올림한 뒤에, 한글 설정 - 고급을 보면 다음과 같은 선택사항이 있다.

여기에서 104 글쇠 글판.. 부분을 선택해주면, 아마도 아래와 같은 복잡한 설정없이도 잘 되지 않을까.. 생각한다.

(혹시 안되면..?? 아래 방법을 쓰면 되기는 된다.)


특히나 노트북등을 사용할 때, 우분투에서 한영, 한자 키를 인식하지 못하는 경우가 있다.
한국어 키보드 레이아웃이 선택되어 있는 경우에는 아마도 이런 문제는 발생하지 않으리라 생각한다.


하지만 한국어가 아닌 다른 레이아웃일 경우엔 이 문제가 발생한다. 예를 들면 아래와 같은 경우.


이 글에선 이 문제를 해결해보기로 한다.
비교적 간단한 방법을 통해서, 한영/한자키를 우분투에 할당해주는 방법을 알아볼 것이다. 간단한 방법이라는 것은, 그저 임시방편이라는 것이다. 따라서 복잡한 방법도 당연히 있다. (복잡한 방법은 현재 공부 중? ㅎㅎ)

위에서 잠깐 언급했지만, 이 방법의 문제점은 키보드 배치(Keyboard Layout)를 바꾸거나, 절전상태에서 돌아오거나 하면 원 상태로 돌아간다는 점이다.
이 문제까지 해결하려면 복잡한 방법을 써야 하는데, 그것에 대해선 다음 기회에.. (써볼 수 있으려나?)
원 상태로 돌아갔을 때도 간단하게 되돌릴 수 있게끔 하는 것이 이 글의 목적이기도 하다.

<기본>
우분투에서 특수키(Alt, Ctrl 등)의 지정 상황을 간단하게 알아볼 수 있는 프로그램으로는 xmodmap 이라는 것이 있다.
터미널에서 아무런 옵션없이 그냥 xmodmap 이라고 치면, 다음과 유사한 결과를 볼 수 있다.

shift Shift_L (0x32), Shift_R (0x3e)
lock Caps_Lock (0x42)
control Control_L (0x25), Control_R (0x69)
mod1 Alt_L (0x40), Alt_R (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)


중요한 것은 control 과 mod1(Alt) 이다.
위에서 Control_R, Alt_R 이라는 두 키가 보이는데, 저 키들은 사실 Hangul_Hanja 와 Hangul 키이다. 즉, 한영/한자키가 한영/한자로 인식되지 못하고 Control/Alt 로 인식되고 있기 때문에, 이를 바로 잡아줘야 하는 것이다.

이것을 위해서는 먼저 한영, 한자키의 키값을 정확히 알아내야 하고, 둘째, 이것을 추가 시켜줘야 하며, 세째, 한영, 한자키를 Control 과 Mod1(Alt) 로 인식되지 않게끔 설정해줘야 한다. (아래에도 설명했지만, 둘째와 세째를 바꿔서 실행해도 된다.)

<키 값 알아내기>
키 값을 알아내기 위해 xev 라는 프로그램을 터미널에서 실행한다.
실행하면 흰색의 조그마한 창이 나타나는데, 실행된 상태에서 '한영'키를 누른다.
그러면 터미널에 현재 눌린 키에 대한 정보가 나타난다.

KeyPress event, serial 40, synthetic NO, window 0x6200001,
root 0x2b7, subw 0x0, time 4051526, (427,-113), root:(427,345),
state 0x0, keycode 108 (keysym 0xffea, Alt_R), same_screen YES,
XLookupString gives 0 bytes:
XmbLookupString gives 0 bytes:
XFilterEvent returns: False

KeyRelease event, serial 40, synthetic NO, window 0x6200001,
root 0x2b7, subw 0x0, time 4051669, (427,-113), root:(427,345),
state 0x8, keycode 108 (keysym 0xffea, Alt_R), same_screen YES,
XLookupString gives 0 bytes:
XFilterEvent returns: False



위는 한영 키에 대한 결과이다. keycode 가 108(0x6c) 임을 알 수 있다.
같은 방법으로 한자키에 대한 키값을 알아내면 된다. 내 경우는 105(0x69) 였다.
(키 값은 시스템마다 달라질 수 있으리라..)

위에서 xmodmap 의 결과를 보면, 105(0x69)가 오른쪽 콘트롤(Control_R)에 할당되어 있었고 108(0x6c)이 오른쪽 Alt(Alt_R)로 할당되어 있다. 이것을 각각 Hangul_Hanja, 와 Hangul 로 바꿔줘야 한다.


<한영, 한자키 추가하기>
xmodmap 프로그램을 사용해서 두 키를 추가해주면 된다.
터미널에서 다음과 같이 실행해주면 된다.

xmodmap -e 'keycode 105 = Hangul_Hanja'
xmodmap -e 'keycode 108 = Hangul'

이렇게 바꿔준 뒤 다시 xmodmap 을 해보면,

control Control_L (0x25), Hangul_Hanja (0x69)
mod1 Alt_L (0x40), Hangul (0x6c), Meta_L (0xcd)


한글/한자가 추가는 되었지만, 여전히 control 과 alt 키 그룹에 속해 있음을 볼 수 있다.
사실 엄밀해 말해서, 한글/한자를 추가했다기 보다는 105, 108 값을 갖는 키의 명칭을 바꿨다고 해야 맞을 것이다.
어쨌든, 이 두 키를 각각 그룹에서 삭제해줘야 한다.

** 여기선 한영/한자키를 먼저 추가해주고 그 다음에 삭제했지만, Control_R, Alt_R 을 먼저 삭제해주고 한영/한자를 추가해줘도 된다. 이 방법은 아래 .Xmodmap 에서 사용했다. 어차피 추가/삭제를 해야하는 것이므로, 어떤 것을 먼저 해줘도 관계없겠다.


<한영, 한자키 Ctrl/Alt 그룹에서 삭제>

다음 명령을 수행한다.

xmodmap -e 'remove mod1 = Hangul'
xmodmap -e 'remove control = Hangul_Hanja'


이제 완성되었다. 결론적으로, 추가 2줄, 삭제 2줄, 총 4줄의 명령을 내려주면 한영/한자 키가 잘 작동하게 된다.




여기서 끝을 맺기엔 좀 아쉬운 감이 있지 않나? ㅎㅎ

위 방법엔 몇가지 문제점이 있다.
첫번째는 이미 언급했던, 영구적 반영이 안된다는 점이다. (재부팅했을 때나, 절전에서 돌아왔을 때나, 키보드 배치를 바꿨을 때는 원래 설정으로 되돌아간다.)
두번째, 그럴 때마다 매번 4줄의 명령어를 입력해야 하므로.. 귀찮다.
기타 등등..

하여, 조금이나마 간단하게 解決 해보기로 한다.

먼저, xmodmap 은 .Xmodmap 이라는 파일을 통해 시스템이 시작될 때 자동실행되게끔 해줄 수 있다. (이 파일은 반드시 대문자 X 로 시작해야 한다. 적어도 우분투 13.10 에선 .xmodmap 은 실행되지 않는다.)

.Xmodmap 을 만들고, 아래와 같이 내용을 입력한다.
.Xmodmap 은 xmodmap 을 터미널에서 실행할 때와는 조금 다른 형식을 가지고 있다.
설명서는 여기.

remove mod1 = Alt_R
remove control = Control_R

keycode 105 = Hangul_Hanja
keycode 108 = Hangul


xmodmap 을 직접 실행했을 때와는 사용하는 문법이 조금 다르다.
그리고, 위에선 순서도 바꿔놓았다. 한글 한자 키코드를 먼저 추가하고 그 뒤에 바로 삭제를 하면, .Xmodmap 이 수행되는 과정에서 제대로 인식을 하지 못하는 듯 하다. (remove mod1 = Hangul, remove control = Hangul_Hanja 가 수행되지 않는다.)
따라서, 먼저 Alt_R 과 Control_R 을 지워준 뒤에 한글, 한자를 추가해주는 방식을 사용했다.

이제, 시스템이 시작될 때, .Xmodmap 이 자동으로 실행되면서 한글, 한자키가 잘 인식이 될 것이다.

그럼 이제 끝??

한가지 더 남았다.
위에서 계속 얘기한 것처럼, 절전에서 돌아오거나 키보드 레이아웃이 바뀌면 저 설정은 초기화된다. 즉, 한영, 한자키는 또 다시 인식되지 않는다.
이럴 때, 수동으로 다시 명령을 내려줘야 한다. 두가지 방법이 있다.

<.Xmodmap 을 불러오는 방법>
터미널, 또는 Alt-F2 를 누르고 다음과 같이 실행한다.

xmodmap ~.Xmodmap


위 방법의 문제점은 명령어 자체가 좀 길다는 것이다.
이 문제는 Alias 를 줘서 해결할 수도 있다. (.bashrc 에 추가하면 된다.) 다만, Alias 는 Alt-F2 로 열리는 '명령실행' 창에서는 실행되지 않는다. 터미널에서만 실행가능하다.

Alt-F2 에서도 실행하게 하고 싶다면, 길게 저 명령을 다 치든가(한번 쳐놓으면 기록이 되므로 다음엔 조금 더 쉽게 실행할 수는 있다.)
또는, 다른 스크립트를 하나 만들어놓는 방법도 있다.

예를 들어, ~/bin 디렉토리에 xkor 라는 파일을 만들어놓고, 다음과 같은 내용을 입력한다.

#!/bin/bash

xmodmap -e 'keycode 105 = Hangul_Hanja'
xmodmap -e 'keycode 108 = Hangul'

xmodmap -e 'remove mod1 = Hangul'
xmodmap -e 'remove control = Hangul_Hanja'



위 파일은 터미널에서도, Alt-F2 창에서도 모두 실행가능하다.

대충 이 정도면, 한글 한자키 문제는 해결되리라.. 생각한다.
序頭에서 말했듯, 이 해결방법은 비교적 간단한 해법이다. 더 어렵고 복잡한 방법도 있을텐데, 그것은 아직 해보질 않아서~ ㅎㅎ


덧글|덧글 쓰기|신고