Connection Issues
lager hello fails with 'No route to host'
lager hello fails with 'No route to host'
- Verify your VPN is connected: run
tailscale statusand confirm your Lager Box appears in the list. - Check the IP address is correct: run
lager boxesto see your saved box IPs. - If using Tailscale, try
ping <box-ip>to verify network connectivity. - Ensure the Lager Box is powered on and connected to the network.
lager hello fails with 'Connection refused'
lager hello fails with 'Connection refused'
- If the Docker container on the box stopped, ask your administrator to restart it.
- Run
lager hello --box <box>to check the box’s service status. - If you have SSH access, connect to the box and check Docker:
docker ps | grep lager. - If nobody set the machine up as a Lager Box, see Setting Up a Lager Box.
lager hello fails with 'Connection timed out'
lager hello fails with 'Connection timed out'
- Double-check the IP address with
lager boxes. - A box that moved or changed provisioning can have a new IP address. Check your Tailscale admin panel or your router DHCP table.
- Try pinging the box:
ping <box-ip>.
Box was working but is now unreachable
Box was working but is now unreachable
- Verify the box is powered on.
- Check your VPN connection:
tailscale status. - If the box IP changed, update it:
lager boxes edit --name my-lager-box --ip <new-ip>. - Run
lager hello --box <name>to check box status.
lager ssh fails with 'Permission denied (publickey)'
lager ssh fails with 'Permission denied (publickey)'
lager ssh offers.lager ssh offers ~/.ssh/lager_box first. It then offers each default key that exists: id_rsa, id_ecdsa, id_ed25519 and their -sk versions. It also offers the keys in your ~/.ssh/config and your SSH agent.Fix:- Run
lager ssh-setup --box <box>. Enter the box password once when it asks. - Retry
lager ssh --box <box>. - If you use a box IP address in
--box,lager sshlogs in aslagerdata. Use the saved box name to log in as the saved user. - If your CLI is older than 0.45.1, upgrade it. When
lager_boxexists, an olderlager sshoffers only that key.
Instrument Detection
lager instruments returns an empty list
lager instruments returns an empty list
- Verify instruments are physically connected via USB to the Lager Box (not to your laptop).
- Check that USB cables are properly seated — try a different cable or port.
- Confirm that the Docker container runs with USB passthrough. Run
lager hello --box <box>. - Run
lager update --box <box>to install the latest udev rules and drivers.
A specific instrument is missing from the list
A specific instrument is missing from the list
- Unplug and replug the instrument’s USB cable.
- Run
lager update --box <box>to ensure udev rules are current. - Check that the instrument is powered on (some instruments need external power in addition to USB).
- Verify the instrument model is supported.
A robot arm is missing from lager instruments
A robot arm is missing from lager instruments
0483:5740. The arm must also answer the probe and report a USB serial number.Fix:- Read the result of the last probe from the box log:
- Find the port of the arm in the
skippedlist. The reason next to it tells you why the box skipped it. - If the reason is
not a Dexarm vid:pid, the arm reports a different USB ID. Set the probe toforce: - Run
lager instruments --box <box>again. - When the arm appears, remove the setting with
lager box-config env unset LAGER_ARM_PROBE --box <box>. Then runlager box-config apply --box <box>.
'Resource busy' error when using an instrument
'Resource busy' error when using an instrument
- Close any running TUI sessions (press
qto exit). - Wait a moment, then retry. The previous command can still be running.
- If the problem continues, the instrument handle is stuck. Run
lager update --box <box>to restart the service.
Power Supply Issues
OVP or OCP tripped (output disabled unexpectedly)
OVP or OCP tripped (output disabled unexpectedly)
- Check the current state:
lager supply <NET> state --box <box>. - Clear the fault:
lager supply <NET> clear-ovporlager supply <NET> clear-ocp. - Adjust your protection thresholds if they are too tight, or investigate why the output exceeded the limit.
- Re-enable the output:
lager supply <NET> enable --box <box>.
Voltage reads 0V when the supply is enabled
Voltage reads 0V when the supply is enabled
- Verify the output is enabled:
lager supply <NET> state --box <box>— check that “Enabled” shows ON. - Confirm you set both the voltage and enabled the output (setting voltage alone does not enable it):
- Check if OVP/OCP tripped (see above).
Debug / Flash Issues
'Flash failed: Could not connect to target.' or 'Erase failed: ...'
'Flash failed: Could not connect to target.' or 'Erase failed: ...'
flash can also print The target was NOT programmed. If flash ran without --no-erase, the target can be erased. A failed erase before programming prints Flash erase failed: instead, and flash does not program the target.Fix:- Verify the SWD/JTAG wiring between the debug probe and your DUT.
- Ensure the DUT is powered (the debug probe does not always supply power).
- Check that the MCU type in the debug net matches your actual device:
lager debug <NET> status --box <box>. - Try a lower SWD speed:
lager debug <NET> gdbserver --speed 100 --force --box <box>.
'GDB server failed to start'
'GDB server failed to start'
- Disconnect any existing session:
lager debug <NET> disconnect --box <box>. - Retry:
lager debug <NET> gdbserver --box <box>. - Check the debug probe health:
lager debug <NET> health --verbose --box <box>.
'The debug session is up, but the target does not answer; reconnecting...'
'The debug session is up, but the target does not answer; reconnecting...'
flash, erase or reset, then starts a new session.Fix:- If the command then prints
Reconnected!, no action is necessary. - If the command prints
Error: the CLI did not reconnect to the target, it exits 1. Check the power and wiring of the DUT. - Run
lager debug <NET> status --box <box>. Confirm thatTarget attachedreadsYesbefore you retry.
UART Issues
UART net is already in use by another session
UART net is already in use by another session
- List the sessions that hold UART nets:
- Read the
Clientcolumn. Agoneclient releases the net on its own. Aconnectedclient belongs to somebody, so check with that person first. - A client whose computer went to sleep or lost its VPN still reads
connectedfor about 85 seconds. - To release the holder and connect, run
lager uart <net> --force --box <box>.
(locked by another session or the lager uart CLI), another process holds the serial port. A running lager python script that opened the port is one example. --force does not release that lock. Stop the script, for example with lager python --kill-all --box <box>.The --sessions and --force options take the box lock. If another user holds the box lock, both fail with is locked by.Python Script Issues
ImportError: No module named 'lager'
ImportError: No module named 'lager'
python instead of lager python.Fix: The lager Python library is only available inside the Lager Box environment. Always run scripts with:python my_script.py directly on your laptop.InvalidNetError: Net 'XYZ' not found
InvalidNetError: Net 'XYZ' not found
- List available nets:
lager nets --box <box>. - Check for typos in the net name. Net names are case-sensitive.
- If the net doesn’t exist, create it using
lager nets tui --box <box>.
[Errno 16] Resource busy, or DeviceError mentioning a busy resource
[Errno 16] Resource busy, or DeviceError mentioning a busy resource
pyvisa open against the same USB
address races it and loses.Ordinary scripts do not reach this. A supply, scope, battery simulator, e-load or solar
simulator is proxied to the hardware service, not opened locally. You reach the failure by
importing a driver module directly. You also reach it by opening pyvisa yourself, in a script
or a docker exec.Fix:- Drive the instrument through its net rather than its driver module:
- Check what already holds the address with
lager diagnose <net> --box <box>. A VISA section that reportsREACHABLE (shared session)means the hardware service holds it and skipped its own probe. Seelager diagnose. - To open the instrument yourself, take the same cross-process lock the drivers take.
Script runs but produces no output
Script runs but produces no output
- Add
print()statements to confirm that the script executes. - Wrap your code in try/except to catch errors:
- Check stderr output — errors from the box are shown in red in the terminal.
Getting More Help
If the solutions above don’t resolve your issue:- Check box logs: The services on the box write their logs inside the
lagercontainer. For an instrument call that failed, read the hardware service log:Other logs in the container are/tmp/lager-debug-service.log,/tmp/lager-python-service.logand/tmp/lager-http-server.log. A failed instrument call returns only a one-line error to your script. The full traceback is in the log. - Check box status:
lager hello --box <box>verifies the box is online and responsive. - Open an issue: Report problems on GitHub with your box name, the command you ran, and the error output.

