Revision 4f580fef lib/hypervisor/hv_kvm.py
b/lib/hypervisor/hv_kvm.py | ||
---|---|---|
137 | 137 |
_CTRL_DIR = _ROOT_DIR + "/ctrl" # contains instances control sockets |
138 | 138 |
_CONF_DIR = _ROOT_DIR + "/conf" # contains instances startup data |
139 | 139 |
_NICS_DIR = _ROOT_DIR + "/nic" # contains instances nic <-> tap associations |
140 |
_KEYMAP_DIR = _ROOT_DIR + "/keymap" # contains instances keymaps |
|
140 | 141 |
# KVM instances with chroot enabled are started in empty chroot directories. |
141 | 142 |
_CHROOT_DIR = _ROOT_DIR + "/chroot" # for empty chroot directories |
142 | 143 |
# After an instance is stopped, its chroot directory is removed. |
... | ... | |
177 | 178 |
hv_base.ParamInSet(False, constants.HT_KVM_VALID_DISK_TYPES), |
178 | 179 |
constants.HV_USB_MOUSE: |
179 | 180 |
hv_base.ParamInSet(False, constants.HT_KVM_VALID_MOUSE_TYPES), |
181 |
constants.HV_KEYMAP: hv_base.NO_CHECK, |
|
180 | 182 |
constants.HV_MIGRATION_PORT: hv_base.NET_PORT_CHECK, |
181 | 183 |
constants.HV_MIGRATION_BANDWIDTH: hv_base.NO_CHECK, |
182 | 184 |
constants.HV_MIGRATION_DOWNTIME: hv_base.NO_CHECK, |
... | ... | |
357 | 359 |
return utils.PathJoin(cls._InstanceNICDir(instance_name), str(seq)) |
358 | 360 |
|
359 | 361 |
@classmethod |
362 |
def _InstanceKeymapFile(cls, instance_name): |
|
363 |
"""Returns the name of the file containing the keymap for a given instance |
|
364 |
|
|
365 |
""" |
|
366 |
return utils.PathJoin(cls._KEYMAP_DIR, instance_name) |
|
367 |
|
|
368 |
@classmethod |
|
360 | 369 |
def _TryReadUidFile(cls, uid_file): |
361 | 370 |
"""Try to read a uid file |
362 | 371 |
|
... | ... | |
380 | 389 |
utils.RemoveFile(cls._InstanceMonitor(instance_name)) |
381 | 390 |
utils.RemoveFile(cls._InstanceSerial(instance_name)) |
382 | 391 |
utils.RemoveFile(cls._InstanceKVMRuntime(instance_name)) |
392 |
utils.RemoveFile(cls._InstanceKeymapFile(instance_name)) |
|
383 | 393 |
uid_file = cls._InstanceUidFile(instance_name) |
384 | 394 |
uid = cls._TryReadUidFile(uid_file) |
385 | 395 |
utils.RemoveFile(uid_file) |
... | ... | |
644 | 654 |
elif vnc_bind_address: |
645 | 655 |
kvm_cmd.extend(['-usbdevice', constants.HT_MOUSE_TABLET]) |
646 | 656 |
|
657 |
keymap = hvp[constants.HV_KEYMAP] |
|
658 |
if keymap: |
|
659 |
keymap_path = self._InstanceKeymapFile(instance.name) |
|
660 |
# If a keymap file is specified, KVM won't use its internal defaults. By |
|
661 |
# first including the "en-us" layout, an error on loading the actual |
|
662 |
# layout (e.g. because it can't be found) won't lead to a non-functional |
|
663 |
# keyboard. A keyboard with incorrect keys is still better than none. |
|
664 |
utils.WriteFile(keymap_path, data="include en-us\ninclude %s\n" % keymap) |
|
665 |
kvm_cmd.extend(["-k", keymap_path]) |
|
666 |
|
|
647 | 667 |
if vnc_bind_address: |
648 | 668 |
if netutils.IP4Address.IsValid(vnc_bind_address): |
649 | 669 |
if instance.network_port > constants.VNC_BASE_PORT: |
Also available in: Unified diff