A small Windows tool to switch the operating mode (fan/thermal policy) on ASUS laptops — the same Silent / Performance / Turbo tiers as Armoury Crate — plus an HTTP control server and a little desktop widget. It talks directly to the ASUS ATK ACPI driver, so it works without Armoury Crate running.
- Windows, on an ASUS laptop with the ATK ACPI driver present (exposes
\\.\ATKACPI). - Rust (edition 2024) to build.
cargo build --releaseThis produces target\release\asusmode.exe. (Note: if you've set CARGO_TARGET_DIR,
the binary lands under that directory instead — e.g. %TEMP%\target\release\.)
asusmode # print the current mode
asusmode silent # set Silent (aliases: quiet)
asusmode performance # set Performance / Balanced (alias: perf)
asusmode turbo # set TurboChanging the mode actuates the hardware immediately. It also records the mode in the registry that Armoury Crate and the keyboard hotkey share — that write needs admin, so run from an elevated prompt if you want the bookkeeping kept in sync (without it the fan mode still changes; only the recorded "current mode" goes stale). See Notes below.
asusmode serve # listen on 0.0.0.0:8787 (default)
asusmode serve 0.0.0.0:9000 # custom address/portSimple, curl-friendly API (GET or POST both set, so no flags are needed):
GET /mode -> current mode, e.g. "turbo"
GET /mode/<name> -> set mode, returns the new mode (silent | performance | turbo)
curl http://HOST:8787/mode
curl http://HOST:8787/mode/turboasusmode serve also shows a small always-on window: the current mode (with a subtle
per-mode background tint and the active mode's button highlighted), CPU/GPU temperatures,
and CPU/GPU/system fan speeds. GPU temperature requires an NVIDIA GPU (read via the driver's
NVML). The window remembers its on-screen position between runs (and pulls itself back
on-screen if a saved spot is now off a disconnected monitor). Closing the window exits the
server.
The widget/server is best run as an elevated logon task so it starts automatically, can write the registry without a UAC prompt, and shows its window on your desktop.
# 1. Build, then copy the binary to a stable location
New-Item -ItemType Directory -Force "$env:LOCALAPPDATA\asusmode" | Out-Null
Copy-Item "target\release\asusmode.exe" "$env:LOCALAPPDATA\asusmode\asusmode.exe" -Force
# (if CARGO_TARGET_DIR points elsewhere, copy from there instead)
# 2. Open the firewall for port 8787 (run elevated) — adds both a standard
# Windows Defender rule and a WSL Hyper-V firewall rule
powershell -ExecutionPolicy Bypass -File scripts\firewall.ps1
# 3. Register the logon task (run elevated)
powershell -ExecutionPolicy Bypass -File scripts\install-task.ps1After a rebuild, refresh the installed copy and restart the task:
Stop-ScheduledTask asusmode
Copy-Item "target\release\asusmode.exe" "$env:LOCALAPPDATA\asusmode\asusmode.exe" -Force
Start-ScheduledTask asusmodeManage it with Start-ScheduledTask asusmode / Stop-ScheduledTask asusmode, or in
Task Scheduler. To uninstall: Unregister-ScheduledTask asusmode -Confirm:$false and
remove the firewall rules (asusmode 8787 and the asusmode-wsl-8787 Hyper-V rule).
WSL2 with default (NAT) networking reaches the Windows host at the default-gateway IP, so
the server binds 0.0.0.0 and the firewall script opens the port on both firewall layers:
WINHOST=$(ip route show default | awk '{print $3}') # host IP; can change across reboots
curl -s http://$WINHOST:8787/mode
curl -s http://$WINHOST:8787/mode/turbo(If you've switched WSL to mirrored networking, localhost works instead and you can
bind 127.0.0.1.)
- Current mode is read from the registry, not the firmware. On at least some models
the ACPI status read is write-only (it returns a constant), so
asusmodereports the mode last set by the hotkey, Armoury Crate, or this tool — all of which write the same registry value. - Armoury Crate's display won't update when you change the mode with this tool. Armoury keeps its live state in memory and only writes (never reads) those registry keys, so its GUI/OSD and the hotkey cycle won't notice external changes. The hardware mode is still correctly changed.
performanceis the middle tier ("Balanced" in older ASUS docs), not the top one;turbois the highest.