Biggest update in a while. This release has 2 big features (remote hosts and mouse support), plus a bunch of smaller improvements.
Remote host support
You can now browse and manage systemd units on another machine over SSH, with nothing installed on the remote end:
systemctl-tui --host user@hostname
It drives systemctl, journalctl and D-Bus over the SSH connection. On hosts without a working systemd, it fails fast with a clear error instead of hanging. (#89)
Mouse support
The whole UI is now mouse-aware (#93):
- select and copy text in the logs pane, with wheel scrolling
- click a service to select it; click details fields (like the unit file path) to copy them, with a toast confirming
- the action/signal menus, status filter, help screen and popups are all clickable
Status filter
Press f to filter the unit list by state. States are grouped into activation (active/inactive/failed), enablement (enabled/disabled/static/masked) and load buckets, each with a single-key toggle. (#91)
Runtime info in the details pane
The details pane now shows PID, memory, task count and CPU time for running units, in a denser layout. (#92)
Other improvements
- unit operations now trigger an interactive polkit prompt instead of failing with a permission error. Thanks @nilsherzig! (#87)
- better vim-style log navigation:
g/Gfor top/bottom, bigger scroll steps, keybinding fixes. Thanks @leonbohn! (#74) - fixed the filtered list hiding top matches after clearing and retyping a search. Thanks @pamarcos! (#83)
- fixed scroll-to-bottom in the logs pane when lines wrap
- dependency updates, including ratatui 0.30
Testing
This release also grew a much bigger test suite:
tests/integration-test.pydrives the TUI end to end in tmux, locally or against a remote host, including a keystroke-drop regression testtests/remote-matrix.pyruns the remote suite against containers with real systemd versions (239 to current: Rocky 8, Ubuntu 20.04/22.04/24.04, Debian 12, Fedora), plus 2 hostile hosts (no systemd, systemd installed but not booted) where it must fail fast (#90)- CI runs the matrix on every PR