Headless install
Connectors are distributed as self-contained executables that bundle their own Python runtime. You can run them directly on any Linux machine without installing GroundControl or Python. This is the typical setup for:
- Raspberry Pi devices co-located with instruments
- Headless Linux servers in the lab network
- Environments where a GUI is not practical
For workstations and lab PCs with a display, GroundControl is the easier path.
Get the connector executable
Contact your UniteLabs representative or download the connector from the UniteLabs connector registry. Executables are named:
unitelabs-<connector>-<arch>-<os>-<version>
For example, on a Raspberry Pi 4 (64-bit):
unitelabs-microlab-star-aarch64-unknown-linux-gnu-0.3.1
Common architecture suffixes:
| Architecture | Suffix |
|---|---|
| x86_64 Linux | x86_64-unknown-linux-gnu |
| ARM64 Linux (RPi 4/5) | aarch64-unknown-linux-gnu |
Install and configure
1. Place the binary
Create a folder for the connector under /opt/connectors/:
sudo mkdir -p /opt/connectors/microlab_star
sudo cp unitelabs-microlab-star-aarch64-unknown-linux-gnu-0.3.1 /opt/connectors/microlab_star/
sudo chmod +x /opt/connectors/microlab_star/unitelabs-microlab-star-aarch64-unknown-linux-gnu-0.3.1
2. Generate the default config
Run the connector once with the config create command to generate a config.json with all available fields:
cd /opt/connectors/microlab_star
./unitelabs-microlab-star-aarch64-unknown-linux-gnu-0.3.1 --start-cmd "config create"
This writes config.json to the current folder.
3. Edit config.json
Open config.json and fill in the instrument-specific settings — typically the connector's hostname or IP address and port it should run on or instrument specifics such as the serial port (This is not required for the Mircolab STAR as it auto-detects the instrument):
{
"serial_port": "",
"sila_server": {
"hostname": "0.0.0.0",
"port": 50052,
"tls": true,
"name": "Hamilton Microlab STAR",
...
}
}
To connect to the UniteLabs cloud, edit the cloud_server_endpoint block:
{
"cloud_server_endpoint": {
"hostname": "<tenant-id>.unitelabs.io",
"port": 443,
"tls": true
}
}
4. Test run
Run the connector directly to verify it starts and connects to the instrument:
./unitelabs-microlab-star-aarch64-unknown-linux-gnu-0.3.1
Check the logs for any connection errors. Press Ctrl+C to stop. The default logging config writes a log file in the
specified folder in the config.json. For troubleshooting during a headless install, we recommend starting a connector
in a more verbose mode that prints the logs to the terminal
./unitelabs-microlab-star-aarch64-unknown-linux-gnu-0.3.1 --start-cmd "connector start -vvv"
Register as a systemd service
For production use, register the connector as a systemd service so it starts automatically on boot and restarts on failure.
Create the service file
Create /etc/systemd/system/ul-microlab-star.service:
[Unit]
Description=UniteLabs Microlab STAR
After=network.target
Wants=network-online.target
[Service]
User=<your-user>
WorkingDirectory=/opt/connectors/microlab_star
ExecStart=/opt/connectors/microlab_star/unitelabs-microlab-star-aarch64-unknown-linux-gnu-0.3.1
Restart=on-failure
RestartSec=10
[Install]
WantedBy=multi-user.target
ul- prefix — it makes them easy to list and manage together.Enable and start
sudo systemctl daemon-reload
sudo systemctl enable ul-microlab-star
sudo systemctl start ul-microlab-star
sudo systemctl status ul-microlab-star
Common service commands
# List all UniteLabs services
systemctl list-units | grep ul-
# Check logs
journalctl -u ul-microlab-star -f
# Restart after a config change
sudo systemctl restart ul-microlab-star
Back up the service file
Store a copy of the service file alongside the connector binary so the setup can be fully reconstructed from /opt/connectors/ alone:
sudo cp /etc/systemd/system/ul-microlab-star.service /opt/connectors/microlab_star/
Notes
- The connector binary unpacks a Python runtime into a
.cache/directory on first run. This is expected behavior shared across all connectors. - Each connector must use a unique port for its local SiLA 2 server. By convention, assign ports incrementally (50052, 50053, 50054, …) or use a site-specific range.
- See Network requirements for firewall rules and other security settings.
Example: multi-connector Raspberry Pi setup
For a complete example of multiple connectors running on a single Raspberry Pi — including folder layout, active services, and troubleshooting — see the Raspberry Pi deployment example.