Se você só precisa dar suporte a um único layout de teclado na VM, seria mais simples codificar a conversão em seu script.
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
}
Se você precisar oferecer suporte a vários layouts de teclado, aproveite os mapas de teclado do console do Linux nos dados das Ferramentas do console do Linux . Esses arquivos contêm linhas como
keycode 16 = q
keycode 2 = one exclam
No entanto, analisar os arquivos para criar tabelas de conversão seria uma quantidade não trivial de trabalho, e não estou ciente de que isso foi feito.