tail head cat sleep
QR code linking to this page

Man page  — KEYBOARD

명칭

keyboard – PC 키보드의 인터페이스

내용

해설

PC 키보드는 콘솔의 캐릭터 입력 디바이스로서 사용됩니다. 키보드는 현재의 가상 콘솔이 전유합니다. 가상 콘솔을 바꾸려면 , 순차 순서 ALT+Fn (을)를 사용해 주세요. 이것은, ALT 를 누르면서 function key의 하나를 누른다고 하는 의미입니다. 그렇다면, 그 function key의 번호와 같은 가상 콘솔이 현재의 가상 콘솔로서 선택되어 키보드나 디스플레이의 전유적인 사용권이 주어집니다.

콘솔에서는, 특별한 키 순차 순서를 이용하는 것으로, 키보드상에 물리적으로 존재하지 않는 값을 입력할 수 있습니다. 이 기능을 사용하려면 , ALT 를 누른 채로 해, 숫자 키패드로 0 에서 255 의 10 진수자를 입력해, ALT 를 떼어 놓아 주세요. 그렇다면, 입력된 값이 하나의 캐릭터를 나타내는 ASCII 치로서 사용됩니다. 이와 같이 해, 키보드상에 없는 임의의 ASCII 치를 입력할 수가 있습니다. 또, 콘솔 드라이버는 히스토리 기능도 갖추고 있습니다. 히스토리 기능은 scroll-lock 키를 누르는 것으로 유효하게 됩니다. 이것은 표시를 고정해, 최근 스크롤 된 행에 건너 커서 키로 스크롤 업·다운할 수 있도록(듯이) 합니다.

키보드는, 개개의 유저나 나라의 차이에 의한 배치에 맞추어 설정할 수 있습니다.

키보드상의 키는 다음의 기능의 어떤 것에서도 가질 수가 있습니다:

        통상 키            - 그 키에 관련지을 수 있었던 ASCII 치를 입력.

        function key    - ASCII 수치열을 입력.

        스윗치 키           - 가상 콘솔을 바꾼다.

        수식 키            - 별의 키의 의미를 변경한다.

키보드란, 1 으로부터 n 의 번호를 붙일 수 있었던 키의 집합이라고 볼 수 있습니다. 이 번호는 자주(잘), 어느 키에 대한 「스캔 코드 (scancode)」라고 불립니다. 어느 키가 밀렸을 때, 그 키의 번호는 비트 7 이 0 의 8 비트 캐릭터에 변환되어 떼어 놓아졌을 때는 비트 7 이 1 의 수치에 변환됩니다. 이것에 의해, 키의 매핑이 완전하게 설정 가능해집니다.

각각의 키가 가지는 의미는 PIO_KEYMAP ioctl 의 호출에 의해 프로그램 할 수 있습니다. 이것은 keymap_t 구조체를 인수에 취합니다. 이 구조체의 구성은 다음과 같이 됩니다:

                struct keymap {
                        u_short n_keys;
                        struct key_t {
                                u_char map[NUM_STATES];
                                u_char spcl;
                                u_char flgs;
                        } key[NUM_KEYS];
                };

필드 n_keys 는 몇 개의 키 정의 (스캔 코드)가 계속될까를 시스템에 가리킵니다. 각 스캔 코드는 서브 구조체의 key_t 로 지정됩니다.

각 스캔 코드는, shift, control, alt 상태에 의해 8 개(살)이 다른 값에 변환될 수 있습니다. 이것들 8 방법 상태는 다음과 같은 배열 map 로 표현됩니다:

alt
scan cntrl alt alt cntrl
code base shift cntrl shift alt shift cntrl shift
map[n] 0 1 2 3 4 5 6 7
---- ------------------------------------------------------
0x1E 'a' 'A' 0x01 0x01 'a' 'A' 0x01 0x01

이것은, 통상 0x1E 의 스캔 코드를 가지는 「A」라고 기록된 키의 디폴트의 매핑입니다. 8 방법 상태가 나타나고 있도록(듯이), 「A」키의 통상의 동작을 줍니다. 필드 spcl 는, 키에 「특수한 (special)」취급을 주기 위해서(때문에) 사용되어 다음과 같이 해석됩니다. 각 비트는 상기 상태의 하나에 대응합니다. 그 비트가 0 이라면, 그 키는 map[] 의 대응하는 엔트리에 나타난 수치를 송출합니다. 비트가 1 이라면, 그 키는 「특수」입니다. 즉, 그 키는 아무것도 송출하지 않습니다. 대신에, 「상태 (state)」가 변경을 가합니다. 즉, 그 키는 shift, control, alt, lock, switch-screen, function key, 혹은 no-op 키이다고 하는 것입니다. map 의 비트는 역방향이 됩니다. 즉, 비트 7 이 base 에, 비트 6 이 shift 에, 등과 대응합니다.

필드 flgs 는, 그 키가 caps-lock (1), num-lock (2), 또는 그 양쪽 모두 (3)에 반응해야할 것인가, 혹은 양쪽 모두 무시 (0)해야할 것인가를 결정합니다.

kbdcontrol(1) 유틸리티는, 이러한 기술을 커널에/커넬로부터 실행시에 로드하기 위해서(때문에) 사용됩니다. 이것에 의해 실행시에 키 할당을 변경할 수가 있습니다. 혹은, 보다 중요한 일입니다만, 키의 정확한 의미를 (GIO_KEYMAP ioctl 로) 커널로부터 취득합니다 (예를 들면, X 서버가 이용합니다).

function key는 SETFKEY ioctl 호출을 이용해 프로그램 할 수 있습니다.

이 ioctl 는 fkeyarg_t 형의 인수를 취합니다:

                struct fkeyarg {
                        u_short keynum;
                        char    keydef[MAXFK];
                        char    flen;
                };

필드 keynum 는 어느 function key를 프로그램 할까를 결정합니다. 배열 keydef 는 사용하는 새로운 캐릭터 라인 (길이는 MAXFK 까지)을 포함해, 그 길이를 flen 에 넣지 않으면 안됩니다.

GETFKEY ioctl 호출은 닮은 것처럼 일합니다만, 이것은 keynum 의 현재의 설정을 돌려줍니다.

function key는 다음과 같이 번호 붙이고 됩니다:

        F1-F12                  key 1 - 12
        Shift F1-F12            key 13 - 24
        Ctrl F1-F12             key 25 - 36
        Ctrl+shift F1-F12       key 37 - 48
        
        Home                    key 49
        Up arrow                key 50
        Page Up                 key 51
        (keypad) -              key 52
        Left arrow              key 53
        (keypad) 5              key 54
        Right arrow             key 55
        (keypad) +              key 56
        End                     key 57
        Down arrow              key 58
        Page down               key 59
        Insert                  key 60
        Delete                  key 61

        Right window            key 62         Left window             key 63         Menu                    key 64

kbdcontrol(1) 유틸리티로 실행시에 이러한 값을 변경할 수도 있습니다.

저자

So/ren Schmidt <sos@FreeBSD.org>

FreeBSD KEYBOARD (4) January 8, 1995

tail head cat sleep
QR code linking to this page


Ben Bullock이 유닉스 매뉴얼 페이지에서 서비스에 대한 의견을 주시기 바랍니다. Privacy policy.

Do you laugh when the waiter drops a tray full of dishes? Unix weenies do. They're the first ones to laugh at hapless users, trying to figure out an error message that doesn't have anything to do with what they just typed.
— The Unix Haters' handbook