Skip to main content

System & Network Management

The System page turns OmniBus into an appliance-style console for the host it runs on: system info, logs, the audit trail, and network management.

:::note Why the service runs as root Network management writes privileged files and runs privileged commands (iw scan, /etc/netplan/*, hostnamectl, netplan apply), so the service runs as root. The systemd unit narrows the blast radius with sandboxing directives (ProtectKernelTunables, PrivateTmp, RestrictNamespaces, and more). :::

Discovery (mDNS)

OmniBus advertises HTTP/HTTPS over mDNS on its current hostname, so it's reachable as <hostname>.local without knowing its IP. If something else already owns mDNS on the host (Avahi, common on Pi OS / Armbian), OmniBus stands down silently and lets it advertise. Disable OmniBus's mDNS with OMNIBUS_MDNS_DISABLE=1.

Network configuration

From the System page you can:

  • Change the hostname (also updates the .local name).
  • Scan and join WiFi, with IP-verification after connecting.
  • Switch between static IP and DHCP.

OmniBus picks the right backend for the host automatically: NetworkManager (nmcli) → netplan (/etc/netplan + netplan apply) → wpa_supplicant.conf.

:::note Backend coverage The static-IP / DHCP toggle is implemented for the nmcli and netplan backends; the legacy wpa_supplicant path returns HTTP 501 for that operation. :::

USB-stick WiFi onboarding

For headless provisioning, drop a wifi-config-omnibus.txt file on a USB stick with key=value lines:

ssid = MyHomeWiFi
password = correcthorsebatterystaple
country = US # optional regulatory domain
hidden = false # optional, for hidden SSIDs
apply = false # optional: dry-run — log the plan, change nothing

When the stick is auto-mounted, OmniBus chooses the right backend, provisions the network, and deletes the trigger file from the stick. apply = false does a dry-run so a tech can review the planned change over SSH before committing. Quoted values with embedded spaces are supported.

The installer sets up headless USB auto-mount (a udev rule + helper) so this works on bare server/SBC installs without a desktop session. OmniBus polls /media/*, /mnt/*, and /run/media/* for trigger files.

Factory reset

Two gestures, both wired up; enable either or both via config.

Drop a file named factory-reset-omnibus.txt containing exactly the text factory-reset-omnibus onto an auto-mounted USB stick. On match, OmniBus:

  1. Backs up the current config.json (timestamped, next to the live one).
  2. Wipes the config — admin password cleared, all ports removed.
  3. Deletes the trigger file from the stick (so it won't re-fire).
  4. Exits; systemd restarts it and the UI returns to first-run setup.

Optional usbReset.preserve: ["mqtt"] keeps named top-level config keys across the reset. Matches only inside /media/*, /mnt/*, /run/media/* — a trigger file elsewhere is ignored on purpose.

B) Argon ONE V2 case button (Raspberry Pi)

If your Pi is in an Argon ONE V2 case, run sudo ./argon-setup.sh after the main installer to enable a button gesture: 10 presses in 10 seconds → factory reset (same backup-then-wipe). Optional single-press → poweroff/reboot (off by default). Don't run the Argon argononed daemon at the same time — both want to own GPIO4.

Updates from the UI

The service restarts cleanly on planned events (factory-reset respawn, OTA apply, reboot). For pushing new versions, see Upgrades.