aboutsummaryrefslogtreecommitdiff
path: root/vnc.py
diff options
context:
space:
mode:
Diffstat (limited to 'vnc.py')
-rw-r--r--vnc.py32
1 files changed, 32 insertions, 0 deletions
diff --git a/vnc.py b/vnc.py
new file mode 100644
index 0000000..066eda1
--- /dev/null
+++ b/vnc.py
@@ -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},
+ }