Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- '''
- HOW TO USE:
- 1) Set up QMP via telnet (e.g. -qmp tcp:localhost:4444,server,nowait)
- 2) Set target address (usualy localhost) and target port (must be same with you QMP config string)
- 3) Assign this script to any hotkey.
- ???
- PROFIT!
- '''
- target_addr = 'localhost'
- target_port = 4444
- #target_addr = '192.168.1.1'
- #target_port = 23
- #Set productID in add strings. Get it by converting lsusb IDs to dec.
- cmd_add_kbd = b'{ "execute": "device_add", "arguments": { "driver": "usb-host","productid": "257","id": "kbd" }}\n'
- cmd_add_mouse = b'{ "execute": "device_add", "arguments": { "driver": "usb-host","productid": "49740","id": "mouse" }}\n'
- cmd_del_kbd = b'{ "execute": "device_del", "arguments": { "id": "kbd" }}\n'
- cmd_del_mouse = b'{ "execute": "device_del", "arguments": { "id": "mouse" }}\n'
- import telnetlib
- error_list = {
- 0: "[ERR] Telnet sucessfully connected and got no valid QMP response. Wrong server?",
- 1: "[ERR] Wrong QMP response. Version mismatch?.",
- 2: "[ERR] Telnet connection failed. Check server address, port and server status.",
- }
- def telnet_reader(tn):
- data=' '
- while (('\n' not in data) and ('ogin' not in data)):
- data = tn.read_very_eager().decode('ascii')
- # print(data) #debug
- return(data)
- def vm_checker ():
- tn = telnetlib.Telnet()
- try:
- tn.open(target_addr,target_port)
- except:
- return(2)
- else:
- if '"QMP"' not in telnet_reader(tn):
- tn.close()
- return(0)
- tn.write(b'{ "execute": "qmp_capabilities" }\n')
- if '"return"' not in telnet_reader(tn):
- tn.close()
- return(1)
- return(tn)
- def vm_push_command (qmp_cmd,tn):
- tn.write(qmp_cmd)
- return(telnet_reader(tn))
- if __name__ == '__main__':
- print('QMP virtual KVM-switch started.')
- tn = vm_checker()
- if type(tn) is int:
- print(error_list.get(tn))
- else:
- if '"Duplicate ID' in vm_push_command(cmd_add_mouse,tn):
- print('Mouse allready in VM, will delete it.')
- vm_push_command(cmd_del_mouse,tn)
- telnet_reader(tn)
- if '"Duplicate ID' in vm_push_command(cmd_add_kbd,tn):
- print('KBD allready in VM, will delete it.')
- vm_push_command(cmd_del_kbd,tn)
- telnet_reader(tn)
- tn.close()
- print('Done.')
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement