Ubuntu cpu frequency display script especially optimized to many NUMA and cores system
  • Python 71.3%
  • Shell 28.7%
Find a file
2026-07-27 19:24:16 -04:00
assets Upload changes 2026-03-27 04:08:52 +00:00
tests Release v1.1.0 with Forgejo and platform fixes 2026-07-27 19:24:16 -04:00
.gitignore Release v1.1.0 with Forgejo and platform fixes 2026-07-27 19:24:16 -04:00
CHANGELOG.md Release v1.1.0 with Forgejo and platform fixes 2026-07-27 19:24:16 -04:00
freqdisp Release v1.1.0 with Forgejo and platform fixes 2026-07-27 19:24:16 -04:00
install.sh Release v1.1.0 with Forgejo and platform fixes 2026-07-27 19:24:16 -04:00
LICENSE Initial commit 2026-03-26 23:24:10 -04:00
README.md Release v1.1.0 with Forgejo and platform fixes 2026-07-27 19:24:16 -04:00

CPU frequency display

Terminal CPU frequency and utilization display for Linux, macOS, and BSD. It supports large core-count and NUMA-heavy hosts while remaining a single Python script with no third-party Python dependencies.

Supported platforms

  • Linux: Debian/Ubuntu, Proxmox VE, Fedora/RHEL, OpenWrt, Alpine, Arch, openSUSE, Gentoo, and other distributions. CPU utilization comes from /proc/stat; frequency comes from Linux CPUFreq policy sysfs with /proc/cpuinfo as a fallback.
  • macOS: Intel and Apple silicon CPU discovery, per-core utilization through the public Mach host API, and Apple silicon performance-level counts.
  • FreeBSD: per-core utilization and frequency through sysctl.
  • OpenBSD, NetBSD, and DragonFly BSD: CPU discovery and best-effort frequency display through sysctl. Per-core utilization may be unavailable.

On Apple silicon, macOS does not expose a public live per-core frequency value. In that case freqdisp shows -- for frequency while utilization and CPU topology continue to update.

Quick start

The release-pinned installer is served by the LeafWolf Forgejo instance:

curl -fsSL https://git.leafwolf.net/HalfVulpes/cpufrequencydisplay/raw/tag/v1.1.0/install.sh |
    FREQDISP_REF=v1.1.0 sh

With wget:

wget -qO- https://git.leafwolf.net/HalfVulpes/cpufrequencydisplay/raw/tag/v1.1.0/install.sh |
    FREQDISP_REF=v1.1.0 sh

With FreeBSD fetch:

fetch -q -o - https://git.leafwolf.net/HalfVulpes/cpufrequencydisplay/raw/tag/v1.1.0/install.sh |
    FREQDISP_REF=v1.1.0 sh

To inspect the installer before running it:

curl -fsSLO https://git.leafwolf.net/HalfVulpes/cpufrequencydisplay/raw/tag/v1.1.0/install.sh
chmod +x install.sh
FREQDISP_REF=v1.1.0 ./install.sh

OpenWrt

The full python3 package includes the required curses module:

opkg update
opkg install python3 curl ca-bundle
curl -fsSL https://git.leafwolf.net/HalfVulpes/cpufrequencydisplay/raw/tag/v1.1.0/install.sh |
    FREQDISP_REF=v1.1.0 sh

CPU frequency availability still depends on the device kernel and its CPUFreq driver. The display falls back cleanly when a router does not expose CPUFreq.

macOS

Install Python 3 first if python3 is not already available:

brew install python
curl -fsSL https://git.leafwolf.net/HalfVulpes/cpufrequencydisplay/raw/tag/v1.1.0/install.sh |
    FREQDISP_REF=v1.1.0 sh
freqdisp

Installation layout

The installer defaults to:

  • script: ~/.local/share/freqdisp/freqdisp
  • launcher: ~/.local/bin/freqdisp
  • config: ~/.local/share/freqdisp/.freqdisp.json

It adds ~/.local/bin to the current shell's profile. Set FREQDISP_SKIP_PATH_UPDATE=1 to leave shell profiles unchanged. The installer refuses to replace an existing launcher unless it is a symbolic link created by a previous installation.

The app saves the current display mode and grouping choice whenever you press 1, 2, 3, or 4.

Versioning and custom installs

freqdisp --version prints the installed version. By default, the installer queries Forgejo for the newest tag and downloads the immutable commit behind that tag. To install the current development branch instead:

curl -fsSL https://git.leafwolf.net/HalfVulpes/cpufrequencydisplay/raw/branch/master/install.sh |
    FREQDISP_REF=master sh

For a different LeafWolf-compatible Forgejo host, set FREQDISP_FORGEJO_URL. FREQDISP_REF accepts a safe tag name, commit ID, or master.

Manual run and tests

chmod +x ./freqdisp
./freqdisp

Run the local test suite without any hosted CI service:

python3 -m unittest discover -s tests -v
sh tests/test_installer.sh

Example

CPU frequency display