DF-5483 / mon_type.py
#!/usr/bin/env python3 """Type strings into the guest console via the QEMU human monitor sendkey.""" import socket import sys import time SOCK = "dfbsd-qemu/boot-mon.sock" SPECIAL = { ' ': 'spc', '.': 'dot', '/': 'slash', '-': 'minus', '_': 'shift-minus', ';': 'semicolon', '=': 'equal', } def esc(s): return s.replace('\\', '\\\\').replace('"', '\\"') def main(): lines = sys.argv[1:] s = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM) s.connect(SOCK) time.sleep(0.3) s.recv(65536) for line in lines: for ch in line: if ch.isupper(): key = 'shift-' + ch.lower() elif ch in SPECIAL: key = SPECIAL[ch] elif ch.isalnum(): key = ch.lower() else: key = ch s.sendall(('sendkey %s\n' % key).encode()) time.sleep(0.02) try: s.setblocking(False) s.recv(65536) except Exception: pass s.setblocking(True) time.sleep(0.01) s.sendall(b'sendkey ret\n') time.sleep(0.05) try: s.setblocking(False) s.recv(65536) except Exception: pass s.setblocking(True) time.sleep(0.8) s.close() if __name__ == '__main__': main() |