
サブコマンドを使用していくつかの文字を送信したいと思います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
しかし、翻訳テーブルを構築するためにファイルを解析することはかなりの作業になり、まだ完了しているかどうかはわかりません。