· KLDP.org · KLDP.net · KLDP Wiki · KLDP BBS ·
XKB Configuration

X 윈도우 키보드 설정 매뉴얼. http://www.charvolant.org/~doug/xkb/html/index.html

한글 키보드 레이아웃을 구성하기 위해 찾아본 문서를 번역합니다. 중요하지 않은 것 같은 부분은 대강 번역하거나 생략했으니 이 문서로 충분하지 않다고 생각하면 위의 원문 링크를 참조하세요.


1. 기본

XKB 설정은 여러 개의 컴포넌트로 나뉘어 있어서 이것들을 조합해서 키보드 설정을 만들 수 있다. 몇 가지 복잡한 포함 관계와 부가 규칙을 이용하면 특수 키보드와 국가별 특성을 반영할 수 있다. 기본 컴포넌트는 다음과 같다.
  • key codes 키보드 스캔코드를 심볼릭 코드로 바꾼 것
  • key symbols key codes를 A와 같은 심볼로 바꾼 것
  • compatibility map 특수 목적 키의 동작에 대한 정의
  • type 쉬프트 조합에 대한 정의
  • geometry 키보드의 실제 레이아웃에 대한 설명
이외에 rules, semantics, keymaps 등은 위의 기본 컴포넌트들을 조합하는데 쓰인다.

1.1. Modifier Keys

modifier key는 shift, ctrl, alt 처럼 다른 키의 의미를 바꿔주는 것이다. 이것들은 서로 조합할 수도 있다. 그래서 이게 XKB를 복잡하게 만든다. 기본적으로 XKB는 여덟 개의 modifier key를 지원한다. Control, Shift, LockMod1-Mod5이 그것이다. Alt 같은 키는 Mod1-Mod5 중 하나에 매핑할 수 있다.

기본적인 modifier key도 쓸만하지만 추상화 레벨를 하나 더 추가할 수 있다면 편리할 것이다. 그래서 virtual modifier key라는 레벨이 존재하며 이를 통해 modifier key를 실재 키 이름이 아닌 키의 역할 이름으로 사용할 수 있다. 이 레는 물리적 키보드와 입력하려는 문자와의 관계를 독립적으로 만든다. types와 compat 컴포넌트가 이 문제를 다룬다.

1.2. 레벨과 그룹

modifier 키를 누르면 키 조합을 바꿀 수 있다. 이론상으로는 무한대로 조합 가능하지만 너무 자유롭게 하면 컴포넌트를 조합하기 어려워진다. 그래서 XKB는 레벨과 그룹이라는 두 가지 조합 원칙을 제시한다.

레벨은 쉬프트 키와 같은 키를 눌렀을 때의 상태를 의미한다. 예를 들어 A키를 누르면 a가 입력되는데 shift 키를 누른 상태에서는 A가 입력되는 것은 shift 키로 레벨이 변했기 때문이다. 대부분의 경우 두 개의 레벨만으로 충분하다. 그 이상에 대해서는 나중에 다시 다룰 것이다.

그룹은 레벨에 비해 좀 애매한 개념이다. 그룹은 키보드 전체의 문자셋을 바꾼다. 주로 다중 언어를 지원하기 위해 사용한다. 그룹 변경 키는 레벨처럼 명확하지 않고 정하기 나름이다.

Figure 1: Levels and Groups on a Single Key 각 그룹 내에도 여러 레벨이 존재할 수 있다.

1.3. Key Codes

XKB의 최하부 레이어는 키 코드이다. 원시 키 코드는 특정 키보드가 키를 눌렀는지 뗐는지를 알려주는 숫자 코드이다. X 시스템은 키를 누를 때와 뗄 때 모두 이벤트를 발생시키며 두 가지 경우 모두 키 코드는 어느 키를 누르거나 뗐는지를 알려 준다.

하드웨어 설계자는 어떤 숫자 코드를 쓰든지 상관 없다. keycodes 컴포넌트는 XKB가 심볼 이름을 다양한 키 코드에 매핑할 수 있게 해준다. 심볼 이름은 symbols 컴포넌트에서 비슷한 키보드 레이아웃을 찾는데 사용할 수 있다.

1.4. Key Symbols

키 심볼은 키를 누를 때 입력되는 실제 문자나 기호이다. symbol map은 symbolic key code를 적당한 symbol과 매핑시킨다. symbol map은 modifier key도 지정한다. 각 심볼은 X 프로토콜에서 정의한 이름을 갖고 있으며 XKB도 몇 가지 예외를 추가한다. 실제 심볼 이름은 /usr/X11R6/include/X11/keysymdefh에서 볼 수 있다. 그룹과 레벨은 키의 의미를 바꾸기 때문에 symbol map에는 한 키에 대해 그룹과 레벨에 따라 여러 심볼이 매핑될 수 있다.

2. XKB 설정 선택하기

쉽게 생각할 수 있는 방법은 이미 있는 XKB 설정을 이용해서 원하는 특별한 동작을 할 수 있도록 컴포넌트를 조합하는 것이다. 여기서는 /etc/X11/XF86Config-4에 x 설정이 있다고 가정하고 진행할 것이다. 만약 다른 X 구현을 사용한다면 그에 맞는 설정 파일을 찾아야 한다.

먼저 설정 파일의 정의에 어떻게 접근할 것인가를 알아야 한다. 설정 파일들은 그 컴포넌트 이름으로 된 디렉토리 아래에 있다. 그 디렉토리 아래에는 또 다른 서브 디렉토리가 있고 설정 파일이 있다. 설정 파일은 xfree86'과 같은 이름이며 서브 디렉토리는 sgi/iris와 같은 이름이다. 각 파일은 여러 개의 설정을 담는다. 예를 들어 xfree86 keycodes 파일에는 xfree86, basic, 102, jp106, jp109usb, abnt2 등의 설정이 담겨 있다. 이 중에 하나가 기본값으로 지정되어 있으며 기본값을 바꿀 수도 있다. xfree86(pc102)'''와 같이 괄호로 둘러싸면 그 안의 내용을 포함시킬 수 있다.

기본 컴포넌트를 확장할 수도 있다. 몇 가지 추가적인 연산자로 기본 컴포넌트의 의미를 바꾸거나 확장할 수 있다. us(pc101)+ctrl(swapcaps)와 같이 + 연산자를 쓰면 뒤에 있는 컴포넌트가 앞의 컴포넌트를 override한다. 이 의미는 101키의 US 키보드에서 ctrl만 cap과 바꾸도록 하라는 것이다. | 연산자는 기능을 추가하는데 사용된다.

2.1. 쉬운 방법

기본 컴포넌트와 그 확장을 직접 조합하는 것보다 XKB가 제공하는 rules를 쓰는 것이 쉽다. XF86Config-4에 보면 다음과 같은 설정이 있을 것이다.
Section "InputDevice"
        Identifier  "Keyboard0"
        Driver      "keyboard"

        Option  "XkbRules"      "xfree86"
        Option  "XkbModel"      "pc104"
        Option  "XkbLayout"     "us"
        Option  "XkbVariant"    "basic"
        Option  "XkbOptions"    "grp:menu_toggle"
EndSection
/usr/X11R6/lib/X11/xkb/rules/xfree86.lst 파일에 보면 다양한 구성 요소에 대한 설명이 있다. 간단히 설명하면
  • XkbRules 설정 rule의 집합을 정의한다. XFree86에서는 xfree86이 되어야 한다. 다른 것으로는 sgi나 sun이 있다.
  • XkbModel 키보드 타입. pc104는 일반적인 104키 키보드
  • XkbLayout 키보드 레이아웃. 주로 국가별 키보드 레이아웃을 위한 것이지만 드보락과 같은 자판을 지원하기 위해서도 사용한다.
  • XkbVariant 일반적인 레이아웃의 작은 차이를 기술한다. 이건 보통 basic으로 설정한다.
  • XkbOption 기타 옵션. 그룹 변경 키 등을 정의한다.

2.2. 다소 원시적인 방법

keymap 컴포넌트는 rules보다 간단하게 기본적인 세팅을 하고 싶을 때 사용한다. 다음과 같이 설정할 수 있다.
Section "InputDevice"
        Identifier  "Keyboard0"
        Driver      "keyboard"

        Option  "XkbKeymap"      "be"
EndSection

2.3. 어려운 방법

어려운 방법은 다섯 개의 핵심 컴포넌트를 직접 지정하는 것이다. 그렇게 하면 어떤 세밀한 옵션도 조정 가능하며 키보드 설정 전체를 조정할 수 있다. 다음과 같이 다섯 개의 컴포넌트를 모두 지정한다.
Section "InputDevice"
        Identifier  "Keyboard0"
        Driver      "keyboard"

        Option  "XkbKeycodes"      "xfree86"
        Option  "XkbTypes"         "default"
        Option  "XkbCompat"        "basic+pc+iso9995+norepeat"
        Option  "XkbSymbols"       "en_US(pc104)+dk+ctrl(swapcaps)+group(switch)"
        Option  "XkbGeometry"      "pc(pc104)"
EndSection
  • xfree86 표준 XFree86 키보드를 사용한다.
  • default 레벨에 대한 기본 설정값을 사용한다.
  • basic+pc+iso9995+norepeat 호환성을 위한 지정. 그룹과 레벨 컨트롤
  • en_US(pc104)+dk+ctrl(swapcaps)+group(switch) 키보드의 심볼 레이아웃
  • pc(pc104) bog-standard 104-key PC keyboard를 쓴다는 의미

3. XKB 설정 파일

XKB 설정 파일을 만지는 건 노가다성 삽질이다. 대부분의 경우는 그럴 필요가 없으며 완벽하게 설정된 패키지들이 있다. 이 섹션을 보기 전에 #3-1을 먼저 보도록 하라. 그러나, 자신만의 설정을 만들고 싶을 수도 있고 어떤 것을 선택해야할지 알려면 또 어느 정도 이해해야 한다.

핵심 파일은 keycodes, types, compats, symbols, geometry 서브 디렉토리에 있는 컴포넌트들이다. keymap, rules, semantics는 이 핵심 컴포넌트를 묶어주는 역할을 한다.

3.1. 기본

XKB 설정들은 모두 비슷한 구조이다. 하나의 설정 파일이 여러 개의 설정을 담고 있다. 각각의 설정은 다음과 같은 문법으로 이루어진다. 옵션들, 타입과 이름에 이어서 중괄호로 묶인 정보가 오고 세미콜론으로 종료된다. 예를 들면 다음과 같다.
default xkb_keycodes "xfree86" {
    include "xfree86(basic)"
    <BKSL> =  51;
    <LSGT> =  94;
};
default는 옵션, xkb_keycodes는 타입, "xfree86"은 이름이고 중괄호 안이 내용이다.

include문은 다른 설정을 포함하기 위해 사용한다. include는 override로 작동하며 단순히 추가만 하고 싶을 때는 augment을 사용한다. 여기서 xfree86은 파일명이고 basic은 그 안의 설정 이름이다. 이 파일은 같은 디렉토리에 있는 것을 가정한다.

그리고 상속도 가능하다. 컨텍스트와 그루핑은 중괄호로 둘러 싼다. 부모 컨텍스트의 정보들은 자동으로 상속되며 오버라이드 할 수 있다.

Table 1: Variant Options
default 해당 설정을 파일의 기본값으로 한다.
partial 이 설정은 일부분이며 다른 파일에 포함되어 사용한다는 것을 표시한다.
hidden 설정 파일 내에서만 사용되며 공통 부분을 포함시킬 때 유용하다.
alphanumeric_keys #4-3
modifier_keys #4-3
keypad_keys #4-3
function_keys #4-3
alternate_group #4-3

3.2. Key Codes

키 코드는 키보드 스캔 코드를 심볼릭 형태로 바꾸는 매핑이며 XKB와 키보드가 처음 만나는 곳이다. 그 다음은 키보드에 따라 다르며 어떤 심볼을 사용하느냐에 따라서도 다르다. 다음 에제를 보라.
xkb_keycodes "basic" {

    minimum= 8;
    maximum= 255;

    <TLDE> =  49;
    <AE01> =  10;
    <AE02> =  11;
...
    indicator 1 = "Caps Lock";
    indicator 2 = "Num Lock";
...
    alias <AE00> = <TLDE>;
};
선언부는 #4-1을 바탕으로 이해할 수 있을 것이다. maximum과 minimum은 키코드 최대 최소값이다. <TLDE> = 49는 키코드 49를 심볼 TLDE에 매핑시킨다는 뜻이다. 이 심볼은 symbols 컴포넌트에서 정의된다. 그리고 이에 대한 컨벤션은 다음과 같다. Figure 2: Key Code Naming Conventions indicator는 키보드 LED를 지정하는 것이다.

3.3. Symbols


3.4. Types

3.5. Compatibility Maps

3.6. Geometry

3.7. Directory Files

3.8. Grouping Component


4. XKB 프로그램들


5. 키보드 예제. Happy Hacking Keyboard Lite



CompleteMe



sponsored by andamiro
sponsored by cdnetworks
sponsored by HP

Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2005-10-21 16:14:30
Processing time 0.0089 sec