Xvfb died. Check and restart:
systemctl --user status computer-use.service
systemctl --user restart computer-use.service
bash scripts/display.sh statusIf display.sh status shows everything down even after restart, tail the log:
journalctl --user -u computer-use.service -n 50
cat /tmp/hermes-computer-use/xvfb.logCommon cause: another process is bound to 127.0.0.1:8765 (or your CU_DISPLAY port). WSL's wslrelay is the usual culprit. Change CU_DISPLAY or kill the offender.
Look for zygote_communication_linux.cc:291 in chrome.log. Fix in order:
- Make sure
--no-sandbox --disable-dev-shm-usageare both present (they are by default). - Wipe the profile:
rm -rf $CU_STATE_DIR/chrome-profile. - If you use nohup-style launchers, replace with
setsid -f. WSL's default shell teardown kills nohup children.
x11vnc is probably connected to a WSLg Wayland session, not Xvfb :99. Fix:
unset WAYLAND_DISPLAY XDG_RUNTIME_DIR XDG_SESSION_TYPEscripts/display.sh already does this. If you start x11vnc manually, unset first.
Windows PATH leaking into WSL subshell. Use exec or prefix with PATH=/usr/bin:/bin:
exec /path/to/python script.pyEnable linger so systemd user services survive logout:
sudo loginctl enable-linger $USER
loginctl show-user $USER | grep Linger # Linger=yesVision model grounding error. Not a bug in the stack. Mitigations:
- Ask the model to re-screenshot and verify before committing the click.
- Prefer larger click targets early in an automation.
- For tiny sliders, use
dragwithsteps=40so intermediate positions stabilize. - Consider adding AT-SPI accessibility tree as a side channel (not included here).
The Google result is IP-based reputation, not behavioural. Your WSL NAT IP is shared with other cloud tenants. Mitigations:
- Run the request through a residential proxy.
- Prewarm cookies: interactively log in via VNC once, then let the persisted Chrome profile (
CU_PROFILE_DIR) carry cookies.
Harder than Google. Try:
- Switch input:
CU_INPUT=ydotool— kernel-level HID usually passes. - Let the page idle for 3–5 seconds before any action (CF looks at first-paint interaction timing).
- Avoid absolute-instant cursor moves: keep
human=True.
- Confirm the service is up:
systemctl --user status novnc.service. - Confirm port from WSL:
curl -I http://localhost:6080/vnc.html→ 200 expected. - From Windows, try
http://<wsl-ip>:6080/vnc.htmliflocalhostrefuses (firewall edge cases). - Canvas scaling: open the noVNC gear icon → Scaling Mode → Local Scaling.
Open https://bot.sannysoft.com via the stack and screenshot. WebDriver, Chrome runtime, permissions, plugins, languages — should all be green. If any flip red compared to a vanilla headed Chrome, that's a leak to investigate.