#!/usr/bin/env bash set -euo pipefail RDP_HOST="${RDP_HOST:-}" RDP_PORT="${RDP_PORT:-3389}" RDP_USER="${RDP_USER:-}" RDP_PASSWORD="${RDP_PASSWORD:-}" RDP_DOMAIN="${RDP_DOMAIN:-}" RDP_SECURITY="${RDP_SECURITY:-}" SESSION_ID="${SESSION_ID:-unknown}" IDLE_TIMEOUT="${IDLE_TIMEOUT:-1800}" ENABLE_HEARTBEAT="${ENABLE_HEARTBEAT:-1}" TOUCH_PATH="${TOUCH_PATH:-/api/sessions/${SESSION_ID}/touch}" SCREEN_GEOMETRY="${SCREEN_GEOMETRY:-1920x1080x24}" DISPLAY_NUM="${DISPLAY_NUM:-:1}" mkdir -p /opt/portal cp -r /usr/share/novnc/* /opt/portal/ cat > /opt/portal/index.html < RDP Session
Ожидайте...
HTML export DISPLAY="$DISPLAY_NUM" DISPLAY_N="${DISPLAY_NUM#:}" rm -f "/tmp/.X${DISPLAY_N}-lock" "/tmp/.X11-unix/X${DISPLAY_N}" 2>/dev/null || true Xvfb "$DISPLAY_NUM" -screen 0 "$SCREEN_GEOMETRY" >/tmp/xvfb.log 2>&1 & XVFB_PID=$! sleep 1 x11vnc -display "$DISPLAY_NUM" -rfbport 5900 -forever -shared -nopw -noxdamage >/tmp/x11vnc.log 2>&1 & X11VNC_PID=$! websockify --verbose --idle-timeout="$IDLE_TIMEOUT" --web=/opt/portal 6080 localhost:5900 >/tmp/websockify.log 2>&1 & WEBSOCKIFY_PID=$! python3 /manager.py >/tmp/manager.log 2>&1 & MANAGER_PID=$! cleanup() { python3 -c " import urllib.request, sys try: urllib.request.urlopen('http://localhost:7001/disconnect', b'', timeout=3) except Exception as e: sys.stderr.write(str(e) + '\n') " 2>/dev/null || true kill "$X11VNC_PID" "$WEBSOCKIFY_PID" "$MANAGER_PID" "$XVFB_PID" 2>/dev/null || true exit 0 } trap cleanup TERM INT wait "$WEBSOCKIFY_PID" || true cleanup