Skip to content

About

Alienware Command Center-style thermal & fan control for Linux — fan curves, thermal profiles, live monitoring, and a system-tray temperature readout

Topics

Resources

Stars

2 stars

Watchers

0 watching

Forks

Latest commit

 

History

17 Commits

Folders and files

Repository files navigation

AWCC-Linux

Alienware Command Center–style thermal & fan control for Linux.

A native Linux replacement for the thermal/fan features of Alienware Command Center: live temperature & fan monitoring, one-click thermal profiles, manual fan boost, and fully custom fan curves — driven by the mainline alienware-wmi kernel driver.

Dashboard

Custom fan curves Power & performance
Fan curves Power
Fan control Settings & automation
Fan control Settings

Features

  • Live dashboard — CPU/GPU temperatures, GPU load & power, all fan RPMs, and a scrolling temperature history graph.
  • Thermal profiles — switch between the firmware profiles exposed by your machine (quiet, cool, balanced, balanced-performance, performance, custom) with one click, straight to /sys/firmware/acpi/platform_profile.
  • Custom fan curves — draggable temperature→boost curves for the CPU and GPU fan groups, evaluated continuously by the daemon. This is the AWCC headline feature that Linux otherwise lacks.
  • Manual fan boost — pin the CPU/GPU fans to a fixed boost level.
  • Power & performance — a Power tab to cap the NVIDIA GPU board power (on GPUs that allow it), pick the CPU energy-performance preference and frequency governor, and tune Intel RAPL package power limits (PL1/PL2). The daemon enforces each override and cleanly restores the firmware value when you release it. (Note: many laptop GPUs — including the RTX 4090 Laptop — lock the power limit under Dynamic Boost; the app detects this and disables that control.)
  • Auto-profiles — automatically switch the thermal profile when you plug in or unplug the charger.
  • System tray — closing the window minimizes to the system tray (StatusNotifierItem, native on KDE Plasma). The tray shows live CPU/GPU temps on hover and offers quick thermal-profile and fan-mode switching plus Quit; left-click restores the window.
  • Live tray temperature — optionally render the current CPU and/or GPU temperature right on the tray icon (colour-coded green/amber/red), so you can watch temps at a glance without opening anything. Drawn as an icon pixmap so it shows even on hosts that ignore the Ayatana label extension.
  • Start on login — one toggle in Settings to autostart AWCC-Linux minimized to the tray (writes a standard ~/.config/autostart entry).
  • One-click updates — Settings → Updates checks GitHub for a newer release and installs it when you press Update. Optionally check once a day in the background (off by default); updates are never installed without you asking.
  • Terminal client — awcc-cli for scripting and headless use.
  • Safe by design — fan control uses the driver's additive fanN_boost mechanism. Boost only ever adds cooling on top of the embedded controller's own curve; the EC keeps its thermal-safety floor, so a curve can't undercool the machine.

How it works

  ┌────────────┐   Unix socket (JSON)   ┌──────────────────────────┐
  │  awcc GUI  │ ─────────────────────▶ │  awccd  (root daemon)     │
  │  awcc-cli  │ ◀───────────────────── │  • reads hwmon sensors    │
  └────────────┘   state stream         │  • runs fan-curve loop    │
                                        │  • writes platform_profile│
                                        │    and fanN_boost (sysfs) │
                                        └──────────────────────────┘
  • awccd runs as a small root systemd service. It is the only component that writes to /sys. It polls sensors, applies the active mode, and serves a local Unix socket at /run/awcc/awccd.sock (owned root:wheel, mode 0660). It also applies power overrides (GPU power via nvidia-smi, CPU EPP/governor, Intel RAPL limits) and auto-profile rules.
  • awcc (GTK4/libadwaita GUI) and awcc-cli connect to that socket. Because socket access is gated on the wheel group, control needs no password after install — the same trust boundary as sudo.
  • Zero third-party Python dependencies for the daemon (stdlib only). The GUI uses system PyGObject (GTK4 + libadwaita).

Supported hardware

Built and verified on an Alienware m18 R1 (Intel i9-13980HX + RTX 4090 Laptop) running Bazzite (Fedora Atomic / KDE), kernel 6.19.

It should work on any Dell/Alienware laptop where the mainline alienware-wmi driver exposes a hwmon device with fanN_boost attributes and the kernel exposes /sys/firmware/acpi/platform_profile. Check with:

grep . /sys/class/hwmon/*/name | grep alienware_wmi
cat /sys/firmware/acpi/platform_profile_choices

If fanN_boost isn't present, profile switching and monitoring still work, but custom curves / manual boost will be inert.

Requirements

  • Linux kernel with alienware-wmi (≥ 6.12 for the modern hwmon interface).
  • python3 (3.10+), python3-gobject, gtk4, libadwaita.
  • nvidia-smi (optional) for discrete-GPU temperature/power.
  • A systemd init.

On Bazzite / most desktop distros these are already present.

Install

curl -fsSL https://raw.githubusercontent.com/32bitcolor/awcc-linux/main/packaging/get.sh | bash

That downloads the latest release and runs its installer, which asks for your password once (pkexec/sudo). Prefer to read it first? It's packaging/get.sh — or install from a clone:

git clone https://github.com/32bitcolor/awcc-linux.git
cd awcc-linux
./packaging/install.sh        # prompts once for your password (pkexec/sudo)

Either way, this installs the app to /opt/awcc, enables and starts the awccd service, and adds an AWCC-Linux entry to your app menu plus awcc / awcc-cli in $PATH. Everything lands in writable locations, so it works on immutable distros (Bazzite, Silverblue, Kinoite).

Launch from your app menu, or:

awcc            # GUI
awcc-cli status # terminal

Updating

Open Settings → Updates and press Check for Updates. If a newer release exists, press Update, then Restart when the banner asks, and you're on the new version. There's no password prompt: the daemon downloads the release from GitHub and runs that version's packaging/install.sh for you. Your settings in /var/lib/awcc are kept.

Turn on Check for updates automatically to get a banner (and a tray menu item) when a new version comes out. From a terminal:

awcc-cli update            # check
awcc-cli update install    # install the latest release

Re-running the one-line install command also updates to the latest release, and from a git clone git pull && ./packaging/install.sh still works.

Uninstall

sudo /opt/awcc/uninstall.sh       # or ./packaging/uninstall.sh from a clone

CLI usage

awcc-cli status                          # temps, fans, mode, profile
awcc-cli watch                           # live-updating status
awcc-cli profile performance             # set a firmware thermal profile
awcc-cli mode custom                     # follow the fan curves
awcc-cli boost gpu 80                    # manual: GPU fans to 80% boost
awcc-cli curve cpu                       # show the CPU fan curve
awcc-cli curve cpu 40:0 60:30 80:70 90:100   # set the CPU fan curve (temp:boost)

awcc-cli gpu-power 150                    # cap GPU to 150W ('auto' to release)
awcc-cli cpu-epp performance              # CPU energy-perf preference ('auto' to release)
awcc-cli cpu-gov performance              # CPU governor
awcc-cli cpu-pl pl1 65                    # CPU package power limit PL1 (watts)
awcc-cli auto on ac=performance battery=quiet   # auto-switch profile by AC state
awcc-cli auto off
awcc-cli update                           # check for a newer release
awcc-cli update install                   # install it
awcc-cli update auto on                   # opt in to daily background checks

Development

Run the daemon unprivileged (hardware writes become no-ops, everything else is live) and point the clients at a throwaway socket:

export AWCCD_DEV=1
export AWCCD_RUN_DIR=/tmp/awcc AWCCD_STATE_DIR=/tmp/awcc
export AWCCD_SOCKET=$AWCCD_RUN_DIR/awccd.sock
mkdir -p $AWCCD_RUN_DIR
python3 -m awccd.main &
./awcc-cli status
./awcc

Layout

Path Purpose
awccd/ root daemon: hardware.py (sysfs/nvidia), config.py (curves), engine.py (control loop), server.py (socket), updater.py (GitHub release check + install), main.py
awcc_client.py shared socket client
awcc_gui/ GTK4 GUI: app.py, curve_editor.py, graph.py, tray.py (system tray), settings.py (autostart/tray prefs), backend.py (socket bridge)
awcc, awcc-cli launchers
packaging/ systemd unit, .desktop, install/uninstall, get.sh (one-line installer)

Safety notes

  • Fan control uses the driver's additive fanN_boost mechanism: boost only ever adds cooling on top of the embedded controller's own curve, so a curve or manual level can't undercool the machine — the EC keeps its safety floor.
  • Power profile and fan mode are independent. The daemon keeps whatever platform_profile you selected and layers boost on top; it never overrides your profile. (On the Alienware m18 R1 boost is honoured under any profile. A few other models only honour fanN_boost while the custom profile is active — there, pick the Custom profile in addition to a fan mode.)
  • The daemon writes defensively — a single failed sysfs write is logged and skipped, never crashing the control loop.
  • Nothing is exposed over the network; the only interface is a local, wheel-group Unix socket. The only outbound connections are update checks and downloads, over HTTPS to this repo on GitHub, and only when you press the button or turn on automatic checks.

Releasing

The in-app updater installs the latest GitHub Release. To ship one:

  1. Bump __version__ in both awccd/__init__.py and awcc_gui/__init__.py.
  2. Commit, then tag and publish the release with a matching vX.Y.Z tag: gh release create vX.Y.Z --generate-notes

The updater refuses a release whose code doesn't carry the version in its tag.

Disclaimer

This is an independent project. It is not affiliated with, endorsed by, or supported by Dell or Alienware. "Alienware" and "Alienware Command Center" are trademarks of their respective owners. Use at your own risk.

License

MIT — see LICENSE.

About

Alienware Command Center-style thermal & fan control for Linux — fan curves, thermal profiles, live monitoring, and a system-tray temperature readout

Topics

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages