[supervisord] nodaemon=true user=chip logfile=/data/work/supervisord.log pidfile=/tmp/supervisord.pid childlogdir=/data/work loglevel=info ; Control socket in a chip-writable location so `supervisorctl status` ; works from inside the container (supervisord runs as non-root uid 1001). [unix_http_server] file=/tmp/supervisor.sock chmod=0700 [rpcinterface:supervisor] supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface [supervisorctl] serverurl=unix:///tmp/supervisor.sock [program:xvfb] command=/usr/bin/Xvfb :0 -screen 0 1920x1080x24 -ac +extension RANDR autorestart=true priority=10 stdout_logfile=/data/work/xvfb.log stderr_logfile=/data/work/xvfb.err [program:fluxbox] command=/usr/bin/fluxbox environment=DISPLAY=":0",HOME="/home/chip" autorestart=true priority=20 stdout_logfile=/data/work/fluxbox.log stderr_logfile=/data/work/fluxbox.err [program:x11vnc] command=/usr/bin/x11vnc -display :0 -forever -shared -noxdamage -rfbauth /home/chip/.vnc/passwd -rfbport 5900 autorestart=true priority=30 stdout_logfile=/data/work/x11vnc.log stderr_logfile=/data/work/x11vnc.err [program:novnc] command=/usr/bin/websockify --web /usr/share/novnc/ 6080 localhost:5900 autorestart=true priority=40 stdout_logfile=/data/work/novnc.log stderr_logfile=/data/work/novnc.err [program:ghidra] ; GUI project manager. Open the chip dump from here; the GhidraMCP plugin ; starts its REST server on 127.0.0.1:8080 once the CodeBrowser tool loads. ; NOTE: the `ghidraRun` wrapper hardcodes launch.sh "bg" mode, which daemonizes ; the JVM and exits 0 -- supervisor would then respawn it forever. So we call ; launch.sh "fg" directly so the JVM runs in the foreground and is tracked. ; We first wait for the X server to avoid an AWT connect race. command=bash -c 'for i in {1..60}; do [ -e /tmp/.X11-unix/X0 ] && break; sleep 0.5; done; exec /opt/ghidra/support/launch.sh fg jdk Ghidra "" "" ghidra.GhidraRun' directory=/data/work environment=DISPLAY=":0",HOME="/home/chip" autorestart=true startsecs=10 startretries=3 priority=50 stdout_logfile=/data/work/ghidra.log stderr_logfile=/data/work/ghidra.err [program:mcp-bridge] ; MCP-over-SSE bridge to the GhidraMCP REST API (reachable from host on 8081). command=/opt/venv/bin/python /opt/ghidramcp/bridge_mcp_ghidra.py --transport sse --mcp-host 0.0.0.0 --mcp-port 8081 --ghidra-server http://127.0.0.1:8080/ autorestart=true startsecs=3 priority=60 stdout_logfile=/data/work/mcp-bridge.log stderr_logfile=/data/work/mcp-bridge.err