KEYBOARD(4)

명칭
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>