Skip to content

Systemd Boot

Boot progress and target transition diagnostics. Displays systemd target activation states during startup, providing visual confirmation that critical services initialized correctly. This mode is shown briefly on daemon boot before transitioning to the configured default.

Quick Start

cyberhudctl display set 0 systemd

How It Works

The systemd mode renders boot progress as text rows showing the desired target, currently loading target, last loaded target, and an active/total target count — with a color-coded accent gradient background on color panels that advances proportionally to boot completion (active targets / total targets). On monochrome and e-ink panels, the gradient is suppressed and only text rows are rendered.

The display updates on each render-loop tick by polling systemctl for target state: querying the default target, listing active jobs, checking whether multi-user.target is active, and enumerating all targets with their states. This makes updates effectively continuous during boot — the display reflects each target transition as it happens. Once multi-user.target becomes active, the mode marks boot as complete and automatically transitions to the panel's configured default mode.

The data source is the systemctl command-line interface queried via subprocess calls. When systemctl is unavailable (non-Linux systems or early boot before systemd is accessible), the mode falls back to a heuristic state machine: 0% with no target loading, 50% with first target loading, 75% with multiple targets loaded, and 100% on boot completion. The mode always displays meaningful content — it never shows an empty or error state to the user.

Info

Because this mode transitions away automatically, you will only see it briefly during system boot. It serves as a visual confirmation that critical services initialized correctly.

Styles

The style option controls the visual presentation:

  • default — multi-line text list showing "Booting...", loaded/loading targets, and desired target. Green "Boot Complete" with check icon when finished. Good general-purpose readout.
  • minimal — single summary line: "Booting: target" or "Boot Complete". For narrow panels where a multi-line list would overflow.
  • progress — horizontal progress bar showing boot completion fraction (active targets / total targets), with a text label below. Clean, visual, instantly readable from across the room.
  • pie — radial/pie sweep indicator showing the same completion fraction. Compact, works well on small square panels. The sweep fills clockwise as boot advances.
  • verbose — detailed multi-row diagnostic view with status icons per phase. Shows loaded targets history, current loading target, desired final target, and progress count. Uses small fonts to pack maximum information. This is the troubleshooting view.

Options

Key Type Description Default Allowed Values
style string Resolution-specific visual presentation style for boot progress display layout Resolution-specific style names
color_accent string Accent color for boot progress indicators and phase highlighting on color panels amber cyan, green, amber, red, white, none

Configure options via the CLI:

cyberhudctl display systemd <key>=<value> [<key>=<value> ...]

CLI Examples

Set the style to progress bar:

cyberhudctl display systemd style=progress

Use the pie indicator on a small square panel:

cyberhudctl display systemd style=pie

Enable the diagnostic verbose view:

cyberhudctl display systemd style=verbose

Query current settings:

cyberhudctl display systemd

This returns all key=value pairs reflecting the active configuration.

Progress Calculation

The progress and pie styles compute boot completion as:

fraction = active_targets / total_targets

Target counts are read from systemctl list-units --type=target --all --no-legend. Each target with an "active" state contributes to the numerator. When target enumeration is unavailable (early boot or non-Linux), the mode falls back to a state-machine heuristic:

  • 0% — no target loading yet
  • 50% — first target loading
  • 75% — at least one target loaded, another loading
  • 100% — boot complete

Border Frame

When show_border is enabled, an 8-pixel decorative tile border is drawn around the panel edge. Content is inset by 8 pixels on each side. Panels smaller than 16×16 pixels skip the border automatically.

Layout Behavior

All styles optimize for the available panel space:

  • Adaptive fonts — the largest available font that fits the panel width is selected automatically.
  • Horizontal centering — text rows are centered within the effective width (accounting for border inset).
  • Vertical centering — the content block is centered vertically in the available space.
  • Row truncation — rows exceeding the panel width are truncated with an ellipsis.

The verbose style uses smaller fonts (ascii-4x6 or ascii-3x5) to fit more diagnostic rows, while progress and pie use larger fonts for the summary label since the visual indicator carries most of the information.

Panel Compatibility

This is a transient boot-time mode that activates automatically during daemon startup and transitions away once boot is complete. It works on all panels regardless of resolution or input configuration. On monochrome panels, the progress indicator renders as text percentage or simple bar without color. On slow-refresh panels, updates are batched to minimize redraws during boot progression.

Capability Description Behavior
MonoFast Fast-refresh monochrome OLED (128×32, 128×64, 128×128) Fully supported — text-based boot progress with periodic refresh during startup
MonoSlow Slow-refresh monochrome e-ink (122×250, 176×264, 200×200, 296×128, 400×300, 480×800, 800×480) Fully supported — static boot status, updates on milestone transitions only
GrayscaleFast Fast-refresh grayscale (160×80, 240×135, 240×240, 320×240, 480×320, 800×480) Fully supported — grayscale progress indicator with smooth updates
GrayscaleSlow Slow-refresh grayscale e-ink (122×250, 176×264, 200×200, 400×300, 800×480) Fully supported — static boot status, updates on milestone transitions only
ColorFast Fast-refresh color TFT (128×128, 160×80, 240×135, 240×240, 320×240, 480×320, 800×480) Fully supported — color progress bar with status-mapped indicators
ColorSlow Slow-refresh color e-ink (122×250, 176×264, 200×200, 400×300, 800×480) Fully supported — static boot status, updates on milestone transitions only

Non-interactive — pressing K1 or K2 navigates to dashboard.

Tip

Use style=pie on small square panels (128×128 or smaller) where text-heavy styles would be cramped. Use style=verbose when debugging boot issues — it shows the full target progression.

Snapshots

Color

color-slow-32x128 32x128
32x128
color-fast-32x128 32x128
32x128
color-slow-64x128 64x128
64x128
color-fast-64x128 64x128
64x128
color-fast-104x212 104x212
104x212
color-slow-104x212 104x212
104x212
color-fast-122x250 122x250
122x250
color-slow-122x250 122x250
122x250
color-slow-128x32 128x32
128x32
color-fast-128x32 128x32
128x32
color-fast-128x64 128x64
128x64
color-slow-128x64 128x64
128x64
color-128x128 128x128
128x128
color-slow-128x128 128x128
128x128
color-128x160 128x160
128x160
color-slow-128x160 128x160
128x160
color-fast-128x296 128x296
128x296
color-slow-128x296 128x296
128x296
color-135x240 135x240
135x240
color-slow-135x240 135x240
135x240
color-slow-160x80 160x80
160x80
color-160x80 160x80
160x80
color-slow-160x128 160x128
160x128
color-160x128 160x128
160x128
color-fast-176x264 176x264
176x264
color-slow-176x264 176x264
176x264
color-fast-200x200 200x200
200x200
color-slow-200x200 200x200
200x200
color-slow-212x104 212x104
212x104
color-fast-212x104 212x104
212x104
color-240x135 240x135
240x135
color-slow-240x135 240x135
240x135
color-240x240 240x240
240x240
color-slow-240x240 240x240
240x240
color-slow-240x320 240x320
240x320
color-240x320 240x320
240x320
color-fast-250x122 250x122
250x122
color-slow-250x122 250x122
250x122
color-slow-264x176 264x176
264x176
color-fast-264x176 264x176
264x176
color-fast-296x128 296x128
296x128
color-slow-296x128 296x128
296x128
color-fast-300x400 300x400
300x400
color-slow-300x400 300x400
300x400
color-320x240 320x240
320x240
color-slow-320x240 320x240
320x240
color-slow-320x480 320x480
320x480
color-320x480 320x480
320x480
color-slow-400x300 400x300
400x300
color-fast-400x300 400x300
400x300
color-480x320 480x320
480x320
color-slow-480x320 480x320
480x320
color-480x800 480x800
480x800
color-slow-480x800 480x800
480x800
color-800x480 800x480
800x480
color-slow-800x480 800x480
800x480

E-Ink

eink-104x212 104x212
104x212
eink-122x250 122x250
122x250
eink-128x296 128x296
128x296
eink-176x264 176x264
176x264
eink-200x200 200x200
200x200
eink-212x104 212x104
212x104
eink-250x122 250x122
250x122
eink-264x176 264x176
264x176
eink-296x128 296x128
296x128
eink-300x400 300x400
300x400
eink-400x300 400x300
400x300
eink-480x800 480x800
480x800
eink-800x480 800x480
800x480

Grayscale

grayscale-slow-32x128 32x128
32x128
grayscale-fast-32x128 32x128
32x128
grayscale-fast-64x128 64x128
64x128
grayscale-slow-64x128 64x128
64x128
grayscale-fast-104x212 104x212
104x212
grayscale-slow-104x212 104x212
104x212
grayscale-fast-122x250 122x250
122x250
grayscale-slow-122x250 122x250
122x250
grayscale-fast-128x32 128x32
128x32
grayscale-slow-128x32 128x32
128x32
grayscale-fast-128x64 128x64
128x64
grayscale-slow-128x64 128x64
128x64
grayscale-slow-128x128 128x128
128x128
grayscale-fast-128x128 128x128
128x128
grayscale-slow-128x160 128x160
128x160
grayscale-fast-128x160 128x160
128x160
grayscale-fast-128x296 128x296
128x296
grayscale-slow-128x296 128x296
128x296
grayscale-slow-135x240 135x240
135x240
grayscale-fast-135x240 135x240
135x240
grayscale-slow-160x80 160x80
160x80
grayscale-fast-160x80 160x80
160x80
grayscale-slow-160x128 160x128
160x128
grayscale-fast-160x128 160x128
160x128
grayscale-fast-176x264 176x264
176x264
grayscale-slow-176x264 176x264
176x264
grayscale-slow-200x200 200x200
200x200
grayscale-fast-200x200 200x200
200x200
grayscale-slow-212x104 212x104
212x104
grayscale-fast-212x104 212x104
212x104
grayscale-fast-240x135 240x135
240x135
grayscale-slow-240x135 240x135
240x135
grayscale-fast-240x240 240x240
240x240
grayscale-slow-240x240 240x240
240x240
grayscale-fast-240x320 240x320
240x320
grayscale-slow-240x320 240x320
240x320
grayscale-slow-250x122 250x122
250x122
grayscale-fast-250x122 250x122
250x122
grayscale-slow-264x176 264x176
264x176
grayscale-fast-264x176 264x176
264x176
grayscale-slow-296x128 296x128
296x128
grayscale-fast-296x128 296x128
296x128
grayscale-slow-300x400 300x400
300x400
grayscale-fast-300x400 300x400
300x400
grayscale-fast-320x240 320x240
320x240
grayscale-slow-320x240 320x240
320x240
grayscale-fast-320x480 320x480
320x480
grayscale-slow-320x480 320x480
320x480
grayscale-fast-400x300 400x300
400x300
grayscale-slow-400x300 400x300
400x300
grayscale-fast-480x320 480x320
480x320
grayscale-slow-480x320 480x320
480x320
grayscale-slow-480x800 480x800
480x800
grayscale-fast-480x800 480x800
480x800
grayscale-fast-800x480 800x480
800x480
grayscale-slow-800x480 800x480
800x480

Mono

mono-32x128 32x128
32x128
mono-slow-32x128 32x128
32x128
mono-64x128 64x128
64x128
mono-slow-64x128 64x128
64x128
mono-fast-104x212 104x212
104x212
mono-fast-122x250 122x250
122x250
mono-slow-128x32 128x32
128x32
mono-128x32 128x32
128x32
mono-128x64 128x64
128x64
mono-slow-128x64 128x64
128x64
mono-slow-128x128 128x128
128x128
mono-128x128 128x128
128x128
mono-fast-128x160 128x160
128x160
mono-slow-128x160 128x160
128x160
mono-fast-128x296 128x296
128x296
mono-slow-135x240 135x240
135x240
mono-fast-135x240 135x240
135x240
mono-slow-160x80 160x80
160x80
mono-fast-160x80 160x80
160x80
mono-slow-160x128 160x128
160x128
mono-fast-160x128 160x128
160x128
mono-fast-176x264 176x264
176x264
mono-fast-200x200 200x200
200x200
mono-fast-212x104 212x104
212x104
mono-fast-240x135 240x135
240x135
mono-slow-240x135 240x135
240x135
mono-slow-240x240 240x240
240x240
mono-fast-240x240 240x240
240x240
mono-slow-240x320 240x320
240x320
mono-fast-240x320 240x320
240x320
mono-fast-250x122 250x122
250x122
mono-fast-264x176 264x176
264x176
mono-fast-296x128 296x128
296x128
mono-fast-300x400 300x400
300x400
mono-slow-320x240 320x240
320x240
mono-fast-320x240 320x240
320x240
mono-slow-320x480 320x480
320x480
mono-fast-320x480 320x480
320x480
mono-fast-400x300 400x300
400x300
mono-fast-480x320 480x320
480x320
mono-slow-480x320 480x320
480x320
mono-fast-480x800 480x800
480x800
mono-slow-480x800 480x800
480x800
mono-fast-800x480 800x480
800x480
mono-slow-800x480 800x480
800x480