다음 이전 차례

13. XFree86-2.1이 keymap을 초기화할 때 하는 일이 정확이 무엇일까?

버전 2.1 이래로 XFree86은 가능한한 리눅스 keymap으로부터 사용할 keymap을 초기화한다. 하지만 각 키당 16개의 항목을 가지고 있고, (하나당 Shift, AltGr, Ctrl, Alt의 조합으로 변경할 수 있으므로) 현재는 각 키당 256개의 항목을 가지고 있다. 반면에 X는 각 키당 4개의 항목만이 있다. (각 키당 Shift, Mod의 조합) 따라서 키 정보의 일부는 필연적으로 잃을 수 밖에 없다.

제일 처음 XXconfig 화일을 읽는다. 여기에는 LeftAlt, RightAlt, RightCtl, ScrollLock 키가 각각 Meta, ModeShift, Compose, ModeLock 또는 ScrollLock으로 정의되어 있을 것이다. X386keybd(1) 또는 XFree86kbd(1)를 참조하라.

오른쪽 Ctl키가 ModeShift 또는 ModeLock으로 정의되어 있지 않으면 Mod는 보통 왼쪽 Alt키가 사용된다. 오른쪽 Ctl키가 이렇게 정의되어 있으면 오른쪽 Ctl키가 사용된다. 오른쪽 Alt키가 이렇게 정의되었다면 이 경우는 오른쪽 Alt키가 사용되는 것이다. 이런 방식으로 한 키에 대하여 리눅스에서 사용하는 16개의 키 의미에서 XFree86의 4개의 의미를 결정한다. 지금의 리눅스는 두개의 Ctl키(좌,우)간, 두개의 Shift키(좌,우)간의 차이는 구별하지 않는 것이 디폴트이다. 하지만 X는 이것을 구별한다.

커널 keymap이 읽혀지고 보통 이에 해당하는 명확한 X 바인딩이 만들어진다. "action 키"에 해당하는 Show_Memory, Show_State, Show_Registers, Last_Console, Console_n, Scroll_Backward, Scroll_Forward, Caps_On, Boot에 대한 바인딩은 구별하지 않는 바인딩으로 취급되어서 무시되고, (ShiftLock을 제외한) lock들과 "ASCII-x" 키들이 만들어진다.

다음, Xconfig 화일에 정의되어 있는 것들이 사용된다. (따라서, Xconfig의 Compose에 대한 정의가 리눅스 keymap에 있는 값들을 무시하고 사용될 것이다.)

기능키에 연결되어 있는 문자열은 어떻게 되는가? 아무일도 안일어난다. X에는 그러한 개념이 아예 없다. (하지만 xterm에서 기능키에 문자열을 정의하는 것은 가능하다. 그러나 윈도우 관리자가 이 키를 먼저 가로챈다는 점에 유의하라.)

나는 아직 Alt키가 눌렸을 때, xterm이 X keymap을 사용하는지 확신하지 못하고 있다. 그냥 리소스 eightBitInput을 살펴보고 문자의 최상위 비트가 설정되어 있는지에 따라 추가적인 Escape 문자를 발생시키는 것 같다. (마치 콘솔에서 setmetamode(1)가 그러하듯이.)


다음 이전 차례