Troubleshooting
pair says it can’t reach serve
Error: connecting to serve's control socket "…/rex-iroh/control.sock"
Caused by:
No such file or directory (os error 2)
No serve is running with the same state directory. If you run serve as a
service, check that the service and your shell agree on REX_IROH_DIR.
serve can’t find Rex
Error: no Rex server listening at: "/path/to/server.sock"
Start Rex, or pass the right socket with --rex-server. If serve couldn’t
find a socket at all, the error lists everything it tried, in the order it
searches.
serve says it isn’t online
not online after 10s; the ticket may lack a relay address
serve couldn’t reach iroh’s relay servers, so other devices may not be able
to reach it with the ticket it printed. Check this machine’s internet
connection, and whether a firewall blocks outgoing UDP or HTTPS.
rex says there’s no server at the connect socket
Error: no Rex server is running at /home/you/.rex-desktop.sock. …
connect isn’t running, so nothing is listening on that socket. Look at the
terminal where you started connect, or its log if you run it as a service
(journalctl --user -u rex-iroh-connect). Check that rex-iroh peers joined
lists the issuer with the socket you’re using.
rex gets disconnected right away
If connect’s log shows one of these, the issuer turned this device away:
WARN rex_iroh: desktop: denied by peer: c33be3af…; each new client tries again
WARN rex_iroh: revoked by peer: c33be3af…
connect with no arguments keeps the issuer’s socket, and tries the issuer
again for each new client. connect with --socket exits instead.
denied means this device isn’t on the issuer’s allowlist. If you ran join
with a different state directory or REX_IROH_DIR than connect, run
connect with the one you joined with. Otherwise the issuer removed this
device while it wasn’t connected, and you’ll need to pair again.
revoked means the issuer revoked this device while it was connected. Pair
again to get back in. A running connect with no arguments picks the issuer
back up by itself once it lets this device in, and logs admitted again.
connect says another one is running
Error: another `rex-iroh connect` is already serving "…/rex-iroh/sockets"
Only one connect without arguments can serve a state directory. Stop the
other one, or check whether it’s already running as a service.
rex hangs, then gets disconnected
connect is running, but it can’t get anything through to the issuer’s Rex
server. connect’s log says which part failed:
WARN rex_iroh::tunnel: opening stream to peer error=dialing c33be3af… error.sources=[timed out, …]
means connect couldn’t reach the issuer at all, typically after about 30
seconds. Check that serve is running there and that the issuer is online.
connect keeps its socket open and reaches the issuer again once it’s back, so
there’s no need to restart it.
If the connection closes right away instead, the issuer may be up but unable to
reach Rex. Its serve log then shows
WARN connecting to Rex at …: Connection refused; start Rex on the issuer.
join waits the same way when the issuer is unreachable, so if it prints the
five words and then nothing happens, check serve on the issuer.
join couldn’t add the Rex host
couldn't add Rex host desktop: no Rex binary found (tried: "rex", …)
add it yourself with: rex hosts add desktop unix:///…/sockets/desktop-695cc6e6d2.sock
The pairing worked and the issuer is saved; only the Rex host is missing. Run the printed command once Rex is installed or working.
no Rex server running here, and rex-iroh doesn't start one means just that:
rex-iroh never has Rex start a server. Start Rex, or run the printed command,
which starts one as Rex usually does. If the error quotes Rex
itself, such as `rex hosts --json` said "…", that’s Rex’s own complaint.
If the host already exists, use rex hosts edit desktop --endpoint … instead,
repeating each endpoint it already has, since --endpoint replaces them all.
The invite is rejected
Whatever the reason, run rex-iroh pair again for a new invite.
rejected: bad_secret also shows up if serve restarted after printing the
invite, or if the invite expired more than an hour ago.
rejected: declined means someone answered no at the issuer’s prompt.
rejected: used, when you didn’t use the invite yourself, means someone else
had a copy and used it first. If the issuer accepted them, revoke that device
with rex-iroh peers revoke.
The socket path is too long
Error: socket path of 136 bytes is too long (max 103): "…"
Choose a shorter --socket path, such as one directly in your home directory.
The limit also applies to the state directory, since serve creates
control.sock inside it.
join checks the socket connect will use for the issuer before pairing:
Error: the socket for desktop would be 112 bytes, over the limit of 103: "…"; pick a shorter --host name, or a --state-dir with a shorter path
Pick a shorter name, or point REX_IROH_DIR at a directory with a shorter
path. The state directory has to be the same for join and connect.