Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

asusmode

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.

Requirements

  • Windows, on an ASUS laptop with the ATK ACPI driver present (exposes \\.\ATKACPI).
  • Rust (edition 2024) to build.

Build

cargo build --release

This 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\.)

Usage

Command line

asusmode                 # print the current mode
asusmode silent          # set Silent   (aliases: quiet)
asusmode performance     # set Performance / Balanced  (alias: perf)
asusmode turbo           # set Turbo

Changing 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.

HTTP control server

asusmode serve            # listen on 0.0.0.0:8787 (default)
asusmode serve 0.0.0.0:9000   # custom address/port

Simple, 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/turbo

Desktop widget

asusmode 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.

Install as a startup service

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.ps1

After 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 asusmode

Manage 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).

Controlling from WSL2

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.)

Notes / limitations

  • 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 asusmode reports 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.
  • performance is the middle tier ("Balanced" in older ASUS docs), not the top one; turbo is the highest.

About

Special purpose ASUS silent/performance/turbo mode for ROG Strix Scar with CPU/GPU temps and fan speeds, and HTTP API accessible from WSL2, vibe-coded with ClaudeCode

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages