Repository navigation
sys-oled 2.0.0
A ground-up rewrite. It still drives the same little OLED, but now on any SSD1306-class I2C display (SH1106, SSD1305, SSD1309, SSD1315; 128x64 and 128x32) on any Linux board with /dev/i2c-*: Amlogic, Rockchip, MediaTek Genio, Allwinner, Raspberry Pi, x86.
| Status | Kubernetes | Logo + clock | Big-font temp | Alert |
|---|---|---|---|---|
![]() |
![]() |
![]() |
![]() |
![]() |
Highlights
-
Everything is auto-detected at startup, with no
i2c-toolsorlm-sensorsneeded:- the I2C bus and address;
- the best temperature sensor, chosen per SoC family;
- fan tachometers;
- the default-route interface;
- the most relevant storage: root first, then the largest data filesystems (RAID, ZFS pools, NVMe…).
-
Low steady-state cost. Detection runs once, and runs again only on failure or when the kernel reports a mount or network change.
-
Distro packages only. It runs on Debian 13 (Trixie) and Ubuntu 25.04 or newer, Armbian included, using apt packages. There's no pip and no venv.
-
One YAML config. Settings come from
/etc/sys-oled.yaml, drop-ins, environment variables, Kubernetes node labels and annotations, and CLI flags.sys-oled configshows the effective value of every setting and where it came from. -
Pages:
- status;
- Kubernetes;
- the new Armbian logo with a clock;
- big-font load, temperature and fan pages that are readable from across the room.
The order is configurable, and screen-off periods help prevent OLED burn-in.
-
Alerts. When the temperature goes too high or a fan runs too slowly, the panel wakes and flashes a warning.
-
Deployment options:
- a bare-metal
curl | bashinstaller with--uninstalland--purge; - a multi-arch container image for amd64, arm64, armv7 and riscv64;
- docker compose;
- a Helm chart. It runs a DaemonSet on labeled nodes, takes per-node config from labels and annotations, uses read-only RBAC, and adds an in-cluster status page.
- a bare-metal
Install
Bare metal:
curl -fsSL https://raw.githubusercontent.com/rpardini/sys-oled-hc4/master/install.sh | sudo SYS_OLED_REF=v2.0.0 bash
Container: ghcr.io/rpardini/sys-oled-hc4:2.0.0. See deploy/compose.yaml.
Kubernetes:
helm install sys-oled oci://ghcr.io/rpardini/sys-oled-hc4/charts/sys-oled --version 2.0.0
kubectl label node <node-with-oled> sys-oled/enabled=true
Upgrading from 1.x
Re-run the installer. It handles the migration:
/etc/sys-oled.confbecomes/etc/sys-oled.yaml.- Display model and rotation flags from the old systemd unit move to a drop-in.
- A hardcoded
--i2c-portis dropped on purpose, because the bus is now detected at every start. - The old copied script and assets are replaced.
The legacy INI file and the old luma-style flags are still understood.
Breaking: Debian 12 (Bookworm) and Ubuntu 24.04 and older are no longer supported on bare metal, because Python 3.13 is now the minimum. On those systems, use the container image instead.
See the README for details.
Thanks to everyone who sent PRs over the years (#1, #2, #3, #4); their ideas are all part of this release.




