· KLDP.org · KLDP.net · KLDP Wiki · KLDP BBS ·
한영키

한글 키보드 개요

103/106키 한글 키보드

한국 컴퓨터 시장에서 유통되는 한글 키보드는 KS X 5003 개인용 컴퓨터용 키보드 표준에 정의되어 있고, QWERTY 자판에 스페이스바 오른쪽에 한영 전환 키, 스페이스바 왼쪽에 한자 키가 추가되어 있는 형태이다. 이렇게 101키 QWERTY 키보드에 한영키와 한자키가 추가된 키보드를 103키 한글 키보드라고 한다. 그리고 최근에는 윈도우용 키보드라는 이름으로 윈도우 키 2개와 메뉴키가 추가되면서 104키 키보드가 주로 유통되고 거기에 한영키와 한자키가 추가된 한글키보드를 106키라고 한다. 즉 101/104키에 키 두개가 추가된 한글 키보드를 103/106키 한글 키보드라고 한다.

101/104키 호환

이 추가 키가 없는 키보드를 그대로 사용하는 경우 잘 사용하지 않는 오른쪽 Alt 키를 한영키로 사용하고, 오른쪽 Ctrl 키를 한자키로 대신 사용한다. 이런 식으로 기존의 101/104키 키보드를 사용하는 걸 101/104키 호환 모드라고 한다. 이 101/104키 호환 모드는 한국에서 판매되는 노트북 컴퓨터에서도 많이 사용한다. 특별히 국내 시장을 위해 제작된 몇몇 노트북 기종을 제외하면, 기존의 키보드 하드웨어 기구를 그대로 사용하면서 키보드의 인쇄만 바뀌어서 출시하는 게 보통이기 때문이다.

기술 정보

AT/PS2 한글 키보드의 경우 한영키는 스캔코드로 0xF2, 한자키는 스캔코드 0xF1에 해당한다. 다른 키와는 달리 이 2개의 키는 키를 눌렀을 경우에만 신호를 보내고 키를 뗄 경우에는 신호를 보내지 않는다. (그래서 키를 떼는 신호를 인식해야 하는 게임 등의 용도로는 이 2개의 키를 이용할 수 없다.) 하지만 USB 한글 키보드에서는 이 2개의 키가 다른 키와 똑같이 동작하고 뗄 경우에도 신호를 보낸다.

어떤 키보드가 어떤 종류의 키보드인지 자동으로 알아내는 방법은 없다.

커널 2.6

리눅스 2.6 커널은 PS/2 키보드의 한영/한자키가 동작하지 않던 문제가 있었다. (USB 키보드는 이러한 문제가 없다. 문제가 있다면 X Window이지 커널의 문제가 아니다.) 이 [http]버그는 2.6.18 버전에 고쳐졌다. 그 전 버전의 커널에서 한영키 문제가 있다면 먼저 커널을 업그레이드하길 권장한다.

2.6.17 이전 버전에서 setkeycodes로 한영키/한자키 등록하기

버그가 있는 2.6.17 이전 버전의 커널을 사용하는 경우 setkeycodes 명령을 이용해 한영키/한자키를 등록할 수 있다. 아래는 일반 103/106키 키보드의 경우이다.
# setkeycodes 72 122 # 한영키
# setkeycodes 71 123 # 한자키
위의 72와 71이라는 스캔코드는 AT/PS2 키보드의 한영키 코드인 F2와 한자키 코드인 F1을 2.6 커널의 버그때문에 일반키처럼 취급하면서 MSB가 날아간 형태이다.

showkey 명령으로 제대로 입력되는 지 확인할 수 있다. 한영키는 122, 한자키는 123이 되어야 한다. 여기서 122, 123은 리눅스 input layer의 코드값으로, X 윈도우의 키코드와는 관계가 없으니 혼동하지 않도록 한다.

위 내용을 /etc/rc.d/rc.local 등 시작 스크립트에 추가하면 부팅할 때마다 실행된다.

X 윈도우

XKB

X 윈도우의 키보드 데이터가 들어 있는 [http]xkeyboard-config에는 현재 103/106 한글 키보드 및 101/104 호환 모드의 데이터가 들어 있다. (관련 [https]버그)

그놈 및 KDE 환경에서는 키보드 설정 프로그램을 이용해 설정할 수 있다. (이 프로그램들은 XKB를 설정하는 프론트엔드 프로그램이다.)

X11상에서 xev로 확인하기

X윈도우에서 한영키가 작동되는지 확인하기 위해서는 xev를 이용하며, xev로 한영키를 인식하는지 확인한다. xev를 실행하면 한영키를 누르는 순간 그 keycode가 화면에 보이게 된다. keycode가 나오면 키값을 메모해주자. 만약, xev에서 한영키를 인식하지 못하면 커널에서 인식하지 못하는 것이다. 커널 버전을 확인한다.

xmodmap을 이용한, X11에 한영키/한자키 등록하기

아래의 xmodmap을 이용한 방법은 구식이고 XKB 설정을 한다면 이 방법은 필요가 없다.

X11상에서 확인된 X11상의 keycode를 X11 keysym에 매칭시키려면 다음과 같이 한다.

시스템에 등록하기

만약 확인된 X11상의 keycode값이 한자:209, 한/영:210라 한다면, /etc/X11/Xmodmap에 아래와 같이 추가
keycode 209 = Hangul_Hanja
keycode 210 = Hangul


시스템이나 키보드 type이 다르면 209,210이 아닌 다른 값이 될 수도 있으므로 반드시 xev로 자신의 키보드의 x11 keycode를 확인해보아야 한다.

일반 사용자로 등록하기

$ xmodmap -e "keycode 210 = Hangul"
위와 같은 식으로 한글키를 등록할 수 있다.

질문 답변


FedoraCore4 관련 질문입니다...;; 설치한 다음... 한영키/한자키 사용을 위해... 이리저리 자료를 찾아보고 해봤습니다..
setkeycodes 71 122
setkeycodes 72 123
이렇게 한 다음... xev 실행시켜서.. 한영키/한자키 누르면.. 해당 키코드값이 뜬다고 하는데;; 키코드값이 뜨지 않습니다..;; (다른 키들은 다 잘되는데.. 한영키/한자키 두개가 안됨) 한영키를 누르게되면... 하드읽는 소리만 계속 나고... (다른 키 누르면 멈춤) 한자키는... 아예 아무동작도 안합니다..;; ( 참고로 키보드 모델은 Generic 105-key(intl).. 키보드 배치는 U.S English.
디폴트로 다 되어있는 상태입니다... --hyunseung


아래처럼 입력기를 나비로 바꾸었지만 잘 안되는 군요. xev에서 확인하니까 209, 210이 나옵니다. 그래서 /etc/X11/Xmodmap에 아래와 같이 추가했습니다.
keycode 209 = Hangul_Hanja
keycode 210 = Hangul
'빨간모자/환경설정/키보드'에서 '키배치' 탭을 보면 '키보드 모델'이 'Generic 105-key (intl) PC'로 되어 있고 '선택한 키 배치'가 'U.S English'로 되어 있습니다. 키보드 모델엔 '한글 106키'가 없고, 키배치에선 'korean'으로 하려면 에러를 내던데... 뭔가 이상하긴 한데... 잘 되시는 분은 여기 좀 봐 주시겠습니까? --ltssword

한글 106키는 모델에 없습니다. 별로 어렵지 않은 작업이지만,, --WkPark

페도라 코어 3 에서 왜 그런지 저거 추가만 해서는 잘 안되더군요. '빨간모자/환경 설정/추가 환경 설정/세션'에서 '시작 프로그램' 탭에 '더하기'를 눌러 '시작 명령(S)' 에 'xmodmap /etc/X11/Xmodmap' 이라고 입력한 후 '확인' 버튼을 눌러 등록시킨 후 껐다켜면 잘 되더군요. --정석


저도 질문 하나 하려고 합니다. knoppix에서 한영키가 반영이 되지 않아서 말이 많았습니다만 사실 어떻게 해야할지 갈피를 못잡고 있습니다. 일반적으로 많이 사용되는 키보드의 경우 keycode를 지정할 수 있지만 모든 사람이 같은 키보드를 사용하는 것은 아니지 않습니까? software 적으로 한영키를 인식하고 이를 한글 입력기에 반영할 수 있는 방법은 없습니까? --GunSmoke
일반적인 오해인데, 반대입니다. 한영키를 입력기에 반영하는 것이 아니고 X에서 한영키가 작동되게 하면 입력기에서 그 키 이벤트를 받을 수 있는 것입니다. 이미 입력기에는 한영키로 작동되게 하는 코드가 들어 있습니다. 따라서 X에서 한영키만 인식되면 바로 작동합니다. 이런 문제를 해결하기 위해서 입력기 실행을 스크립트로 하고 그 스크립트에서 한영키가 작동하는지 확인해서 한영키를 등록하도록 할수도 있겠습니다만, 그것이 올바른 방법이라고 생각지 않습니다. 한영키 인식은 입력기의 문제가 아니라 데스크탑 시스템의 문제입니다. 만일 확장 키보드가 있어서 거기서 웹브라우저를 띄우는 키가 있다면 웹브라우저에서 그 키를 인식하게 하는 것이 올바른 해결 방법일까요? -- krisna
Software적으로 한영키의 키코드를 알아내서 데스크탑에서 인식가능하도록 하는 방법을 물으신 것 같습니다. --검은해
예 저는 그런 방법을 입력기가 아닌 시스템관리도구의 측면에서 접근하는게 어떨까 하는 의견입니다. 어찌됐든 자동인식이 가능한 방법이 있는지 찾아봐야겠습니다. 노트북 키보드같은경우도 인식해야 하므로 꽤 어려울것 같습니다. -- krisna

자동 한영키 인식은 입력기에서 처리할 부분은 아닌거 맞고요, 커널에서 키보드타입을 인식할 것이고, 미 등록된 키 즉, 한영키에 대해서 키보드 타입에 맞게끔 keycode를 등록하고(setkeycodes의 일), 일단 커널에 키가 등록되면 키이벤트가 X11에 비로소 넘어갈 수 있게 되고, 그때부터는 X11이 모든 일을 담당하게 되는 식입니다. --WkPark

저도 그 방법을 알고싶습니다. ㅡㅡ;; 일단, 키보드를 커널에서 어떻게 인식하느냐, 그리고 setkeycodes를 실행시킨 후 X11에서 keycode값이 어떻게 되느냐로 나누면 될 것 같은데요..

한가지 질문할 것이 더 생겼습니다. 실제로 setkeycodes로 키코드를 등록하기 위해서는 스캔코드 값을 알아야 합니다. 이것은 showkey를 이용해서 알 수 있다고 나와있습니다. man 페이지에서는 showkey -s를 이용하라고 하더군요. 그러나 setkeycodes로 등록하기 전의 한영키나 한자키는 showkey에서 반응하지 않습니다. 이럴 때는 어떻게 해야 합니까? 어떻게 스캔코드 값과 키코드 값을 알아내죠? 특히 일반 106키가 아닌 노트북 같은 경우에는 키코드 및 스캔코드 값이 다 다를텐데 이런 분들은 어떻게 값을 알아내십니까? --GunSmoke
일반 106키 키보드는 한영키/한자키의 set 2 값이 0xf2, 0xf1이고 노트북의 경우에는 오른쪽 ALT와 CTRL (e0 38, e0 1d)을 그대로 씁니다. 다른 경우는 아직 보지 못했습니다. --handrake

데비안 혹은 우분투에만 있는 거 같던데, hotkey-setup이란 패키지가 있습니다. showkey, setkeycodes, dumpkeycodes 등을 좀 만져봤는데 아직 소득은 없었습니다. share 디렉 밑에 기본 파일과 기종별 파일을 두어 setkeycodes를 할 수 있게 하는데, 아직 정확한 동작 순서는 모르겠습니다. 이쪽에 대해 아시는 분? --kz

hotkey-setup은 잠깐 살펴보았는데 기종별 (주로 노트북에 해당하는 걸로 보입니다.) 펑션키 등을 등록하는 스크립트 같더군요. 한영키와는 직접적인 관계는 없을 것 같습니다. --handrake

키보드 모델별 X11 한영키 keycode

AT Translated Set 2 keyboard

$ dmesg |grep -i keyboard
input: AT Translated Set 2 keyboard on isa0060/serio0
  • 이 경우, 122,123이 각각 한자/한영키 keycode이고, x11상에서는 209, 210값.

see also 세벌식




sponsored by andamiro
sponsored by cdnetworks
sponsored by HP

Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2011-05-01 19:18:23
Processing time 0.0217 sec