맞춤형 키보드에서 키의 키 코드 얻기


12

Minitel을 Raspberry Pi가있는 컴퓨터로 변환하려고합니다.

미니텔입니다.

여기에 이미지 설명을 입력하십시오

그래서 미니텔 키보드의 매트릭스를 다음과 같이 USB 키보드 PCB에 납땜했습니다. 여기에 이미지 설명을 입력하십시오

모든 것이 정상적으로 작동합니다. 사용자 정의 키보드에서 일부 키를받습니다. 키를 적절히 다시 매핑하면됩니다.

그래서 a해당 키 코드를 누른 다음 사용자 정의 키보드의 모든 키를 사용하여 xmodmap 파일을 최종적으로 생성 하도록 요청하는 프로그램을 만들려고 합니다.

내가 가진 유일한 문제는 어떻게 그 키 코드를 얻을 수 있는지 알 수 없다는 것입니다 (그리고 오직!). 시도 xev했지만 필터링하기에 너무 많은 데이터가 표시되었습니다.

모든 키 코드를 손으로 추적 할 수 있다는 것을 알고 있지만 10 개의 미니텔을 변형 시키므로 더 빠른 방법을 선호합니다!


MESS 프로젝트를 위해 가지고있는 Minitel에서 ROM을 덤프 할 수 있습니까? 이 하드웨어는 현재 언 펀딩되어 있으며 확실히 역사적으로 중요합니다.
sendmoreinfo

왜 안 돼요,하지만 어떻게해야할지 모르겠어요!
xavier.seignard

답변:


6

쉘이나 이와 비슷한 작업을 수행하려고한다고 가정합니다 (그렇지 않으면 X 라이브러리를 직접 사용하십시오). 그렇다면 xinput --test «device-name»구문 분석이 훨씬 쉬울 수 있습니다 .

불행히도, 실제로 쉘 스크립팅이 아닙니다. 그러나 당신은 그것을 사용할 수 있습니다 stdbuf. 당신이 그것을 죽일 때까지 실행되지만 쉘 스크립트는 그것을 파이프 할 수 read있습니다.

따라서 다음과 같이 할 수 있습니다.

stty -echo
stdbuf -oL xinput test 'AT Translated Set 2 keyboard' \
    | perl -nE 'BEGIN {$| = 1} m/^key press\s+(\d+)/ and say $1' \
    | for key in q w e r t y; do
         echo -n "Please press $key: "
         read -r keycode
         echo "key $key = $keycode"
    done
stty echo

"AT Translated Set 2 keyboard"대신 올바른 키보드 이름을 사용해야합니다. 당신은 그것을 찾을 수 있습니다 xinput list:

anthony@Zia:~$ xinput list
⎡ Virtual core pointer                          id=2    [master pointer  (3)]
⎜   ↳ Virtual core XTEST pointer                id=4    [slave  pointer  (2)]
⎜   ↳ Logitech USB-PS/2 Optical Mouse           id=8    [slave  pointer  (2)]
⎣ Virtual core keyboard                         id=3    [master keyboard (2)]
    ↳ Virtual core XTEST keyboard               id=5    [slave  keyboard (3)]
    ↳ Power Button                              id=6    [slave  keyboard (3)]
    ↳ Power Button                              id=7    [slave  keyboard (3)]
    ↳ AT Translated Set 2 keyboard              id=9    [slave  keyboard (3)]

불행히도 특정 장치를 사용해야합니다. 코어 키보드를 사용할 수 없습니다.

(또한 위의 xinput을 죽일 방법을 찾거나 모든 키를 입력했을 때 Control-C를 누르기 위해 콘텐츠를 작성해야하며 qwerty보다 많은 키를 나열하고 싶을 것입니다. )


감사합니다 derobert! 그것은 내 필요에 완벽하게 맞습니다! 내가 사용 id나는이 같은 이름을 가진 충돌이 있었기 때문에, 이름 대신 키보드를. 그래서 xinput test 1818 내 키보드의 ID입니다.
xavier.seignard

오래 실행되지 않는 명령으로 같은 작업을 수행 할 수있는 경우 (예 : 첫 번째 키를 누른 후 중지하고 키 코드를 반환하는 경우) 일종의 꿈이 될 것입니다. :
xavier.seignard

@ xavier.seignard 시도했지만 그 유틸리티를 찾을 수 없습니다. 그러나 xinput 소스를 가져 와서 그렇게 작동하게하는 것은 상당히 쉽습니다 ... 확인 test.c, 관련 기능이있는 것처럼 보입니다 print_events. 아마도 xorg는 n 개의 이벤트 후에 멈출 플래그를 추가하기 위해 패치를 취할 것 입니까?
derobert

@ xavier.seignard 방금 일종의 길을 가로 질러 ... xinput --query-state현재 상태를 제공하고 즉시 종료됩니다. 당신은 그것을 바쁘게 반복 할 수 있습니다.
derobert
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.