Start without a window
The installed app does it on every operating system:
benchmesh --headless --remote-password 'at least 10 characters'The password switches remote access on; BenchMesh keeps only its hash, so later starts need just benchmesh --headless. To keep the password out of the process list, give it through the environment instead:
read -rs BENCHMESH_REMOTE_PASSWORD && export BENCHMESH_REMOTE_PASSWORD && benchmesh --headless| Option | Effect |
|---|---|
--remote-password P | Switch remote access on with this password (at least 10 characters). BENCHMESH_REMOTE_PASSWORD does the same. |
--port N | The port on this computer (default 57666). |
--data-dir D | Settings, recordings and flows (default ~/.benchmesh). |
--config F | The instruments (default config.yaml in the data folder). |
Where the app lives: Windows "C:\Program Files\BenchMesh\benchmesh.exe" --headless --remote-password "at least 10 characters"; macOS /Applications/BenchMesh.app/Contents/MacOS/benchmesh --headless --remote-password 'at least 10 characters'; Linux benchmesh from the .deb, or the AppImage file itself. Ctrl-C stops it cleanly - instruments are returned to local mode first. A headless BenchMesh and the app window cannot run on the same computer at once: they would open the same instruments.
Connect from a browser
At start BenchMesh prints the addresses to open, for example https://192.168.1.20:57667/, and the certificate fingerprint. The certificate is made by BenchMesh itself, so the browser warns once: compare the fingerprint, accept, sign in with the password. Only computers on the local network are let in. A second, view-only password lets colleagues watch without changing anything.
Resources, restart, shut down
Instruments → System shows the computer: processor, memory and disk use (the disk of the data folder - recordings grow there), temperature (a Raspberry Pi slows down from 80 °C), uptime and load, and BenchMesh’s own memory and processor use. Headless it adds:
- Restart - instruments stop cleanly, BenchMesh starts again with the same options; sign in again afterwards.
- Shut down - instruments stop cleanly and BenchMesh ends. It starts again only on the computer (or with it, below).
- Updates - check for and install a new version (below).
Both ask for a second press and wait while a flow runs - its cleanup switches off what it switched on. View-only sessions see the figures only.
Start with the computer
The switch Start with this computer registers BenchMesh for your user - no administrator rights - with the options it was started with (never the password). After a crash it is started again; after Shut down it stays off.
| System | Entry | Starts |
|---|---|---|
| Linux | systemd user service ~/.config/systemd/user/benchmesh.service | When you log in; at power-on after the command below, once |
| macOS | LaunchAgent ~/Library/LaunchAgents/online.benchmesh.headless.plist | When you log in (power-on with automatic login) |
| Windows | HKCU\…\CurrentVersion\Run, value BenchMeshHeadless | When you sign in (power-on with automatic sign-in) |
On Linux, user services run at power-on - before anyone logs in - once your user “lingers”. The app shows this command with a Copy button:
sudo loginctl enable-linger "$USER"Updates
The app window offers a new version when it starts. Headless there is no window, so Instruments → System → Updates does it: Check for updates looks at the latest release, Install … and restart (a second press confirms) downloads it and checks its signature - a download not signed by BenchMesh is deleted, never installed. Then, depending on how BenchMesh was installed:
| Installed as | Update |
|---|---|
| AppImage (Linux, Raspberry Pi) | Instruments stop cleanly, the AppImage file is replaced in place (the old one kept next to it as .previous) and the new version starts with the same options. |
| Windows | BenchMesh stops, the installer runs silently and starts BenchMesh again. |
| macOS | BenchMesh stops, the app in Applications is replaced and started again. |
| .deb (Debian, Ubuntu, Raspberry Pi OS) | The package manager owns the files: the verified package is downloaded and the tab shows the command to run, with Copy; then press Restart. |
sudo apt install ~/.benchmesh/updates/BenchMesh_<version>_arm64.debThe page reloads once the new version answers; sign in again. Updates wait while a flow runs. If installing fails, the old version starts again. For a computer you look after only from the browser the AppImage is the easiest choice: it updates itself.
Raspberry Pi
A Raspberry Pi 4 or 5 with 64-bit Raspberry Pi OS (Lite is enough: no desktop needed) runs BenchMesh headless well. Use the 64-bit ARM AppImage - it updates itself from the browser. Paste this into a terminal on the Pi (over SSH is fine): it installs FUSE 2, downloads the newest AppImage as BenchMesh.AppImage into the current folder and starts it:
sudo apt install -y libfuse2t64 || sudo apt install -y libfuse2
curl -fsSL https://api.github.com/repos/MarkoVcode/BenchMesh/releases/latest | grep -o '"browser_download_url": *"[^"]*_aarch64\.AppImage"' | cut -d'"' -f4 | xargs curl -fL -o BenchMesh.AppImage && chmod +x BenchMesh.AppImage
./BenchMesh.AppImage --headless --remote-password 'at least 10 characters'Prefer a package? The 64-bit ARM .deb installs benchmesh for everyone; updating it then needs the apt command the Updates group shows. The newest one:
curl -fsSL https://api.github.com/repos/MarkoVcode/BenchMesh/releases/latest | grep -o '"browser_download_url": *"[^"]*_arm64\.deb"' | cut -d'"' -f4 | xargs curl -fL -o BenchMesh.deb && sudo apt install -y ./BenchMesh.deb
benchmesh --headless --remote-password 'at least 10 characters'Both commands ask GitHub for the latest release; the files are also on the download page.
Give the instruments to your user once - USB-TMC needs a udev rule and serial ports the dialout group, see Run on Linux. Then open the printed address on your laptop, switch Start with this computer on and run the linger command: from then on the Pi is a bench server you never need to log into.
Troubleshooting
- “remote access is off” at start - no password was given yet: start once with
--remote-password. - “cannot listen on port 57666” - BenchMesh already runs on this computer (the app window or another headless start).
- The browser cannot connect - both computers must be on the same local network, and a firewall on the bench computer must let port 57667 in (for example
sudo ufw allow 57667/tcp). - “no systemd user manager” under Start with this computer - the distribution has no systemd (Alpine, Void, Devuan): start the command from your system’s own startup.
- After a restart the page asks for the password - expected: sessions are kept in memory only.
- “cannot write next to …” when updating - the AppImage lies in a folder your user cannot write: move it to your home folder (and switch Start with this computer off and on again).
Something else? Ask the community.