2012-02-22 1 views
9

Я хочу взаимодействовать с Virtualbox-VM, чтобы выполнить автоматическую установку Virtualbox-Guest-дополнений. Поэтому я должен отправить нажатия клавиш на виртуальную машину. Я могу сделать это с помощью VBoxManage-API, где я отправить шестигранный Scancode к VM:Получить клавиатурный scancode char

# sends "b" to the VM 
VBoxManage controlvm "$VMNAME" keyboardputscancode <HEX> 

Теперь я хочу, чтобы послать полную команду на виртуальную машину, как:

mount /dev/scd0 /media/cdrom0<Enter> 

Поэтому я должен преобразовать каждый символ этой строки в scancode и отправить его на виртуальную машину с помощью VBoxManage.

Как преобразовать эти символы в соответствующие клавиатурные сканноды в Linux? Моя виртуальная машина имеет такое же сопоставление клавиатуры, что и мой хост. Я ищу что-то, что я могу использовать следующим образом:

$ getscancode n 
> 31 

?

+0

Я только что нашел 'showkey -s', который дает мне правильный scancode. Но это работает только в терминале вне моего диспетчера окон, иначе я получаю 'Не могу получить файловый дескриптор, ссылающийся на консоль'. – ifischer

+1

'xev' предоставит необходимую вам информацию, но не в таком аккуратном формате, как' showkey -s' (поэтому я не решаюсь дать ему ответ). Вам нужно будет поместить курсор в черный ящик, затем введите нужные ключи. –

+0

См. Также [Перевести коды ascii на AT set 2 клавиатуры scancodes] (http://unix.stackexchange.com/questions/250377/translate-ascii-codes-to-at-set-2-keyboard-scancodes) – Gilles

ответ

5

showkey --ascii, похоже, работает для most keys, и он действительно работает в моем терминале GNOME.

+1

это только работает в интерактивном режиме. Я хочу получить keychar из сценария, поэтому я могу назвать что-то вроде 'getscancode n'. – ifischer

+1

showkey -ascii либо не сообщает о правильных scancodes в моем случае, либо не сообщает об этом вообще, просто глифам ascii, октальном псевдоскане и ключевом коде –