#!/usr/bin/env bash set -euo pipefail RDP_HOST="${RDP_HOST:?RDP_HOST is required}" 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" Xvfb "$DISPLAY_NUM" -screen 0 "$SCREEN_GEOMETRY" >/tmp/xvfb.log 2>&1 & sleep 1 RDP_ARGS=( "/v:${RDP_HOST}:${RDP_PORT}" "/cert:ignore" "/f" "/dynamic-resolution" "/gfx-h264:avc444" "/network:auto" "+clipboard" ) if [ -n "$RDP_SECURITY" ]; then RDP_ARGS+=("/sec:${RDP_SECURITY}") fi if [ -n "$RDP_USER" ]; then RDP_ARGS+=("/u:${RDP_USER}") fi if [ -n "$RDP_PASSWORD" ]; then RDP_ARGS+=("/p:${RDP_PASSWORD}") fi if [ -n "$RDP_DOMAIN" ]; then RDP_ARGS+=("/d:${RDP_DOMAIN}") fi xfreerdp "${RDP_ARGS[@]}" >/tmp/xfreerdp.log 2>&1 & x11vnc -display "$DISPLAY_NUM" -rfbport 5900 -forever -shared -nopw -noxdamage >/tmp/x11vnc.log 2>&1 & exec websockify --verbose --idle-timeout="$IDLE_TIMEOUT" --web=/opt/portal 6080 localhost:5900