ASCII 코드를 AT Setup 2 키보드 스캔 코드로 변환

ASCII 코드를 AT Setup 2 키보드 스캔 코드로 변환

하위 명령을 사용하여 몇 글자를 보내고 싶습니다 virtualbox controlvm keyboardputscancode. virtualbox에서 예상하는 스캔 코드는 다음과 같습니다.IBM PC AT 설정 2 키보드 스캔 코드, 내 경우에는 표시된 스캔 코드와 (항상) 일치하지 않습니다 showkey -s.

이상적으로는 bash 스크립트로 래핑하여 가상 머신에 임의의 문자열을 보낼 수 있는 것을 원합니다. 예를 들면 다음과 같습니다.

virtualbox controlvm <vm> keyboardputscancode $(asc2sc "My String here")

asc2sc내 bash 스크립트는 어디에 있습니까?

직접 생성하지 않고도 사용할 수 있는 "IBM AT Set 2" 키보드에 대한 스캔코드 매핑이 있습니까? 불행하게도 Oracle은 세부 사항에 대해 매우 모호합니다.

답변1

가상 머신에서 단일 키보드 레이아웃만 지원해야 하는 경우 가장 쉬운 방법은 스크립트에서 변환을 하드코딩하는 것입니다.

typeset -A scancodes
scancodes['1']='02 82'  # press 1, release 1
scancodes['!']='2a 02 82 aa'  # press left Shift, press 1, release 1, release left shift
# emit_scancodes VM STRING
emit_scancodes () {
  typeset a=; typeset c string="$2"
  while [ -n "$string" ]; do
    c=${scancodes[${string:0:1}]
    if [ -z "$c" ]; then
      echo >&2 "Unsupported character: ${string:0:1}"
      return 1
    fi
    a+=("$c")
    string=${string:1}
  done
  for c in "${a[@]}"; do
    virtualbox controlvm "$1" keyboardputscancode
    # For long strings, you may need an additional short sleep here
  done
}

다양한 키보드 레이아웃을 지원해야 하는 경우 Linux의 콘솔 키맵을 활용할 수 있습니다.Linux 콘솔 도구 데이터. 이 파일에는 다음과 유사한 줄이 포함되어 있습니다.

keycode 16 = q
keycode   2 = one              exclam

그러나 번역 테이블을 구축하기 위해 파일을 구문 분석하는 것은 상당한 작업이 될 것이며 아직 완료되었는지 확실하지 않습니다.

관련 정보