diff options
| author | Jonathan Weth <git@jonathanweth.de> | 2020-07-20 16:55:07 +0200 |
|---|---|---|
| committer | Jonathan Weth <git@jonathanweth.de> | 2020-07-20 16:55:07 +0200 |
| commit | 79f419d79c50ddca09209404d0cbc2d3b4f33429 (patch) | |
| tree | 8c307b61b22a246b93257b9aea56991c4e57bbd4 /vnc.py | |
| parent | d7dd6a69cdd55439e19a5d6f1bcc2f241e608710 (diff) | |
| download | RWA.Support.SessionService-79f419d79c50ddca09209404d0cbc2d3b4f33429.tar.gz RWA.Support.SessionService-79f419d79c50ddca09209404d0cbc2d3b4f33429.tar.bz2 RWA.Support.SessionService-79f419d79c50ddca09209404d0cbc2d3b4f33429.zip | |
Implement basic session daemon
Diffstat (limited to 'vnc.py')
| -rw-r--r-- | vnc.py | 32 |
1 files changed, 32 insertions, 0 deletions
@@ -0,0 +1,32 @@ +import os +import subprocess +from typing import Dict +from uuid import uuid4 + +import port_for + + +def save_password(pw: str) -> str: + """Save password in x11vnc format in temporary directory.""" + filename = f"/tmp/rwa/{uuid4()}.pw" + os.makedirs("/tmp/rwa/", exist_ok=True) + p = subprocess.Popen(["x11vnc", "-storepasswd", f"{pw}", filename]) + p.communicate() + return filename + + +def run_vnc(pw_filename: str) -> Dict[str, Dict[str, int]]: + """Run x11vnc and websockify with random, unique ports in background.""" + port = port_for.select_random() + port_vnc = port_for.select_random() + + # Start VNC process + p = subprocess.Popen(["x11vnc", "-rfbauth", pw_filename, "-rfbport", f"{port_vnc}"]) + + # Start websockify + p2 = subprocess.Popen(f"websockify {port} 127.0.0.1:{port_vnc}", shell=True,) + + return { + "ws": {"pid": p2.pid, "port": port}, + "vnc": {"port": port_vnc, "pid": p.pid}, + } |
