Linux 커널은 키보드 입력/출력을 어떻게 처리합니까?

Linux 커널은 키보드 입력/출력을 어떻게 처리합니까?

나는 가상 터미널 장치(예를 들어)를 이해하지 못하지만, 버튼을 누르면 /dev/tty1"전환"할 수 있다는 것을 알고 있습니다.tty1ctrl + alt + f1

사용자 정의 키보드 레이아웃이 있지만 /usr/share/X11/xkb/symbols/usX가 실행 중일 때만 "작동"합니다.

가상 터미널과 X는 둘 다 자신만의 방식으로 키보드 입력/출력을 관리하는 것처럼 보이지만 아마도 둘 다 어떤 방식으로든 (Linux) 커널과 상호 작용하므로 키보드 하드웨어에 대한 추상화를 제공해야 합니다.

Linux 커널은 키보드 입력/출력을 어떻게 처리합니까? 모든 스캔코드/키코드/keysims/등의 목록과 Linux가 "키보드"의 전체 개념을 관리하는 방법에 대한 전반적인 논리가 포함된 소스 파일이 있습니까?

(나는 Lubuntu를 실행하고 있습니다.)

답변1

바라보다키보드 입력과 텍스트 출력은 어떻게 작동합니까?이 주제에 대한 개요를 살펴보세요.

좀 더 자세히 설명하면, 리눅스에서는 커널이 하드웨어로부터 스캔 코드를 받아 키코드로 변환한다. (이 용어는 완전히 표준은 아닙니다. 두 용어 모두에서 "스캔코드" 또는 "키코드"가 사용될 수 있습니다.) 이 변환이 작동하는 방식은 키보드 드라이버에 따라 다릅니다. PS/2 키보드의 경우 구성할 수 있습니다.setkeycodes. USB 키보드의 경우 구성할 수 있습니다.작성자: udev. 당신은 또한 볼 수 있습니다아치 위키. 키보드, 마우스 등 모든 사용자 입력 장치는 이벤트 장치를 통해 노출됩니다 /dev/input/event*.

Linux 콘솔에서 키코드는 콘솔 키 맵에 따라 이스케이프 시퀀스에 매핑됩니다. 콘솔은 텍스트 터미널이기 때문에 애플리케이션은 자신을 나타내는 인쇄 가능한 문자와 제어 문자 또는 이스케이프 시퀀스를 사용하여 인코딩된 기능 키가 포함된 바이트를 봅니다. 다음 명령을 사용하여 매핑을 변경할 수 있습니다.loadkeys. 매핑은 키코드+수정자 조합(3개의 수정자: shift, control, , alt)에서 키 기호로, 키 기호에서 문자열(문자 또는 이스케이프 시퀀스)로의 두 가지 수준의 간접 참조를 사용합니다. 키 기호 세트는 고정되어 있으므로 사용자 정의 조합을 정의하려면 기존에 사용되지 않은 키 기호(예: F13, F14, ...) 를 사용해야 합니다.

이러한 번역을 구현하는 소스 코드를 보려면 다음을 확인하세요.키보드 드라이버그리고범용 입력 코드, 그리고우데브그리고리브데프.

X11(GUI)에는 애플리케이션이 수신하는 키코드를 매핑하는 고유한 방법이 있습니다. 키 기호와 수정자는 X11 응용 프로그램에 표시되므로 기능 키에는 추가 코딩이 필요하지 않습니다. 실제로 X에서 키맵을 정의하는 방법에는 두 가지가 있습니다. 고전적인 방법인 xmodmap과 더 강력하지만 더 복잡한 최신 메커니즘인 XKB입니다.

관련 정보