I’m not crazy about the lack of a definitive package manager for OS X. I tried for about a day to work with Open Source on OS X, then I built an Ubuntu VM. I’ve been using ssh with X forwarding when I need a graphical interface; OS X has reasonable good built in support for X11. However, others have found that the keymap and meta keys are broken. While I got a kick out of “After some time I discovered that the number 8 is interpreted as Return,” I did need to log in to a guest to do some debugging.
The accepted solution to making Ctrl+Alt release keyboard focus correctly in the vncviewer spawned by virt-manager is to create a .Xmodmap file in your home directory with this content:
clear Mod1 keycode 66 = Alt_L keycode 69 = Alt_R add Mod1 = Alt_L add Mod1 = Alt_R
I killed the X server by focusing on it and choosing quit, and it seemed to be read the .Xmodmap file okay without my needing to restart the entire system.
The workaround for the broken keymap pointed me in the right direction, but I wasn’t happy with the solution. A little digging around the libvirt domain xml reference pointed out that you can add a keymap as an attribute to the vnc element in the domain xml definition. Use ‘virsh edit’ to edit the domain XML and modify the vnc line to add this attribute so it looks like so:
<graphics type='vnc' port='5900' autoport='yes' listen='127.0.0.1' keymap='en-us'/>
I destroyed the guest and restarted it and the keyboard worked now without any “8 is now enter” trickery. I’m pretty sure you can choose any keymap from
/usr/share/qemu/keymaps. If you use vmbuilder you will want to add this to
/etc/vmbuilder/libvirt/libvirtxml.tmpl as well.
Pingback: Learnings Nov 30th « Rubinauts Blog
Thanks for the tip! Definitely a better solution that all the ‘alias kvm’ methods I’ve seen.
I just wish this could be made the default keymap somehow. Seems silly to have to do this everytime I create a new guest via virt-manager.
If I had to do that a lot, I might look into hacking the schema file  or modifying the source. Really, the time should be taken to figure out under what circumstances this happens and produce an upstream fix rather than a workaround.
Great post. You guys are so helpful.
Thanks for posting this. You saved me a morning of screaming at OS X and Virt Manager.
I have just checked my domain XML configuration files on my Debian Squeeze kvm host and it seems that the behavior is a bug which has been introduced during the past 6 months. This occurred to me when trying to fix the XML configuration files of my domains according to your instructions and to my very surprise, domains that were installed around September 2010 were not missing the “keymap” line.
In fact, I have realized already a few weeks ago, that only new domains which I installed were affected by the problem. The old machines did have a proper layout. Thanks to your discovery I am now able to explain this and can confirm that the additional line fixes the problem.
I suggest reporting a regression bug upstream to virt-manager/libvirt at RedHat Bugzilla . I will check whether this has already been reported and, if not, write a bug report myself.
Thanks for the debugging,
The bit about the broken keymap is a fantastically useful bit of information — thanks for posting this.
I combine this with using XQuartz X11 2.6.1 and the preference to swap the ALT_L & ALT_R and Mode_Switch keys.
Pingback: Using virt-manager on MacOSX with Dvorak keyboard layout | Garion's blog
Thanks a ton for documenting this, I was really embarrassed by the dirty hacks.
That’s amazing thanks!
When you say “I destroyed the guest and restarted it” what process did you kill/restart? Or did you restart the virtual machine?
From the command line tool ‘virsh’ you run ‘destroy GUEST’ and ‘start GUEST’ to force-stop and restart it.
I am trying to connect via a UK using ssh -X firstname.lastname@example.org and then running virt-manager. I can send a cntrl-alt-delete having made the .Xmodmap file changes. However I cannot get the keyboard to work properly…specifically it will not send the ‘a’ character. Have set kvm to kvm -f eb-gb and still no joy.
Any ideas what else to try for a uk mac keyboard ?
Have also tryed changing tag to add keymap=eng-gb ..but still no joy
FAO David Herring; the problem, I found, is that the mac is using a US keyboard, even the UK ones, so if you follow the original advice and put in the US keymap, it works (well, did for me, snow leopard).
Thank you John C … You are absolutely right, en-uk does not work for a UK mac keyboard…you must use en-us.
All good now,
Somewhat related. Using Real VNCViewer I had to press Control_L+Option_L on a Mac OS X to release captured mouse pointer in virt-manager (tbh, took me a while to press Option_L instead of Alt_L and every single other option lol)
I tried a few other solutions that didn’t work. Yours did.
Addition of below line to xml file
and simply defining the domain again helped me. (undefine the domain not required since undefine may delete your xml file)