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