systemd units: what failed, why, and every action previewed
v0.1.0systemdMIT
The unit list, with failed units sorted to the top
A terminal UI for systemd. It opens on what failed — failed units sort first, always — and puts the journal that explains why one key away. Timers show what is scheduled and when it last fired; the boot view shows what made the last boot slow.
The unit list merges list-units --all with list-unit-files, so a unit that is installed but has never started is visible too. Every read works as an ordinary user, so the tool opens instantly and without a password; only an action escalates, and only behind a confirm dialog showing the exact systemctl command line.
Run tui-systemd --demo for a sample machine with a couple of interesting failures. Nothing touches your system.
Keys
Key
Action
j / enter
Journal for the selected unit
f
In the journal: follow, re-reading every 2s
s / x
Start / stop the selected unit
r / l
Restart / reload the selected unit
e / D
Enable / disable the selected unit
m / M
Mask / unmask the selected unit
d
Reload the systemd manager (daemon-reload)
tab
Cycle the state filter: all, failed, active, inactive
/
Filter by name, description or state
t
Timers
b
Boot times, slowest first
?
Help
q
Quit
Press ? inside the tool for the full help screen, which is generated from the same action table as the key map.
Compatibility
This tool is a face on the program below, so its version matters.Tested is not a claim: a version lands there only after the tool's own suite passed against it on a real machine in the lab, and the run is kept as evidence in the repository. At startup the tool probes the backend once and says what it found in its header — a version nobody has run against is shown as(untested) in the warning colour, one older than the minimum as (below minimum) in the error colour. Neither stops it: the backend still refuses what it cannot do, in its own words.
systemd
systemctl ≥ 230
Binary
systemctl
Minimum
230
Probed with
systemctl --version
Tested
255259261
Needs a version this new
timerssince 250
boot-blamesince 230
What changes on older versions
systemd <250
list-timers has no JSON output, so the timers view is not offered: the text table cannot be parsed without mangling its timestamps
systemd <245
list-units --plain is absent on some builds, so the unit list falls back to the decorated output
Install
Once per machine, then every tool in the family is one pacman away.
Add the repository
$ curl -fsSL https://pkgs.tui.tools/install.sh | sh
Or run the same thing yourself, one command at a time
A family whose whole promise is preview before you run is not going to insist you pipe a script into a shell. These are the commands that script runs.
Upgrades then arrive with the rest of your system updates.
!
Not published yet. The command is what it will be once the package repository at pkgs.tui.tools is live. Until then, use the static binary or build from source.
Arch Linux (AUR) · tui-systemd-bincoming soon
$ paru -S tui-systemd-bin
The -bin package installs the released static binary.
Once per machine, then every tool in the family is one apt away.
Add the repository
$ curl -fsSL https://pkgs.tui.tools/install.sh | sh
Or run the same thing yourself, one command at a time
A family whose whole promise is preview before you run is not going to insist you pipe a script into a shell. These are the commands that script runs.
Upgrades then arrive with the rest of your system updates.
!
Not published yet. The command is what it will be once the package repository at pkgs.tui.tools is live. Until then, use the static binary or build from source.
Needs the tui-tools repository, a one-time setup you do once per machine.
openSUSE · tui-systemdcoming soon
$ sudo zypper install tui-systemd
The rpm repository is shared with dnf; zypper support is not tested yet.
One static binary. Verify it against checksums.txt from the same release.
From source · tui-systemd
$ git clone https://github.com/tui-tools/tui-systemd
cd tui-systemd && make build
sudo install -m0755 bin/tui-systemd /usr/local/bin/tui-systemd
Needs Go 1.26 or newer.
What it can do to your machine
✓
Preview, then confirm
Every change is shown as an exact command line and confirmed before it runs. The dialog and the runner receive the same value, so the preview cannot drift from what executes.
•
Escalates for actions
Only actions escalate: start, stop, restart, reload, enable, disable, mask, unmask and daemon-reload. Every read — the unit list, the journal, timers and boot times — works as an ordinary user. Escalation goes through sudo -n, which never prompts.
✓
No daemon, no state of its own
Nothing keeps running after you quit, and nothing is installed to run later. The system is the source of truth; the tool re-reads it after every change.
✓
No network access
The tool opens no network connection of its own. No telemetry, no update check, no phone home.
✓
Static binary
Released statically linked, with no runtime dependencies to install.
✕
Releases are not signed yet
Releases carry SHA-256 checksums but no signature. Verify the checksum, and read this as the open item it is.
Reporting
Report a security issue privately, through GitHub's private vulnerability reporting on the repository's Security tab. The family-wide policy, and what counts as in scope, is on the security page.