답변1
입력 레이어에 대한 매우 간략한 개요:
키보드 장치는 USB나 PS/2 포트 등을 통해 어떤 방식으로든 PC에 연결되어 있습니다. 이 메커니즘의 커널 드라이버는 키보드에서 키를 누를 때 통신을 처리하는 방법을 알고 있습니다.
USB 키보드의 경우 표준은 다음과 같습니다.HID(휴먼 인터페이스 장치)가 존재합니다. 이는 키보드뿐만 아니라 마우스, 조이스틱 및 기타 입력 장치에도 적용됩니다. 따라서 장치에는설명자커널이 방출할 수 있는 신호의 종류와 키에 대한 많은 코드를 알려줍니다.무음표준화되어 있습니다.
그럼에도 불구하고 일부 키보드에는 표준화되지 않은 키(예: Fn일부 키보드)가 있으며 이러한 키에 신호를 보내는 방법은 제조업체에 달려 있습니다.
커널에는 HID 장치를 처리하기 위한 특수 계층이 있습니다. 이 계층은 원시 HID 통신을 에서 사용할 수 있게 만든 /dev/hidrawX
다음 계속해서 HID 이벤트를 커널 입력 이벤트로 변환합니다.
커널 입력 레이어는스캔 코드(장치에 고유한 물리적 키에 해당하는 숫자)를 다음으로 변환합니다.키 코드(모든 장치에 표준화된 논리 키에 해당하는 숫자) 둘 다 에서 이벤트로 제공됩니다 /dev/input/eventX
. 를 사용 evdev
하여 이러한 이벤트를 볼 수 있으며 showkey
, dumpkeys
등을 사용하여 번역 테이블을 볼 수 있습니다.
X 서버(또는 Wayland)는 모든 이벤트를 읽고 이를 다음으로 변환합니다.주요 기호( a
, á
등 또는 와 같은 특별한 것 AudioMute
). X 응용프로그램은 이 기호를 수신하고 그에 따라 작동할 수 있습니다. 애플리케이션 보기를 사용하여 xev
이 레이어를 확인하고 에서 사양을 xmodmap
구성 할 수 있습니다 .xkbd
xorg.conf
에 대응하려면 AudioMute
일부 애플리케이션이 필요합니다. 이는 창 관리자인 경우가 많지만 창 관리자가 이를 수행하지 않는 경우 별도의 응용 프로그램도 작동합니다.
따라서 단일 "키보드 드라이버"가 없고 훨씬 더 복잡하며 "음소거"에 대한 특별한 호출이 없습니다.
답변2
일반적으로 이해하면 당신 말이 맞습니다. 키를 누르면 키보드는 기본적으로 각 키를 식별하는 일련의 숫자인 스캔코드를 보냅니다. 스캔코드는 키코드에 매핑됩니다. 각 키코드는 특정 키를 누를 때 프로그램이 어떻게 반응해야 하는지를 정의하는 기능에 해당합니다. Xorg와 콘솔은 서로 다른 키코드 세트를 사용합니다. 저는 Wayland에 대해 잘 모르지만 자체 키코드 세트를 사용할 수도 있습니다. 키코드는 키 기호에 매핑됩니다. 키 기호를 사용하면 개발자가 더 높은 수준의 추상화에서 키보드를 사용하여 작업할 수 있습니다.
showkey --scancode
및 각각을 실행하여 콘솔에서 스캔코드와 키코드를 볼 수 있습니다 showkey --keycode
. Xorg에서는 xev
후자를 사용해야 합니다 .
이러한 추상화 수준을 사용하면 Linux 환경의 다양한 부분에 영향을 미치는 유연하고 복잡한 매핑 체계를 만들 수 있습니다. 이것ArchWiki 기사매핑 기술에 대한 많은 정보가 포함되어 있으며 더 알고 싶다면 읽어야 합니다.
또한 많은조항키보드가 낮은 수준에서 작동하는 방식을 설명하는 인터넷상의 정보입니다. 기사가 1999년에 작성되었는지 2010년에 작성되었는지는 중요하지 않습니다. 그 이후로 키보드에 많은 변화가 있지는 않지만 USB HID 장치는 '클래식' PS/2 키보드와 다르게 작동한다는 점을 명심하세요.