Get keyboard scancode of char
Asked Answered
P

1

9

I want to interact with a Virtualbox-VM to do an unattended install of Virtualbox-Guest-Additions. Therefore I have to send keystrokes to the VM. I'm able to do this by using the VBoxManage-API, where I send the HEX of the scancode to the VM:

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

Now I want to send a complete command to the VM, like:

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

So I have to convert every single char of that string into a scancode and send it to the VM by using VBoxManage.

How do I convert these chars to the corresponding keyboard scancodes on Linux? My VM has the same keyboard mapping like my host. I'm looking for something I can use like that:

$ getscancode n
> 31

?

Portraitist answered 22/2, 2012 at 13:13 Comment(3)
I just found showkey -s, which gives me the correct scancode. But that only works in a Terminal outside of my Window Manager, Otherwise I get Couldn't get a file descriptor referring to the console.Portraitist
xev will provide the information you need, but not in such a neat format as showkey -s (so I'm hesitant to give it as an answer). You will need to put the cursor into the black box, then type the keys you need.Torhert
See also Translate ascii codes to AT set 2 keyboard scancodesHarner
C
6

showkey --ascii seems to work for most keys, and it does work in my GNOME Terminal.

Cheng answered 19/3, 2012 at 14:30 Comment(2)
this only works in an interactive mode. I want to get the keychar from within a script, so i can call something like getscancode n.Portraitist
showkey --ascii does either not report the correct scancodes in my case, or doesn't report them at all, just ascii glyph, octal pseudo scancode and keycodeSuhail

© 2022 - 2024 — McMap. All rights reserved.