Traduza os códigos ascii para AT set 2 keyboard scancodes

4

Eu quero enviar alguns caracteres com o subcomando virtualbox controlvm keyboardputscancode . Os scancodes esperados pelo virtualbox são os scancodes de teclado do IBM PC AT 2, , que no meu caso não correspondem (sempre) aos scancodes mostrados por ex. showkey -s .

Idealmente, eu quero algo que eu possa incluir em um script bash, para que eu possa enviar strings arbitrárias para a máquina virtual como:

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

onde asc2sc seria meu script bash!

Existe um mapa de scancode para teclados "IBM AT Set 2", que eu poderia usar, sem gerar eu mesmo? Lamentavelmente, a Oracle é muito vaga sobre os detalhes.

    
por Don Question 19.12.2015 / 11:06

1 resposta

1

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.

    
por 20.12.2015 / 02:21