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
.localname). - 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.
A) USB stick (hardware-agnostic, recommended)
Drop a file named factory-reset-omnibus.txt containing exactly the text
factory-reset-omnibus onto an auto-mounted USB stick. On match, OmniBus:
- Backs up the current
config.json(timestamped, next to the live one). - Wipes the config — admin password cleared, all ports removed.
- Deletes the trigger file from the stick (so it won't re-fire).
- 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.