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  `