mixtrayd

mixtrayd is the data service behind the MixOS tray popup, mixtray. It registers on the noded Bus as mixtrayd and answers one verb, mixtrayd.snapshot, with four tabs of state:

TabSource
COSsystemd ActiveState for the MixOS units (system and user managers)
BUSthe services noded has registered (noded.list) and mesh peers (noded.peers)
MIXthe installed mix binary and its version
SSHhost files in ~/.ssh/hosts/, their trash, keys in ~/.ssh/keys/, and probe results

Each tab carries its own error field, so one failing source does not blank the others. The daemon polls nothing: it reads its sources when a snapshot is asked for.

Live updates

The daemon subscribes to systemd's unit signals on the system and user buses and watches ~/.ssh/config, ~/.ssh/hosts/ and ~/.ssh/keys/. It keeps a revision that moves whenever a COS unit changes, one of those files changes, or an SSH probe starts or finishes. Every snapshot carries the revision it was read at. mixtrayd.wait takes a revision and answers with a new snapshot as soon as the revision moves past it, or after 45 seconds, inside the Bus client's 60-second call limit. While the popup is open it keeps one wait running and starts the next as each one returns, so a unit's state changes on screen as systemd reports it.

Control

The COS tab can start, stop and restart a unit through the mixtrayd.control verb. A system unit goes through hostd's unit.control verb: hostd is root, and its grant mixtray-units names the only units this daemon may act on, so no sudo or polkit prompt is involved. The daemon refuses hostd.service and its own unit, and it marks each unit it can control in the snapshot.

Every control action is recorded as a hostd receipt, and hostd.undo refuses it, since a restart has no undo.

SSH hosts

Each host is one file in ~/.ssh/hosts/, named after its alias and holding a single Host line, which ~/.ssh/config pulls in with Include ~/.ssh/hosts/*. Dotfiles in that directory are shared snippets, not hosts. The mixtrayd.ssh verb takes an action:

ActionFieldsEffect
probeids (empty for every usable host)runs ssh ALIAS true in batch mode, four at a time, 10 s each
createname, hostname, port, user, keywrites a new owner-only host file using ~/.ssh/keys/KEY; never overwrites one
trashidrenames the file .trashed-ID
restoreidrenames it back, refusing to replace a live host
purgeiddeletes a trashed host; a live host must be trashed first

The popup handles Connect (an ssh ALIAS terminal) and Edit (the host file) itself, since those run in the desktop session, not the daemon's.

Use

mixtrayd serve                   # the daemon (the default)
mixtrayd snapshot                # print one snapshot from the running daemon
mixtrayd wait REVISION           # print the next snapshot once a COS unit changes
mixtrayd control UNIT ACTION     # start, stop or restart one controllable unit
mixtrayd ssh probe [ID...]       # test every usable host, or the ones named
mixtrayd ssh create NAME HOSTNAME PORT USER KEY
mixtrayd ssh trash|restore|purge ID
mixtrayd --version

Not yet

  • MIX scripts, runs and trash have no MixOS source yet, so the MIX tab reports only the binary.

This page as Markdown · This page describes the current main branch of MixOS.