CoolerControl app for Linux v5.0 brings a big overhaul

Published on:

Managing various types of coolers under Linux has never looked sleeker! The latest CoolerControl v5.0.0 release is out now.

What exactly is it? CoolerControl is an open-source application for monitoring and controlling supported cooling devices on Linux. It features a system daemon with a built-in Web UI, an optional desktop app, and a
comprehensive REST API.

In the 5.0.0 release that just arrived it includes a fully rebuilt UI, along with a new auto-creation profile wizard to help you deal with all the ins and outs of it. This should make the app a whole lot more approachable overall.

CoolerControl 5.0 on Fedora KDE

The full changelog is rather long, filled with all sorts of new features and tweaks to make it easier to use and better looking than ever.

Key Changes

Added

Changed

  • The daemon now runs on the compio runtime with io_uring by default, with a small tokio sidecar for dependencies that require it; --no-default-features still builds the tokio-only path.
  • PrimeVue was replaced by an in-house component kit built on reka-ui, covering dialogs, toasts, tooltips, dropdowns, selects, tables, inputs and confirms.
  • Toasts are capped, hover-pausable and copyable; dialogs, dropdowns and popovers share consistent offsets, shadows and stacking.
  • Fan channels now resolve to one canonical page regardless of where they are opened from.
  • Log output is bounded and de-duplicated: capped log buffers, an episode gate for repeated device errors, and coalesced SSE bursts.
  • Device UIDs are guarded against duplicates, so two identical devices no longer collapse into one.
  • Names are resolved once in the daemon and used consistently in logs, alerts and failsafe messages.
  • Settings moved from tabs to an anchored card grid.
  • Info and Tools was dissolved into the Home section.
  • Alert thresholds accept fan speeds up to 30000 RPM.
  • Warning and success colors darken on light themes to stay legible, and status colors are now checked for contrast in the test suite.
  • The desktop app authenticates with its own bearer token per connection instead of a shared session, and discards the web renderer while it sits in the tray.
  • The per-stream /sse/{logs,status,modes,alerts,notifications} routes are deprecated in favour of GET /sse, and are scheduled for removal in 5.2.0.
  • AMD GPU fan curves are no longer reset before every apply, and unusable curves are rejected rather than written.
  • Idle liqctld connections are reaped, and NVML is released when all GPUs are disabled or none are detected.
  • NVAPI thermal lookups and PCI bus lookups are cached.
  • LCD frames are packed in C and sent in a single transfer, the per-apply re-initialize was dropped, and single-temp images are rendered off the async runtime, so an LCD update costs far less.
  • Sysfs descriptors are held across ticks, sysfs values are read without heap allocation, and Time Average and EMA custom sensors keep a cached sample window, lowering per-tick overhead.
  • liqctld reports each LCD’s model, device path and framebuffer packing, and logs why a frame skips the rotation.
  • Live chart animation is throttled and paused off-screen.
  • The Makefiles were split and documented behind make help.
  • protoc is no longer a build dependency; protox generates the gRPC code.
  • The minimum supported Rust version is 1.88.
  • License headers were converted to SPDX short-form, an AUTHORS file was added, and REUSE compliance is checked in CI.
  • The OpenAPI specification is generated offline, pretty-printed, and refreshed on every version bump.
  • Many upstream dependencies updated across Cargo and npm, and derive_more, axum-typed-multipart and zstd compression were dropped.
  • Application icons were redrawn from generated sources: a symbolic tray icon sized to sit with its peers, notification icons matching the app stroke, and an alert badge that stays error-red on symbolic hosts.
  • The logo and fonts are bundled so they are content-hashed, and unhashed assets are revalidated rather than pinned, so a browser picks up a new UI build.
  • The Kraken 2023 firmware 2 LCD frame is sent once per update instead of twice, and LCD images are capped at liquidctl’s gif size limit.
  • Modals dim with opacity instead of a backdrop blur, which flickered on some GPU and QtWebEngine combinations.
  • Plugin services are restarted rather than replaced on a configuration change, and a service is installed when its plugin is enabled.
  • Plugins running under OpenRC require OpenRC 0.45 or newer.
  • Access tokens are validated against a SHA-256 digest instead of argon2, so an authenticated request no longer pays a password hash on every call; the argon2 hash is still written for backward compatibility.

Fixed

  • liqctld could be orphaned during a liquidctl error storm, and now exits promptly on shutdown.
  • Blank device UIDs on some systems (#594 (closed)).
  • RDNA3/4 AMD GPUs went undetected when the kernel overdrive mask was off (#589 (closed)).
  • Calibration now enters manual control mode before measuring (#583 (closed)).
  • Older AMD GPUs without hwmon load sensors report load from DRM fdinfo (#562 (closed)).
  • GPU stress tests now run off the async runtime and are judged by power draw, fixing newer cards.
  • Settings are skipped for channels a device no longer offers, instead of erroring.
  • Generated curve floors are clamped to the channel minimum so a low floor cannot stall a fan.
  • Kraken LCD writes could take a stale HID report as their answer, which surfaced as missing messages and bucket-switch errors while an image was uploading.
  • Single-temp LCD images were rendered to one shared file, so two LCD channels could tear each other’s image or display the wrong sensor.
  • Deleting a child custom sensor stripped its parent’s other sources.
  • Calibration trusts a fan’s RPM over a sub-floor stall reading, derives the sustain floor across misaligned sweeps, and corrects the inverse duty map’s boundaries.
  • Duplicate device UIDs no longer drop devices from AMD and liquidctl repositories.
  • Name overrides survive a save error instead of losing the cascade.
  • REST and gRPC server startup are decoupled, so one failing does not block the other.
  • Chart axis titles no longer overlap the neighbouring axis, and the temp line is clamped to range.
  • Charts and their observers are torn down when a page unmounts, which was the main source of memory growth in the desktop app over long sessions.
  • AMD zero-RPM support is detected by reading the firmware setting rather than guessing, a failed curve apply is aborted instead of half-written, and an EIO now says what caused it.
  • The desktop app no longer loops on reconnect notifications, applies certificate validation without a restart, and raises its window when tray-mode authentication fails.
  • The desktop app keeps only one daemon health probe in flight and restarts its connection loop when the event stream answers 401, instead of sitting on a dead session.
  • Korean locale detection, translations synced across all supported locales, and translations that had drifted from the English source refreshed.
  • Disabled IP family is logged at info instead of warning.
  • FIFO pairing could wedge the test suite, and sysfs read tests handle ENODATA.
  • SATA drive UIDs are derived from stable hardware identity, WWID first and then serial, with existing settings copied forward, so a drive keeps its settings across reboots and reconnects (#599 (closed)).
  • Drive power state is also read through SAT passthrough, so a sleeping drive is not woken to be measured.
  • A transient read failure on a File custom sensor no longer drops the sensor.
  • Each LCD channel renders to its own image file, shutdown settings whose image is gone are dropped, and the stock image is used when a configured shutdown image cannot be read.
  • Alerts re-evaluate when a source is removed, an edit that clears an alert notifies, an announced Error survives an edit, messages name the sensor that left the watch list and use resolved channel labels, the alert count follows silence expiry, and Error alerts are listed on Home.
  • Off-scheme colors and tag severities are drawn from the themed tokens.
  • The search field keeps a focus ring only for keyboard users and drops it after taking a result.
  • The Qt tray alert icon keeps its -symbolic suffix and falls back to the pre-rename name.
  • The application SVG opens within gdk-pixbuf’s 256-byte sniff window, so more icon loaders render it.
  • A Standard Function with a maximum step size advanced only one step every 30 seconds once the temperature went flat, because the step limiter stopped running and the safety latch was left to move the fan. The limiter now carries the ramp through to its target, including the last step to 0% or 100% when “Always apply 0% / 100%” is enabled, and the Threshold Hopping tooltip says that the maximum step size is always respected (#602 (closed)).
  • Malformed HTTP Basic credentials are rejected instead of panicking the request.
  • Repeated daemon warnings are reported once per outage rather than every tick.

Removed

  • The EMA Function type. Existing configurations are permanently converted to Identity on load; use an EMA Custom Sensor for temperature smoothing.
  • JSON theme file import and export. Theme codes are now the way to share a custom theme.
  • The legacy shell and Control views, and the per-device Settings tab.
  • PrimeVue, element-plus, vue-flow and radix-vue dependencies.
  • The notify subcommand, and the unused colors field from the LCD settings enum.
  • The gRPC server reflection service, and its build dependency.

Security

  • Device and channel name overrides reject injection-capable characters.
  • Sensor and channel labels are escaped in the chart tooltip, which is built as markup.
  • The desktop app pins and validates the daemon’s TLS certificate and confines its web engine to the daemon it is connected to.
  • The desktop app’s settings file is owner-only, and superseded access tokens are deleted.
  • npm dependency install scripts are denied during the UI build.
  • Backup archives are created owner-only, bounded on extraction, and restore only files listed in the manifest; restored credentials are written owner-only.
  • Dependencies updated to clear audit advisories.
  • Plugin services run with new privileges denied, and plugin folder ownership is hardened.
  • Failed authentication attempts are throttled per client address.

🌐 External Sources: gitlab.com
Article taken from GamingOnLinux.com.

Source link

Related