Repository navigation
tuxctl v0.3.3
v0.3.3 redesigns the Overview as a set of cards that uses the whole terminal, and adds what a system monitor is expected to show: component temperatures, GPU usage, CPU power, swap and every local filesystem, colored by load. It also makes risky keys safer: SIGTERM now needs Shift+T, and q asks before quitting. There were no 0.3.1 or 0.3.2 releases.
New
- Overview cards. CPU, GPU, Memory, Network, Storage and Pinned, each with its model, temperature and power in the title and a graph as wide as the card. At 150 columns and more they form a 2×2 grid with Storage below and Pinned on the right; at 100–149 columns Storage and Pinned sit side by side; narrower terminals stack the cards by priority. Hostname, kernel, uptime and process counts moved into the top border. A short terminal gives up the per-CPU grid first, then graph height, then list rows, and only then whole cards.
- Temperatures for CPUs, GPUs, NVMe and SATA disks and network adapters, from the kernel's hwmon drivers and thermal zones. A sleeping GPU is never woken to be read.
- GPU usage. Utilization graph, VRAM, fan and power: through NVML for NVIDIA GPUs on the proprietary driver, through sysfs for
amdgpu, and power and fan fornouveau. - Colors by load. Utilization, graphs, pinned processes' CPU and temperatures go from light blue through green, yellow and orange to red. Temperatures are colored as a share of the component's critical temperature. True color, 256-color and 16-color terminals are supported.
- CPU package power where your user can read it: from
zenpower, or from RAPL energy counters if an administrator makes them readable (see "Optional setup" in the README for a udev rule and its security trade-off). tuxctl asks for no privileges. - Swap and every local filesystem on the Memory and Storage cards.
tuxctl --checklists the sensors tuxctl finds on your machine and what would enable the missing ones (drivetempfor SATA disks, readable RAPL counters, a glibc build for NVIDIA).- Popups grey out the screen behind them.
Changed
- Breaking:
SIGTERMis requested withT/Shift+Tinstead oft. Keys that change the system or persistent state (signals, pins) useShift. qopens the main menu with Exit selected;Enterorqagain quits.Ctrl+Cstill quits immediately.- Graphs keep 240 samples and fill the card; the Network graph uses a logarithmic scale, so one spike no longer flattens everyday traffic.
- Hardware sensors are read only while the Overview is visible.
NVIDIA GPUs
NVIDIA's proprietary driver has no hwmon sensors, so tuxctl loads the driver's own libnvidia-ml.so.1 (NVML) at run time when it finds such a GPU. NVML costs about 20 MiB of memory and a little CPU on the Overview; --no-nvidia-temperature leaves it unloaded. On laptops with runtime power management, NVML is opened only while the GPU is awake, so tuxctl never keeps it powered. The static binaries below cannot load NVML; to see NVIDIA temperatures and usage, build from source with cargo install (see Installation).
Performance
Measured with the static release binary on an AMD Ryzen 5 7500F at the default interval: 0.6% CPU when idle on Overview, 13.4 redraws per second under 240 Hz mouse hover, and about 2.7 MiB of RSS after 15 minutes, with no growth after warm-up. Measured alternately with v0.3.0 on the same machine (3 runs each), CPU is unchanged within run-to-run noise. The binary is about 20% larger (1.74 MB). A glibc build that loads NVML uses about 31 MiB.
Verification
- 505 unit tests and 6 command-line integration tests passing (glibc; 502 + 6 on musl)
cargo fmt --checkPASScargo checkPASScargo clippy --all-targets --all-features -- -D warningsPASS (glibc and musl)cargo testPASScargo build --release --lockedPASS (glibc and musl)scripts/smoke.py38/38 on the glibc and musl release builds- CI green, including MSRV 1.88 and the redraw guards at the default and 250ms intervals
Minimum supported terminal size: 40×15. Minimum supported Rust version: 1.88.
Installation
Linux only
Prebuilt binary (x86_64 or aarch64):
arch=$(uname -m)
base=https://github.com/Seqat/tuxctl/releases/download/v0.3.3
curl -LO "$base/tuxctl-$arch-unknown-linux-musl.tar.gz" -LO "$base/SHA256SUMS"
sha256sum -c --ignore-missing SHA256SUMS
tar xzf "tuxctl-$arch-unknown-linux-musl.tar.gz"
install -Dm755 "tuxctl-$arch-unknown-linux-musl/tuxctl" ~/.local/bin/tuxctlFrom source (Rust 1.88 or newer; needed for NVIDIA temperatures and usage):
cargo install --git https://github.com/Seqat/tuxctl --tag v0.3.3 --locked