A terminal UI for managing and browsing systemd units.
Warning
This project is a work in progress and features are still incomplete and subject to change.
- Browse systemd units (services, sockets, timers, paths, targets) with status indicators
- Search units by name or description
- Filter by status, file state, and unit type via picker dialogs
- View unit details, properties, and read-only unit file content
- Perform unit actions (start, stop, restart, enable, disable, reload, daemon-reload)
- View focused per-unit or system-wide logs with search, priority filter, and time range filter
- Live tail mode with pause/resume for real-time log monitoring
- Toggle between user and system units
- Remote management via SSH (authenticate once, persistent connection)
- Mouse support (click to select, scroll to navigate)
curl -fsSL https://raw.githubusercontent.com/andrewtheguy/systemdmgr/main/install.sh | sudo bashTo install a prerelease version:
curl -fsSL https://raw.githubusercontent.com/andrewtheguy/systemdmgr/main/install.sh | sudo bash -s -- --prereleaseThe installer places the binary in /usr/local/bin, which requires root.
macOS does not have systemd, but you can use systemdmgr as an SSH client to manage remote Linux servers:
curl -fsSL https://raw.githubusercontent.com/andrewtheguy/systemdmgr/main/install.sh | sudo bashThe binary is installed to /usr/local/bin. Then connect to a remote host:
systemdmgr --ssh user@serversystemdmgrStarted without a connection flag, systemdmgr opens a menu asking where to manage services:
Where do you want to manage services?
> Local this machine
SSH a remote host over ssh
Picking SSH lists the Host aliases from your ~/.ssh/config and lets you type any other destination (with ssh options, if needed). ↑/↓ selects, Enter confirms, Esc goes back, q quits. If the connection fails, you land back in the menu with the reason on screen.
Skip the menu with a connection flag:
systemdmgr --local
systemdmgr --ssh user@serverManage systemd units on a remote server over SSH:
Everything after --ssh is passed to the ssh client, in the form --ssh [ssh-options] destination (options first, destination last):
systemdmgr --ssh user@server
systemdmgr --ssh -p 2222 -i ~/.ssh/deploy_key user@server
systemdmgr --ssh -J bastion user@serverConnectivity is delegated to the system OpenSSH client: authentication (agent, keys, password, OTP/MFA), host key verification, ~/.ssh/config (including ProxyJump and Match), and passphrase prompts all work exactly as they do for plain ssh. A single multiplexed connection (ControlMaster) is reused for all commands. --user mode works over SSH (requires loginctl enable-linger on the remote).
See docs/ssh.md for full details on host resolution, authentication, and troubleshooting.
systemdmgr version
systemdmgr --versionPress ? in the app to see context-sensitive help.
| Key | Action |
|---|---|
Down |
Move down |
Up |
Move up |
g / Home |
Go to top |
G / End |
Go to bottom |
PgUp / PgDn |
Page up / down |
/ |
Search units |
s |
Status filter picker |
f |
File state filter picker |
t |
Unit type picker |
i / Enter |
Open unit details |
v |
View unit file |
x |
Action picker (start/stop/restart/etc.) |
R |
Daemon reload |
l |
Open logs |
L |
Open system-wide logs |
p |
Log priority filter |
T |
Log time range filter |
r |
Refresh units |
u |
Toggle user/system units |
Esc |
Clear search or quit |
q |
Quit |
? |
Toggle help |
| Key | Action |
|---|---|
Down |
Scroll down |
Up |
Scroll up |
g / Home |
Go to top |
G / End |
Go to bottom |
PgUp / PgDn |
Page scroll |
Ctrl+u / Ctrl+d |
Half page scroll |
/ |
Search logs |
n / N |
Next / previous match |
p |
Priority filter |
t |
Time range filter |
x |
Action picker |
f |
Pause/resume live tail |
l |
Exit logs |
L |
Toggle system-wide logs |
Enter |
Open selected unit from paused system-wide logs |
Esc |
Clear search / exit logs |
? |
Toggle help |
| Key | Action |
|---|---|
Down / Up |
Scroll down / up |
g / Home |
Go to top |
G / End |
Go to bottom |
PgUp / PgDn |
Page scroll |
Ctrl+u / Ctrl+d |
Half page scroll |
/ |
Search unit file |
n / N |
Next / previous match |
v / Esc / q |
Close unit file |
? |
Toggle help |
- Specification — architecture, features, and UI details
- SSH Remote Management — host resolution, authentication, and troubleshooting
- Roadmap — planned features and future considerations
- Rust 1.85+ (2024 edition)
- Linux: systemd 246+ with
systemctlonPATH(local host, or remote host when using--ssh) - macOS: SSH remote management only (
--sshflag required; the remote host must have systemd) - OpenSSH client (
sshonPATH) for remote management via--ssh
MIT