Skip to content

Repository files navigation

Nitro Tray

Ultra-lightweight alternative to NitroSense for Acer Nitro laptops. System tray app, no background services. Provided as-is, use at own risk. Tested on Acer Nitro 16S AI (AN16S-61). Available for Windows and Linux.

Key features

  • Power profile: quiet / balanced / performance on AC; eco / balanced on battery
  • Enforces smart charge (non-configurable)
  • Enforces auto fan speed (non-configurable)
  • Stuck-fan auto-recovery: when the machine is cool but the CPU fan stays spinning after load, the loop re-applies the current profile (config-gated, off by default)
  • CPU temperature in the tray menu and hover text (shown while the fan-recovery loop is enabled)
  • Keyboard backlight off
  • Auto-start at logon
  • Profile cycling hotkey

Settings are applied at startup, on power transitions, on resume, and at profile change.

Configuration

Optional nitro-tray.toml, read at startup (restart to apply). Copy nitro-tray.example.toml from the repo as a starting point. File location: see the Windows / Linux guide. Without it, defaults apply.

Key Type Default Meaning
ac_profile string "balanced" Profile on AC: quiet | balanced | performance
battery_profile string "eco" Profile on battery: eco | balanced
auto_switch bool true Auto-apply profile on power transitions
reapply bool false Periodically re-assert firmware state
reapply_interval_secs integer 30 Reapply interval (seconds)
fan_recovery bool false Stuck-fan auto-recovery loop (also feeds the tray CPU temperature)
fan_recovery_interval_secs integer 10 Recovery sampling cadence (seconds)
fan_recovery_threshold_c integer 43 Fire when CPU temp is below this (°C) while the fan spins
fan_recovery_samples integer 2 Consecutive below-threshold samples that fire the recovery
fan_recovery_cooldown_secs integer 60 Minimum gap between recoveries (seconds)
hotkey string "ctrl-alt-p" Profile-cycle hotkey: ctrl|alt|shift|win + key (az, 09, f1f24)
keyboard_led_off bool true Force keyboard backlight off on every apply
log bool true Write log file (see the platform guides)

Smart charge (80% cap) is always on, not configurable. The fan-recovery remedy is fixed (re-applies the current profile pick); the five fan_recovery* keys only tune detection and cadence.

Platforms


Windows platform guide

Windows 10 1809+ / Windows 11, x64. Single self-contained exe.

  • Runs elevated (Acer WMI is admin-only) — UAC prompt on launch.
  • "Start at logon" tray checkbox installs a silent elevated logon task (off by default).
  • Single instance.

NitroSense and other Acer user-mode services can be disabled — the app talks to the firmware directly. Disable AASSvc, Acer Care Center, Acer Quick Access, Acer Hardware Launch App, AcerHardwareService, AcerDeviceEnablingServiceV2 (keep wmiacpi intact).

Power plans

The app creates the four Nitro plans (from Windows Balanced) if missing and detects them by name at startup. Manual edits to a plan are respected.

Plan CPU Min / Max Boost
Nitro-Quiet 5 / 45 off
Nitro-Balanced 5 / 99 default
Nitro-Performance 5 / 100 aggressive
Nitro-Eco 5 / 40 off

Install & run

  1. Download nitro-tray.exe from the GitHub Releases page.
  2. Put it in a writable folder you own (not Program Files) — log, config, state are written beside the exe.
  3. Launch once (accept UAC).
  4. Optional: add nitro-tray.toml (see Configuration).
  5. Tick "Start at logon" in the tray menu.

Files

What Where
Config nitro-tray.toml (optional)
Log nitro-tray.log (config log, default on)
State nitro-tray.state.toml

Linux platform guide

One unprivileged process; root is needed only for one-time setup (kernel module + udev rules).

  • Hardware: Acer Nitro 16S AI (AN16S-61), x86_64. Verified on Cinnamon/X11.
  • Required: nitro-wmi kernel module (installed by setup; DKMS rebuilds it after kernel updates).
  • Tray: StatusNotifier-capable desktop (GNOME, KDE, Cinnamon, Xfce, ...).
  • Hotkey: X11 only (Wayland skips it with a log warning).
  • power-profiles-daemon conflicts with the app — see install step 3.

Install

  1. Download the release and put nitro-tray on your PATH:

    mkdir -p ~/.local/bin
    cp nitro-tray ~/.local/bin/
    
  2. One-time root setup:

    sudo ./linux/setup.sh
    

    Installs the nitro-tray group (and adds you), the nitro-wmi module (DKMS + boot autoload), udev rules (device access + cpufreq group-writability), and the tray icons.

  3. Disable power-profiles-daemon if present — it rewrites the same governor/EPP/boost attributes the app tunes. Check:

    systemctl status power-profiles-daemon   # unit exists?
    pgrep -f power-profiles-daemon           # process running?
    

    The app also logs power-profiles-daemon is running ... at startup if it detects the daemon. Nothing found → skip the rest:

    sudo systemctl disable --now power-profiles-daemon
    

    If the unit is missing but a process still runs (session-launched), mask instead: sudo systemctl mask power-profiles-daemon. The desktop power-mode slider stops working either way.

  4. Log out and back in (group membership), then run nitro-tray. Never run it as root.

  5. Optional: copy nitro-tray.example.toml to ~/.config/nitro-tray/nitro-tray.toml; tick "Start at logon" for autostart.

Files

What Where
Config ~/.config/nitro-tray/nitro-tray.toml
Log ~/.local/state/nitro-tray/nitro-tray.log
State ~/.local/state/nitro-tray/nitro-tray.state.toml
Autostart ~/.config/autostart/nitro-tray.desktop

$XDG_CONFIG_HOME / $XDG_STATE_HOME override config/state/log paths.

Troubleshooting

Log: ~/.local/state/nitro-tray/nitro-tray.log.

  • nitro-wmi: chardev missing — module not loaded: modprobe nitro-wmi, check /dev/nitro-wmi, dmesg | tail. After kernel updates, check dkms status.
  • chardev access denied / usage-mode adapter unavailable — permissions: session in the nitro-tray group (id), devices root:nitro-tray 0660.
  • power: failed to ensure plan support / Failed: governor, ... — cpufreq attributes not group-writable: sudo udevadm control --reload-rules && sudo udevadm trigger, or reboot.
  • power-profiles-daemon is running ... — see install step 3.

Uninstall

sudo dkms remove -m nitro-wmi -v 0.1 --all
sudo rm /etc/modules-load.d/nitro-wmi.conf
sudo rm /etc/udev/rules.d/90-nitro-tray.rules /usr/local/libexec/nitro-tray-cpufreq
sudo udevadm control --reload-rules
sudo groupdel nitro-tray
rm -rf ~/.config/nitro-tray ~/.config/autostart/nitro-tray.desktop ~/.local/state/nitro-tray

If you disabled power-profiles-daemon during install, re-enable it:

sudo systemctl unmask power-profiles-daemon
sudo systemctl enable --now power-profiles-daemon

Development

Hardware opcode tables and firmware encodings: docs/firmware-notes.md.

cargo build
cargo test

Probe binaries run elevated, on-device and modify the hardware/OS state they inspect (probe_charge_read and probe_sysinfo are read-only); cargo test runs none of them. Hardware paths can't be verified off-device.

Windows

Building

Prerequisites: Rust stable with the MSVC toolchain, VS Build Tools 2022 with the C++ workload + Windows 10/11 SDK.

git clone <this-repo>
cd nitro-tray
cargo build --release    # debug: cargo build

Binary: target\release\nitro-tray.exe. Verify: cargo test (pure unit tests, safe anywhere), cargo clippy.

Probe binaries

  • probe_wmi — platform profile / fan / readback
  • probe_hid — HID usage mode
  • probe_charge — smart charge toggle / readback
  • probe_charge_read — smart charge read-only
  • probe_power — power plans / CPU tuning
  • probe_mi — raw mi.dll transport diagnostics
  • probe_sysinfo — CPU telemetry pin (read-only): GetGamingSysInfo typing, temp/RPM selectors, decode
  • probe_fan_recovery — stuck-fan reproduction + remedy cycles (spin / cooldown / cycle / unstuck)

Run elevated on the target laptop only — they temporarily change firmware/OS state. Never invoked by the app, tests, or build.

Linux

Building

Prerequisites: Rust stable, dkms (falls back to a direct module build), C compiler + kernel headers.

git clone <this-repo>
cd nitro-tray
cargo build --release

Binary: target/release/nitro-tray. Verify: cargo test, cargo clippy.

Probe binaries

linux_power_probe verifies the per-profile CPU tuning (governor, EPP, boost) on-device. The Windows probes build as stubs on Linux.

About

Power management for Acer Nitro 16S AI

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages