System Monitor
[system.monitor]enabled = true # sample CPU, memory, network, load, temperature, GPU VRAM, and disk statisticscpu_temp_sensor_path = "" # exact temp*_input path for CPU temperature override; empty = autocpu_poll_seconds = 2.0 # CPU usage, CPU temperature, and load averagegpu_poll_seconds = 0.0 # GPU temperature and VRAM usage (0 = disabled by default)memory_poll_seconds = 2.0 # RAM usagenetwork_poll_seconds = 3.0 # network throughputdisk_poll_seconds = 10.0 # disk usage and swap usageWhen disabled, Noctalia keeps system-monitor UI available but stops the background sampling thread. Bar sysmon widgets, desktop sysmon widgets, and the Control Center System tab show unavailable values until the setting is enabled again.
Poll intervals are configured globally under [system.monitor], not per widget. Each value is the number of seconds between samples for that metric group. A non-zero value is clamped to 1 to 120 seconds; setting a value to 0 disables that metric group entirely — it is never sampled and schedules no wakeups. Disabling gpu_poll_seconds is useful on laptops to avoid waking a discrete GPU. You can also adjust them in whole-second steps (down to 0) in Settings → Services → Advanced when the system monitor is enabled.
| Key | Default | Metrics |
|---|---|---|
cpu_poll_seconds | 2.0 | CPU usage %, CPU temperature, and load average (1 / 5 / 15 min) |
gpu_poll_seconds | 0.0 | GPU temperature and VRAM usage. Disabled by default so a discrete GPU is not woken on laptops; the Control Center GPU card stays hidden until you set a non-zero interval. If you enable it, 5 seconds is a good interval — GPU stats rarely need sub-second sampling, and a short interval keeps the GPU busy |
memory_poll_seconds | 2.0 | RAM usage % and used/total MB |
network_poll_seconds | 3.0 | Network download and upload throughput |
disk_poll_seconds | 10.0 | Disk usage % for paths used by bar sysmon widgets with stat = "disk_pct", plus swap usage % and used/total MB |
CPU usage and CPU temperature share cpu_poll_seconds because both are tied to the same CPU sampling pass. GPU temperature and VRAM share gpu_poll_seconds. Swap and disk usage share disk_poll_seconds. Network Rx and Tx share network_poll_seconds because they come from the same /proc/net/dev read. The aggregate network values exclude loopback; bar and desktop sysmon widgets can set interface to an exact /proc/net/dev interface name to show only that interface.
Bar and desktop sysmon widgets in graph mode, plus the Control Center System graphs, scroll using the same cadence as the fastest poll interval above (the minimum of the enabled, non-zero intervals). There is no separate graph-only setting. If every metric is set to 0, no history is recorded and the graphs stop updating.
CPU temperature auto-detection prefers known CPU hwmon drivers such as k10temp, zenpower, and coretemp. On AMD systems this normally selects the Tctl sensor exposed as temp1_input. To force a specific sensor, set cpu_temp_sensor_path to the exact sysfs input file:
[system.monitor]cpu_temp_sensor_path = "/sys/class/hwmon/hwmon3/temp1_input"When cpu_temp_sensor_path is set, Noctalia uses only that file. If the path is missing, unreadable, not a temp*_input file, or cannot be parsed, CPU temperature is reported as unavailable until the configuration is fixed.
To list available hwmon temperature inputs with their driver names, labels, and raw values:
for h in /sys/class/hwmon/hwmon*; do name="$(cat "$h/name" 2>/dev/null || echo unknown)" for input in "$h"/temp*_input; do [ -e "$input" ] || continue base="${input%_input}" label="$(cat "${base}_label" 2>/dev/null || basename "$base")" value="$(cat "$input" 2>/dev/null || echo unreadable)" printf '%s name=%s label=%s raw=%s\n' "$input" "$name" "$label" "$value" donedoneGPU temperature is read from Linux hwmon when available, with an NVML fallback for NVIDIA proprietary drivers. GPU VRAM is read from AMDGPU DRM sysfs when available, with the same NVML fallback.
Value highlighting
Section titled “Value highlighting”Bar sysmon widgets tint their value (icon, text label, graph line, and gauge fill) toward the widget’s highlight_color as the stat rises. Each stat has an activity threshold and a critical threshold, configured globally under [system.monitor]:
[system.monitor]cpu_usage_activity_threshold = 50 # %cpu_usage_critical_threshold = 90 # %cpu_temp_activity_threshold = 60 # °Ccpu_temp_critical_threshold = 85 # °Cgpu_temp_activity_threshold = 60 # °Cgpu_temp_critical_threshold = 85 # °Cgpu_usage_activity_threshold = 50 # %gpu_usage_critical_threshold = 95 # %gpu_vram_activity_threshold = 50 # %gpu_vram_critical_threshold = 90 # %ram_pct_activity_threshold = 60 # %ram_pct_critical_threshold = 90 # %swap_pct_activity_threshold = 20 # %swap_pct_critical_threshold = 80 # %disk_pct_activity_threshold = 80 # %disk_pct_critical_threshold = 95 # %net_rx_activity_threshold = 1 # MB/snet_rx_critical_threshold = 50 # MB/snet_tx_activity_threshold = 1 # MB/snet_tx_critical_threshold = 50 # MB/sThe value’s color is interpolated between the widget’s regular foreground color (its color setting) and its highlight_color (set per widget — see the sysmon widget). Below the activity threshold the value stays at its regular color; the moment it crosses the activity threshold it jumps to a small highlight tint, then ramps the rest of the way to the full highlight_color, reaching it at or above the critical threshold. Set the critical threshold to 0 to disable highlighting for that stat.
| Key | Default | Unit | Stat |
|---|---|---|---|
cpu_usage_activity_threshold / cpu_usage_critical_threshold | 50 / 90 | % | CPU usage |
cpu_temp_activity_threshold / cpu_temp_critical_threshold | 60 / 85 | °C | CPU temperature |
gpu_temp_activity_threshold / gpu_temp_critical_threshold | 60 / 85 | °C | GPU temperature |
gpu_usage_activity_threshold / gpu_usage_critical_threshold | 50 / 95 | % | GPU usage |
gpu_vram_activity_threshold / gpu_vram_critical_threshold | 50 / 90 | % | GPU VRAM usage |
ram_pct_activity_threshold / ram_pct_critical_threshold | 60 / 90 | % | RAM usage (also ram_used) |
swap_pct_activity_threshold / swap_pct_critical_threshold | 20 / 80 | % | Swap usage |
disk_pct_activity_threshold / disk_pct_critical_threshold | 80 / 95 | % | Disk usage |
net_rx_activity_threshold / net_rx_critical_threshold | 1 / 50 | MB/s | Network download |
net_tx_activity_threshold / net_tx_critical_threshold | 1 / 50 | MB/s | Network upload |
The ram_used and ram_pct stats share the ram_pct_* thresholds, since both are driven by the same RAM usage percentage. You can also adjust every threshold in Settings → Services when the system monitor is enabled; each stat has a single dual-handle range slider — the left handle sets the activity threshold and the right handle the critical threshold, and the handles cannot cross, so the activity threshold can never exceed its critical threshold.