github.com/StackPointCloud/packer@v0.10.2-0.20180716202532-b28098e0f79b/builder/parallels/common/prltype.go (about) 1 package common 2 3 // Prltype is a Python scrypt allowin to send scancodes to the VM. It requires 4 // the module "prlsdkapi", which is bundled to Parallels Virtualization SDK. 5 const Prltype string = ` 6 import sys 7 import prlsdkapi 8 9 ## 10 def main(): 11 if len(sys.argv) < 3: 12 print "Usage: prltype VM_NAME SCANCODE..." 13 sys.exit(1) 14 15 vm_name = sys.argv[1] 16 scancodes = sys.argv[2:] 17 18 server = login() 19 vm, vm_io = connect(server, vm_name) 20 21 send(scancodes, vm, vm_io) 22 23 disconnect(server, vm, vm_io) 24 25 ## 26 def login(): 27 prlsdkapi.prlsdk.InitializeSDK(prlsdkapi.prlsdk.consts.PAM_DESKTOP_MAC) 28 server = prlsdkapi.Server() 29 login_job=server.login_local() 30 login_job.wait() 31 32 return server 33 34 ## 35 def connect(server, vm_name): 36 vm_list_job = server.get_vm_list() 37 result = vm_list_job.wait() 38 39 vm_list = [result.get_param_by_index(i) for i in range(result.get_params_count())] 40 vm = [vm for vm in vm_list if vm.get_name() == vm_name] 41 42 if not vm: 43 vm_names = [vm.get_name() for vm in vm_list] 44 raise Exception("%s: No such VM. Available VM's are:\n%s" % (vm_name, "\n".join(vm_names))) 45 46 vm = vm[0] 47 48 vm_io = prlsdkapi.VmIO() 49 vm_io.connect_to_vm(vm).wait() 50 51 return (vm, vm_io) 52 53 ## 54 def disconnect(server, vm, vm_io): 55 if vm and vm_io: 56 vm_io.disconnect_from_vm(vm) 57 58 if server: 59 server.logoff() 60 61 prlsdkapi.deinit_sdk 62 63 ## 64 def send(scancodes, vm, vm_io): 65 timeout = 10 66 consts = prlsdkapi.prlsdk.consts 67 68 for scancode in scancodes: 69 c = int(scancode, 16) 70 if (c < 128): 71 vm_io.send_key_event(vm, (c,), consts.PKE_PRESS, timeout) 72 else: 73 vm_io.send_key_event(vm, (c - 128,) , consts.PKE_RELEASE, timeout) 74 75 ## 76 if __name__ == "__main__": 77 main() 78 `