사용자 지정 키보드 스캔 코드를 삭제하는 Linux 커널


16

최신 컴퓨터에서 사용하기 위해 개조 한 빈티지 IBM 122 키 모델 M 키보드가 있습니다. 인코딩을 수행하고 USB를 처리하기 위해 Teensy 2.0을 사용하고 있습니다. Humble Hacker 키보드 프로젝트 ( https://github.com/humblehacker/keyboard ) 에서 펌웨어를 빌려 빌드 구성에 추가 키를 추가했습니다. 여태까지는 그런대로 잘됐다.

모든 "일반"키는 작동하지만 커널이 추가 키 ( F13- F24등)를 삭제하는 것으로 보입니다 .

Running /lib/udev/keymap -i input/event0은 모든 일반 키의 스캔 코드를 표시하지만 추가 키는 스캔 코드를 표시하지 않습니다.

wiresharkUSB 포트를 패킷 캡처로 실행 하면 키보드 가 스캔 코드를 전송 하고 있지만 커널이 원칙적으로 코드를 삭제하는 것처럼 보입니다.

나는 이것이 예상하지 않은 스캔 코드를 제공하지 않는 커널 드라이버에 있다고 생각합니다.

.h커널 소스에있는 어떤 파일에는 일종의 "마스터"키 맵이있을 것이라고 생각 했지만 지금까지 나는 그것을 찾기위한 노력에 성공하지 못했다.

X 앞에 여분의 키를 매핑하는 것에 대해 묻지 않을 것을 강조 할 가치가 있습니다. 이것은 커널과 관련된 낮은 수준의 문제입니다. X를 전혀 사용하지 않을 것이라고 가정하십시오. 내가 실행할 때 스캔 코드가 표시되어야 /lib/udev/keymap -i나머지는 할 수 있습니다.


나는 이것이 도움이되지 않는다는 것을 알고 있습니다 : 왜 Teensy를 사용하고 있습니까? 해당 키보드는 직선 PS2 / USB 어댑터와 함께 작동해야합니다.
goldilocks

키보드는 이전 IBM 터미널에서 제공되었으며 PS / 2 호환 프로토콜을 사용하지 않습니다.
user2543941

와. 그것은 참 드라이버의 이벤트 (마지막 부분을 살펴이 통과되지 않도록 할 수 여기를 ). dunno evtest대신 시도해 볼 수 /lib/udev/keymap -i있습니다.
goldilocks

1
여분의 키를 사용할 때 evtest는 아무 것도 표시하지 않습니다.
user2543941

1
이 키를 사용하고 싶다면 프로젝트가 약간 커졌습니다. 키보드 드라이버를 작성하는 데있어 가장 어려운 것은 API를 배우는 것입니다. 그렇지 않으면 그렇게 복잡해 보이지 않습니다. 한동안 커널 작업을 수행하지는 않았지만 LDD3 은 여전히 ​​3.x에서 유효합니다.
goldilocks

답변:


1

커널은 이상한 스캔 코드를보고 삭제합니다. 스캔 코드 값을 얻은 다음 하드웨어 데이터베이스 색인을 업데이트하려고합니다. 간단히 말해서 계획은 다음과 같습니다.

  • dmesg 출력에서 ​​코드를 가져옵니다-알 수없는 키 코드를 누르면 dmesg는 다음과 같이 출력해야합니다.

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

a0 코드 값입니다.

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

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

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

여기서 eventXX키보드에 해당이 (당신은 그것을 실행하여 얻을 수 있습니다 evtest). 트리거하는 대신 재부팅 할 수도 있습니다.

자세한 설명은 (아키가 아닌 경우 배포 문서 에서) 아치 위키 와 기본 키 코드 매핑 파일을 참조하십시오.

이것은 신뢰할 수 있고 간단한 방법이며 커널 수준에서 매핑하므로 디스플레이 서버, DE 등 어떤 것이 든 작동합니다.


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.