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

しかし、翻訳テーブルを構築するためにファイルを解析することはかなりの作業になり、まだ完了しているかどうかはわかりません。

おすすめ記事