코어리눅스 홈페이지에서 이여송님의 글을 펌….. 입니다. ^^;;

———————————————-

일반적인 키보드 즉 쉬프트 + 스페이스키 에 의한 한영 전환이 아니고 자
판에 있는 한영키에 의한 변화를 말하는 것입니다.

103키보드나 106키보드는 밑에 소개한 대로 하시면 거의 대부분
될 것입니다. 그러나 특수 자판기를 가지고 계시거나 노트북을 사용하시
는 분은 밑에 더 자세히 나와있는 설명을 보시면 거의 대부분 되실 것입니
다. 간단한 팁만을 소개한 것이 아니라
전체에 대한 이해가 되실 수도 있을것입니다.

일반적인 키보드(103키 106키)

: /etc/X11/Xmodmap
: 라는 파일이 있습니다..
:
: 여기에…
:
: keycode 115=Super_L
: keycode 117=Menu
: keycode 121=Hangul_Hanja
: keycode 122=Hangul

위와 같이 하시면 되시고
즉시 반영은
xmodmap /etc/X11/Xmodmap
하시면 됩니다.

노트북 사용자나 특수 키보드를 가지고 계신분은 아래를 참조

* 어떤 과정을 거치는지 간략한 소개

$ : xev(이벤트 테스터 플그램)를 통해 자기가 사용하고자 하는
키코드(keycode)값을 알아낸다.
$ : xmodmap을 실행시켜 keycode값과 key system name을 연결한다.
$ : xev를 계속 실행시키면서 오류는 없는지, 키값과 키이름이 잘 연결 됐
는지 확인한다.
$ : /etc/X11/Xmodmap파일이나 ~/.Xmodmap파일에 변경사항을 적는다.
$ : X를 다시띄운다.
$ : 자신이 사용하는 윈도우매니져에서 원하는 키를 키바인딩한다.

# 노트북사용자가 알아야할 일반적인 사항 (아닌 분들은 통과)
# 노트북에서는 키 개수를 줄이는 과정에서 특별한 경우를 갖습니다.
# 한/영키가 실제로는 “오른쪽 알트(Alt_R)”키와 같습니다.
# 한자키 역시 실제로는 “오른쪽 컨트롤(Ctrl_R)”키와 같습니다.
# 기타 인터넷키나 다른 키는 언급하지 않았습니다.

* 그럼 이제부터 같이..

// ====================================================
// * xev와 xmodmap의 사용
// ====================================================
우선 터미널을 하나 띄우셔서
xev를 실행시킵니다.
터미널창과 윈도우창이 하나씩 뜹니다.
터미널창 위에 윈도우창을 위에 놓고 서…..

$ xev 그러면 이상한 창이 하나 뜨죠?
창제목에는 “Event Tester”라는 글씨가 씌여있구요.
마우스를 움직일 때마다 터미널에는 분주히 이상한 숫자들이
오가구요

Event란 말은 프로그래밍을 하시는 분이라면 쉽게 눈치채셨겠죠?
자세히 보시면 마우스의 움직임을 감지함을 알 수 있습니다.
이번엔 “a”를 누릅니다. 다시 뗍니다.
그러면 두번의 이벤트가 감지됨을 알 수 있습니다
자세히는 알 수 없지만 키 한 개의 신호를 받기 위해서는
눌렀다가(한 번) 떼내는(또 한 번)과정이 필요한 것 같습니다.

그러면 문제의 한영키나 한자키를 눌러볼까요?
그러면 분명 뭔가 이벤트는 일어나는 듯 싶지만
“a”를 눌렀을 때와 다른 점이 있습니다.
state 0x0, keycode 122 (keysym 0x0, NoSymbol), same_screen

한영키를 눌렀지만 NoSymbol이라는 문구가 보이시죠?
즉… 기계적으로는 그 키값(122)가 있지만 현재 리눅스박스에서
그걸 인식할 이름이 없는 것입니다. 있으나마나한 키가 되는 것이죠.
이 문제는 특히 “아미”입력기에서 나타나죠.
윈도우에 익숙하신분들이 가장 애를 먹는게 아마 한/영키를 이용한
한영 전환이 안되는 것이죠.
다음을 실행해 봅니다.

$ xmodmap -e “keycode 122 = Hangul”
$

그런 다음 다시 xev로 돌아가서 한/영키를 다시 누릅니다.
아미에서도 적용되는지 확인해 봅니다.(한텀은 보장못합니다.)

제대로 연결이 된 것이 확인이 되셨으면 다른 키도 비슷한 방식을
따릅니다.

단 주의하실것이 “Hangul”과 같이 키이름을 사용하실려면
이미 예약 되어있는 이름을 사용하셔야 합니다.
만일 다음과 같은 경우
$ xmodmap -e “keycode 115 = windog”
xmodmap: commandline:0: bad keysym name ‘Windog’ in keysym list
xmodmap: 1 error encountered, aborting.
$

위와 같이 에러를 나타냅니다.

대개 많은 시스템에서…

윈도우키 —> Hyper_L Hyper_R
메뉴키 —> Menu 혹은 Super_R

등으로 사용합니다. 절대, 절대적인 것이 아니므로 컴퓨터가 인식하는
이름이면 언제든지, 무엇이든지 사용가능합니다.

여하튼 위와 같이 xmodmap과 xev로 keycode와 keysystem name을
연결시켜가면서 제대로 연결이 되고 있는지 확인합니다.

// ====================================================
// * X설정 파일(Xmodmap)파일에 저장.
// ====================================================

이제 변경된 사항을 X가 뜰 때마다 적용하도록 합니다.
/etc/X11/Xmodmap에 써서 전체적설정(global setting)을 하셔도 되고
~/.Xmodmap을 만들어서 지역설정을 하셔도 좋습니다.

후자의 경우를 중심으로 설명하겠습니다.
xmodmap을 실행했던 파일을 닫습니다.
다시 터미널을 띄웁니다.(히스토리를 이용하기 위해서)
$ grep xmodmap ~/.bash_history | grep keycode
xmodmap -e “keycode 122 = Hangul”
xmodmap -e “keycode 121 = Hangul_Hanja”
xmodmap -e “keycode 115 = Windog”
xmodmap -e “keycode 115 = Hyper_L”
xmodmap -e “keycode 116 = Hyper_R”
xmodmap -e “keycode 117 = Menu”
$ !! | sed -e “s/(xmodmap -e.”) *(.*) *”/2/g”
keycode 122 = Hangul
keycode 121 = Hangul_Hanja
keycode 115 = Windog
keycode 115 = Hyper_L
keycode 116 = Hyper_R
keycode 117 = Menu
$ !! > ~/.Xmodmap # 설정 내용을 저장합니다.

이렇게 하신다음에 .Xmodmap파일을 열어서 중복된 부분을 빼거나
잘못된 부분을 고치시면 됩니다.
정규식표현이 어려우시면 직접 위와 같은 형태로 편집하셔도 됩니다.

전역설정을 원하시면…
위의 파일을…
# cat ~somebody/.Xmodmap >> /etc/X11/Xmodmap
#

위와 같이 하시면 됩니다.

이제 X를 다시 띄우시고 바뀐 설정이 제대로 됐는지
확인하시면 됩니다.

자신이 원하는 윈도우 매니저의 키바인딩에 사용하실 수 있습니다.