AkurAI Build
Menu

cosmic-mobile

public

Latest change cb68227a325db6add2ab97a789a6c02933414d37 - Add VM capture and correct cloud root partition by AkurAI Build

#!/usr/bin/env python3
"""Local VM screenshot/input; Unix socket only."""
import json
import socket
import sys
from pathlib import Path

with socket.socket(socket.AF_UNIX) as sock:
    sock.settimeout(15)
    sock.connect(str(Path(__file__).resolve().parent / 'runtime/qmp.sock'))
    stream = sock.makefile('rwb')
    def call(name, args=None):
        stream.write((json.dumps({'execute': name, 'arguments': args or {}})+'\n').encode())
        stream.flush()
        while True:
            reply = json.loads(stream.readline())
            if 'error' in reply:
                raise RuntimeError(reply['error'])
            if 'return' in reply:
                return reply['return']
    json.loads(stream.readline())
    call('qmp_capabilities')
    if sys.argv[1] == 'shot':
        print(call('screendump', {'filename': str(Path(sys.argv[2]).resolve()), 'format': 'png'}))
    elif sys.argv[1] == 'key':
        print(call('human-monitor-command', {'command-line': 'sendkey '+sys.argv[2]}))
    elif sys.argv[1] == 'status':
        print(call('query-status'))
    elif sys.argv[1] == 'stop':
        print(call('quit'))
    else:
        raise SystemExit('shot PATH | key QCODE | status | stop')