rustdesk/pynput_service.py
2022-03-06 03:10:16 +08:00

44 lines
1008 B
Python

from pynput.keyboard import Controller
import os
import sys
import socket
keyboard = Controller()
server_address = sys.argv[1]
if not os.path.exists(os.path.dirname(server_address)):
os.makedirs(os.path.dirname(server_address))
try:
os.unlink(server_address)
except OSError:
if os.path.exists(server_address):
raise
server = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
server.bind(server_address)
server.listen(1)
clientsocket, address = server.accept()
print("Got pynput connection")
buf = []
while True:
data = clientsocket.recv(1024)
if not data:
print("Connection broken")
break
buf.extend(data)
n = buf[0]
n = n + 1
if len(buf) >= n:
msg = bytearray(buf[1:n]).decode("utf-8")
if len(msg) != 2:
print("Wrong message")
break
if msg[0] == "p":
keyboard.press(msg[1])
else:
keyboard.release(msg[1])
buf = buf[n:]
clientsocket.close()
server.close()