| #!/bin/bash |
| |
| |
| |
| |
| set -euo pipefail |
|
|
| log() { echo "[VNC] $*"; } |
|
|
| mkdir -p /data/vnc |
| mkdir -p /data/home/.vnc |
|
|
| |
| VNC_LINK=/data/home/.vnc |
| if [ -d "$VNC_LINK" ] && [ ! -L "$VNC_LINK" ]; then |
| cp -rn "$VNC_LINK/." /data/vnc/ 2>/dev/null || true |
| rm -rf "$VNC_LINK" |
| fi |
| if [ ! -L "$VNC_LINK" ]; then |
| ln -sf /data/vnc "$VNC_LINK" |
| log "Symlinked ~/.vnc β /data/vnc" |
| fi |
|
|
| |
| if [ -n "${VNC_PASSWORD:-}" ]; then |
| echo "$VNC_PASSWORD" | vncpasswd -f > /data/vnc/passwd |
| chmod 600 /data/vnc/passwd |
| log "VNC password set" |
| else |
| |
| rm -f /data/vnc/passwd |
| log "VNC running in no-password mode (localhost-only, proxied via nginx)" |
| fi |
|
|
| |
| cat > /data/vnc/xstartup << 'XSTARTUP' |
| |
| |
|
|
| unset SESSION_MANAGER |
| unset DBUS_SESSION_BUS_ADDRESS |
|
|
| export DISPLAY=:1 |
| export HOME=/data/home |
| export USER=ubuntu |
| export XDG_CONFIG_HOME=/data/home/.config |
| export XDG_DATA_HOME=/data/home/.local/share |
| export XDG_CACHE_HOME=/data/cache |
| export XDG_RUNTIME_DIR=/tmp/runtime-ubuntu |
| export LANG=en_US.UTF-8 |
|
|
| |
| mkdir -p /tmp/runtime-ubuntu |
| chmod 700 /tmp/runtime-ubuntu |
|
|
| |
| xsetroot -solid "#1a1a2e" 2>/dev/null || true |
|
|
| |
| exec dbus-launch --exit-with-session startxfce4 |
| XSTARTUP |
| chmod +x /data/vnc/xstartup |
|
|
| |
| touch /data/logs/xvnc.log |
| touch /data/logs/xfce4.log |
|
|
| |
| chown -R ubuntu:ubuntu /data/vnc /data/home/.vnc 2>/dev/null || true |
|
|
| log "VNC configuration ready." |
|
|