Skip to content
BenchMesh

Linux · Windows · macOS · Raspberry Pi

Headless BenchMesh and the Raspberry Pi

Put a small computer next to the bench, plug the instruments into it and use BenchMesh from your laptop’s browser. Headless, BenchMesh runs without a window; you look after it - resources, restart, shut down, start with the computer, updates - from the browser too.

Start without a window

The installed app does it on every operating system:

Terminal
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:

Terminal
read -rs BENCHMESH_REMOTE_PASSWORD && export BENCHMESH_REMOTE_PASSWORD && benchmesh --headless
OptionEffect
--remote-password PSwitch remote access on with this password (at least 10 characters). BENCHMESH_REMOTE_PASSWORD does the same.
--port NThe port on this computer (default 57666).
--data-dir DSettings, recordings and flows (default ~/.benchmesh).
--config FThe 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.

SystemEntryStarts
Linuxsystemd user service ~/.config/systemd/user/benchmesh.serviceWhen you log in; at power-on after the command below, once
macOSLaunchAgent ~/Library/LaunchAgents/online.benchmesh.headless.plistWhen you log in (power-on with automatic login)
WindowsHKCU\…\CurrentVersion\Run, value BenchMeshHeadlessWhen 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:

Terminal
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 asUpdate
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.
WindowsBenchMesh stops, the installer runs silently and starts BenchMesh again.
macOSBenchMesh 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.
Terminal (.deb)
sudo apt install ~/.benchmesh/updates/BenchMesh_<version>_arm64.deb

The 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:

Terminal on the Pi
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:

Terminal on the Pi (.deb)
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.