Persistent virtual display + VNC for headless servers — OAuth, CAPTCHA, 2FA browser interactions.
npx claudepluginhub 3d-stories/vnc-servicePersistent virtual display + VNC for headless servers — OAuth, CAPTCHA, 2FA browser interactions.
Persistent virtual display + VNC server for headless Linux servers. Enables browser-based auth flows (OAuth, CAPTCHA, 2FA) on machines without a physical monitor.
Many developer tools need browser interaction that is impossible on headless servers:
notebooklm login)Without a display, these tools either fail silently or crash with "No X-Server detected."
This plugin installs a persistent virtual display (Xvfb) + VNC server (x11vnc) as systemd user services:
Xvfb on :99 (virtual display, 1280x1024)
└── x11vnc on port 5999 (all interfaces, password auth)
└── Access restricted by ufw firewall (LAN only)
└── VNC client connects from local network
└── Any browser with DISPLAY=:99 renders here
Once set up, it starts on boot and runs permanently. Any tool that needs a browser just
sets DISPLAY=:99.
Remove any stale marketplace entry, add fresh, install, and reload:
claude plugin marketplace remove vnc-service
claude plugin marketplace add 3D-Stories/vnc-service
claude plugin install vnc-service@vnc-service
Then reload plugins in your session:
/reload-plugins
/vnc-service:setupOne-time install and configuration. Idempotent -- asks before overwriting existing service files or VNC passwords.
apt-get install
commands for the user to run manually~/.vnc/passwd (chmod 600). Asks before
overwriting an existing password.virtual-display.service and vnc-server.service.
Asks before overwriting existing service files (idempotency guard).
ExecStartPre that waits up to 15 seconds
for display :99 to become ready before x11vnc starts. This prevents the race where
x11vnc launches before Xvfb has initialized.0.0.0.0), not localhost. Access is restricted by ufw
firewall rules (Step 6b), not by binding address.loginctl enable-linger for
services to persist without an active login session. Warns if lingering fails (common in
containers and WSL).LAN_CIDR=$(ip -4 addr show | grep 'inet ' | grep -v '127.0.0.1' | head -1 | awk '{print $2}' | sed 's|\.[0-9]*/|.0/|')
sudo ufw allow from "$LAN_CIDR" to any port 5999 proto tcp
If ufw is not available, warns that port 5999 is accessible from any network and suggests
installing ufw or configuring the firewall manually./vnc-service:runEnsure running and print connection info. Call before any browser operation.
/vnc-service:setup if not)/vnc-service:stopStop services to free resources.
/vnc-service:run/vnc-service:statusHealth check and diagnostics.
If your skill needs browser interaction on a headless server, declare vnc-service as a prerequisite:
Harness-native ECC skills, hooks, rules, MCP conventions, and operator workflows
Claude Code marketplace entries for the plugin-safe Antigravity Awesome Skills library and its compatible editorial bundles.
Production-ready workflow orchestration with 84 marketplace plugins, 192 local specialized agents, and 156 local skills - optimized for granular installation and minimal token usage