Linux 커널은 사용자 정의 키보드 스캔 코드를 제거합니다.

Linux 커널은 사용자 정의 키보드 스캔 코드를 제거합니다.

나는 최신 컴퓨터에서 사용하기 위해 수정하고 있는 오래된 IBM 122키 M 키보드를 가지고 있습니다. 저는 USB 쪽을 인코딩하고 처리하기 위해 Teensy 2.0을 사용하고 있습니다. Humble Hacker 키보드 프로젝트에서 펌웨어를 빌렸습니다(https://github.com/humblehacker/keyboard), 빌드 구성에 추가 키를 추가했습니다. 여태까지는 그런대로 잘됐다.

모든 "일반" 키는 작동하지만 커널이 추가 키( F13- F24등)를 제거하는 것 같습니다.

스캔코드를 실행하면 /lib/udev/keymap -i input/event0모든 일반 키가 표시되지만 추가 키에 대한 스캔코드는 표시되지 않습니다.

wiresharkUSB 포트 패킷 캡처 표시 실행키보드 전송 중코드를 스캔했지만 커널이 원칙적으로 해당 코드를 버리는 것 같습니다.

커널 드라이버의 어떤 부분이 예상하지 못한 스캔 코드를 제공하지 않는 것 같습니다.

커널 소스 코드 어딘가에 파일에 일종의 "기본" 키 매핑이 있을 것이라고 생각 .h하지만 지금까지는 성공적으로 찾지 못했습니다.

나보다 먼저 많은 사람들이 했던 것처럼 X에서 추가 키를 매핑하는 방법을 묻지 않는다는 점을 강조할 가치가 있습니다. 이는 낮은 수준의 커널 관련 문제인 것으로 보입니다. 잠시 동안 X를 전혀 사용하지 않을 것이라고 가정해 보겠습니다. 나에게 필요한 것은 실행하는 동안 스캔 코드를 표시하는 것입니다. /lib/udev/keymap -i그러면 거기서 나머지 작업을 수행할 수 있습니다.

답변1

커널은 이상한 스캔 코드를 발견하고 이를 폐기합니다. 이러한 스캔 코드 값을 얻은 다음 하드웨어 데이터베이스 인덱스를 업데이트하려고 합니다. 간단히 말해서 계획은 이렇습니다.

  • dmesg 출력에서 ​​코드 가져오기 - 알 수 없는 키코드를 누르면 dmesg는 다음과 같은 내용을 출력해야 합니다.

    Unknown key pressed (translated set 2, code 0xa0 on isa0060/serio0)
    

a0코드 값입니다.

  • 사용자 정의 키코드 매핑 파일을 만듭니다. 예제와 도움말은 기본 파일에 있습니다
    ( /usr/lib/udev/hwdb.d/60-keyboard.hwdbArch의 경우 다른 배포판에서는 다를 수 있음).

  • 다음 명령을 실행하여 하드웨어 데이터베이스를 업데이트하고 트리거합니다.

    > udevadm hwdb --update
    > udevadm trigger /dev/input/eventXX
    

여기서 eventXX키보드에 해당합니다( 를 실행하여 얻을 수 있습니다 evtest). 트리거하는 대신 다시 시작할 수도 있습니다.

들여다보다아치스 위키더 자세한 설명을 위한 기본 키코드 매핑 파일(Arch가 아닌 경우 배포 문서에 있음)

이는 커널 수준에서 매핑하는 안정적이고 간단한 방법이므로 디스플레이 서버, DE 등이 무엇이든 관계없이 작동합니다.

답변2

이 웹사이트는 사용자 정의 키보드 변환을 제공합니다. http://straypoetry.com/ibm-model-m-keyboard/

웹사이트에 따르면: http://deskthority.net/workshop-f7/xt-at-ps2-terminal-to-usb-converter-with-nkro-t2510.html

관련 정보