Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Troubleshooting

Start with rdc doctor on the machine being controlled. It checks each layer in order and says which one failed.

Daemon won’t start

MessageMeaningFix
allowlist is emptyno --allow and no [serve].allowadd at least one entry
X is not a Tailscale address; refusing--bind or config points at a LAN/public IPbind the Tailscale IP or leave bind unset
tailscaled unreachable / no Tailscale IPTailscale not running or not logged intailscale status; on macOS make sure the Tailscale app is running in the same user session
bind … Address already in useanother rdc or something else on 7770--port

Client can’t connect

SymptomCauseFix
connection refused / timeoutdaemon not running, wrong host, you’re not on the tailnet, or the Tailscale policy blocks tcp/7770tailscale ping HOST; check rdc service status on the target; add a policy rule for tcp:7770 (see Configuration)
403 … is not in the allowlistwhois succeeded but you’re not allowedadd your login/node/tag; rdc -t HOST whoami shows what the daemon sees once allowed, the 403 message shows it when not
403 … is not a Tailscale addressrequest arrived from a non-tailnet IPuse the Tailscale hostname or 100.x address
403 forbidden: … may not use \input``your grant is limited to some capabilitieswiden can in the grant on the daemon side; rdc -t HOST whoami shows your caps
403 loopback connections are not acceptedyou’re on the same machineuse --target local, or start the daemon with --dev-loopback for testing
421 request addressed to unexpected hostthe URL uses a name the daemon doesn’t recognise as itselfuse the Tailscale MagicDNS name or IP, or add the name to [serve].hosts
400 point (…) is outside the desktopcoordinates beyond the displayscheck rdc displays; with MCP, take a fresh screenshot
400 scroll steps must be within ±100scroll amount too largescroll in smaller steps

Screenshots

SymptomCauseFix
macOS: image is only the wallpaper, windows lists 1 entryScreen Recording not granted to this exact buildmacOS setup: re-grant, tccutil reset, avoid ad-hoc signing
macOS: screenshots take many secondsscreencapture failed and rdc fell back to CoreGraphicscheck the daemon log for screencapture failed; usually a permission problem
Wayland: xcap: … errorno portal backend or screencopy supportinstall xdg-desktop-portal-<compositor>; on GNOME the portal Screenshot dialog may need approving once
black image on X11compositor/driver quirktry --display primary

Input

SymptomCauseFix
macOS: permission denied: Accessibility or clicks do nothingAccessibility not grantedgrant to rdc.app, restart daemon
Wayland: no way to move the mousecompositor lacks the wlr virtual pointer protocol (GNOME, KDE)not supported yet; capture works, input does not (issue #2)
clicks land in the wrong placecoordinates from a stale or differently sized screenshot; or CLI given image pixels instead of desktop pointstake a new screenshot; use rdc mcp, or convert as in CLI reference
key: "foo" is not a modifiertypo in the chordsee the chord grammar in the CLI reference
Windows: input ignored or focus refused for an elevated appUIPI; the daemon runs at standard integrity by defaultclose the elevated window, or reinstall with rdc service install --elevated if you accept a permanently elevated daemon
Windows: doctor shows a 1024×768 “WinDisc” display and screenshots failyou’re in an SSH or service session (session 0)run the daemon via rdc service install; test from the client machine

MCP

SymptomFix
Claude Code shows the server as failedrun rdc mcp --target NAME in a terminal; it should sit waiting on stdin with no errors. Common causes: rdc not on PATH, unknown target name, config parse error
tools work but images are huge/slowrdc mcp --max 1200
the agent clicks the wrong thing after a screenshot with a custom maxthe skill tells agents to click from the latest image; remind it

Logs

  • Daemon: RDC_LOG=debug rdc serve … (foreground); service logs are in journalctl --user -u dev.rdc.daemon (Linux) or ~/Library/Application Support/rdc/serve.log (macOS).
  • Every request is logged with the resolved identity; rejections are logged at warn.
  • The audit log has one line per request or rejection: rdc audit -n 100 on the daemon machine.
  • Client and MCP: --log debug or RDC_LOG=debug; goes to stderr, so it won’t corrupt MCP stdio.