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

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.