Advertisement
Guest User

Untitled

a guest
Aug 21st, 2016
286
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.36 KB | None | 0 0
  1. '''
  2. HOW TO USE:
  3. 1) Set up QMP via telnet (e.g. -qmp tcp:localhost:4444,server,nowait)
  4. 2) Set target address (usualy localhost) and target port (must be same with you QMP config string)
  5. 3) Assign this script to any hotkey.
  6. ???
  7. PROFIT!
  8. '''
  9.  
  10. target_addr = 'localhost'
  11. target_port = 4444
  12.  
  13. #target_addr = '192.168.1.1'
  14. #target_port = 23
  15.  
  16. #Set productID in add strings. Get it by converting lsusb IDs to dec.
  17. cmd_add_kbd = b'{ "execute": "device_add", "arguments": { "driver": "usb-host","productid": "257","id": "kbd" }}\n'
  18. cmd_add_mouse = b'{ "execute": "device_add", "arguments": { "driver": "usb-host","productid": "49740","id": "mouse" }}\n'
  19. cmd_del_kbd = b'{ "execute": "device_del", "arguments": { "id": "kbd" }}\n'
  20. cmd_del_mouse = b'{ "execute": "device_del", "arguments": { "id": "mouse" }}\n'
  21.  
  22. import telnetlib
  23.  
  24. error_list = {
  25.     0: "[ERR] Telnet sucessfully connected and got no valid QMP response. Wrong server?",
  26.     1: "[ERR] Wrong QMP response. Version mismatch?.",
  27.     2: "[ERR] Telnet connection failed. Check server address, port and server status.",
  28. }
  29.  
  30. def telnet_reader(tn):
  31.     data=' '
  32.     while (('\n' not in data) and ('ogin' not in data)):
  33.         data = tn.read_very_eager().decode('ascii')
  34. #    print(data) #debug
  35.     return(data)
  36.  
  37. def vm_checker ():
  38.     tn = telnetlib.Telnet()
  39.     try:
  40.         tn.open(target_addr,target_port)
  41.     except:
  42.         return(2)
  43.     else:
  44.         if '"QMP"' not in telnet_reader(tn):
  45.             tn.close()
  46.             return(0)
  47.         tn.write(b'{ "execute": "qmp_capabilities" }\n')
  48.         if '"return"' not in telnet_reader(tn):
  49.             tn.close()
  50.             return(1)
  51.         return(tn)
  52.        
  53. def vm_push_command (qmp_cmd,tn):
  54.     tn.write(qmp_cmd)
  55.     return(telnet_reader(tn))
  56.  
  57.    
  58. if __name__ == '__main__':
  59.     print('QMP virtual KVM-switch started.')
  60.     tn = vm_checker()
  61.     if type(tn) is int:
  62.         print(error_list.get(tn))
  63.     else:
  64.         if '"Duplicate ID' in vm_push_command(cmd_add_mouse,tn):
  65.             print('Mouse allready in VM, will delete it.')
  66.             vm_push_command(cmd_del_mouse,tn)
  67.             telnet_reader(tn)
  68.         if '"Duplicate ID' in vm_push_command(cmd_add_kbd,tn):
  69.             print('KBD allready in VM, will delete it.')
  70.             vm_push_command(cmd_del_kbd,tn)
  71.             telnet_reader(tn)
  72.         tn.close()
  73.     print('Done.')
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement