A native Linux control panel for Acer Predator, Nitro and related notebooks. It provides performance profiles, fan control, lighting, selected firmware options and live telemetry without requiring PredatorSense or NitroSense.
The Predator Helios Neo 16 PHN16-72 is the reference-tested platform. Since v0.2, ASense discovers compatible Linux, Acer WMI and HID interfaces on other models and shows only the controls found on the machine.
- profile choices from live Linux kernel interfaces, with a known-command Acer Gaming-WMI fallback whose writes are verified by readback;
- firmware Auto, manual CPU/GPU and Maximum fan modes through kernel PWM or Acer Gaming-WMI;
- temperatures, load and up to eight detected fan RPM channels;
- NVIDIA load, VRAM, clocks, power, P-state and throttle telemetry;
- exact PHN16-72 Turbo GPU offsets with NVML readback and rollback;
- one-to-four-zone WMI lighting;
- ENEK5130 keyboard and cover-logo lighting with runtime-discovered zones and effects;
- battery charge limit and firmware calibration;
- USB-off charging, keyboard timeout, boot sound, LCD override and rear-logo controls when exposed by firmware;
- compact controls plus advanced graphs and hardware information;
- English, Czech and Simplified Chinese UI.
Missing capabilities are hidden independently: a notebook can have profiles and RPM without fan writes, or lighting without battery options.
Auto and Maximum do not require RPM sensors or temperature telemetry. Manual control requires readable CPU/GPU setpoints and valid CPU/GPU watchdog temperatures. An unavailable reading is displayed as unavailable, not zero. A verified firmware mode or speed setpoint does not prove the physical fan speed; tachometer readings and observed cooling remain separate evidence.
| Model | Profiles | Fans | Lighting | Platform |
|---|---|---|---|---|
PHN16‑72 |
✅ | ✅ | ✅ | ✅ |
PH16‑72 |
🟢 | 🟢 | 🔎 | 🔎 |
PT14‑51 |
🟢 | 🟢 | 🔎 | 🔎 |
AN515‑58 |
🟢 | 🟢 | 🟡 | 🔎 |
PHN16‑71 |
🟢 | 🟢·🔎 | 🔎 | 🔎 |
PH16‑71 |
🟢 | 🟢·🔎 | 🔎 | 🔎 |
PH18‑71 |
🟢 | 🟢·🔎 | 🔎 | 🔎 |
PHN14‑51 |
🔎 | 🔎 | 🟡 | 🔎 |
PHN16S‑71 |
🤝 | 🤝 | 🟡 | 🔎 |
PH18‑73 |
🔎 | 🤝·🔎 | 🔎 | 🔎 |
AN17‑51 |
🔎 | 🔎 | 🤝 | 🔎 |
AN14‑41 |
🔎 | 🔎 | 🤝 | 🔎 |
AN16‑51 |
🔎 | 🤝·🔎 | 🤝 | 🔎 |
ANV15‑52 |
🔎 | 🔎 | 🔎 | 🔎 |
PHN16‑73 |
🔎 | 🔎 | 🟡 | 🔎 |
AN16S‑61 |
🔎 | 🔎 | 🔎 | 🔎 |
AN515‑45 |
🔎 | 🔎 | 🟡 | 🔎 |
AN515‑55 |
🔎 | 🔎 | 🟡 | 🔎 |
AN515‑56 |
🔎 | 🔎 | 🟡 | 🔎 |
AN515‑57 |
🔎 | 🔎 | 🟡 | 🔎 |
AN517‑41 |
🔎 | 🔎 | 🟡 | 🔎 |
PH315‑52 |
🔎 | 🔎 | 🟡 | 🔎 |
PH315‑53 |
🔎 | 🔎 | 🟡 | 🔎 |
PH315‑54 |
🔎 | 🔎 | 🟡 | 🔎 |
PH317‑53 |
🔎 | 🔎 | 🟡 | 🔎 |
PH517‑61 |
🔎 | 🔎 | 🟡 | 🔎 |
PT314‑51 |
🔎 | 🔎 | 🟡 | 🔎 |
PT315‑51 |
🔎 | 🔎 | 🟡 | 🔎 |
PT316‑51 |
🔎 | 🔎 | 🟡 | 🔎 |
PT515‑51 |
🔎 | 🔎 | 🟡 | 🔎 |
PT516‑52s |
🔎 | 🔎 | 🟡 | 🔎 |
Legend: ✅ Reference tested · 🟢 Linux provides it · 🟡 Known Acer controller/protocol · 🔎 Enabled only when the live probe finds it · 🟢·🔎 RPM is available, fan control is probed · 🤝 Community confirmed · 🤝·🔎 Only the specifically reported fan capability is confirmed.
PHN16-72 is the full reference platform. PHN14-51 has a known three-zone WMI layout; PHN16S-71 and PHN16-73 use ENEK5130 lighting. Yellow does not force a control: it still appears only after the controller answers correctly.
Some Predator models that the in-kernel acer_wmi driver does not list yet,
such as PHN16S-71, need its PredatorSense v4 support enabled explicitly. It
exposes fan RPM, the CPU/GPU temperatures Manual fan mode requires, and the
kernel platform profile (with performance as the firmware's Turbo mode)
through the signed Ubuntu module, so it also works with Secure Boot. This was
reported on PHN16S-71, board FTYPE_ARX, BIOS V1.26; it is an opt-in kernel
configuration for that cohort, not an automatic setting for every Acer:
echo "options acer_wmi predator_v4=1" | sudo tee /etc/modprobe.d/acer-wmi-predator.conf
sudo update-initramfs -uReboot after changing this option. To undo it, remove that configuration file,
run sudo update-initramfs -u and reboot. The option must be present in the
installed kernel (modinfo acer_wmi); ASense does not replace the signed driver.
Community confirmations apply to individual capabilities and builds. PH18-73
reports Auto/Maximum without RPM, and its raw profile 0x02 remains unknown.
AN17-51 has an exact static-lighting quirk; AN14-41 accepts its documented boot
record without using that record for writes. AN16-51 exposes one logical
global-color zone because independent zone writes are not confirmed.
The fixes still need testing on the reporters' machines. See the
capability evidence and remaining limits.
99 model and internal identifiers from the research inventory
The following identifiers occur in official Acer Sense packages or public hardware reports. They are useful machines to test; they are not an all-feature allow-list.
PH16-71 PH18-71 PH3D15-71 PHN16-71 PT14-51 PT16-51 PTX17-71
PH16-72 PH18-72 PHN14-51 PHN16-72 PHN18-71 PTN16-51 T7001
PH16-73 PH18-73 PHN14-71 PHN16-73 PHN18-72 PHN16S-71 PT14-52T PTN16-71
AN14-41 AN16-41 AN16-42 AN16-43 AN16-51 AN16-61 AN16-72 AN16-73
AN16S-61 AN18-61 AN17-41 AN17-42 AN17-51 AN17-71 AN17-72
ANV14-61 ANV14-62 ANV14-71 ANV15-41 ANV15-42 ANV15-51 ANV15-52
ANV16-41 ANV16-42 ANV16-61 ANV16-71 ANV16-72 ANV16S-61 ANV16S-71
ANV17-41 ANV17-61
AN515-42 AN515-43 AN515-44 AN515-45 AN515-46 AN515-47 AN515-51s
AN515-52 AN515-53 AN515-54 AN515-55 AN515-56 AN515-57 AN515-58
AN517-41 AN517-42 AN517-43 AN517-51 AN517-52 AN517-53 AN517-54
AN517-55 AN715-41 AN715-51 AN715-52
PH315-52 PH315-53 PH315-54 PH315-55 PH317-53 PH317-54 PH517-51
PH517-52 PH517-61 PH717-71 PH717-72 PT314-51 PT315-51 PT314-52s
PT315-52 PT316-51 PT316-51s PT515-51 PT515-52 PT516-52s PT917-71
Battery/APGE discovery can also help non-gaming Acers. Public working reports
include A315-24PT, A315-44P, A315-59, A315-510P, A515-45,
A515-46-R14K, A715-42G, AG15-42P, AV15-53P, EUN314A-51W,
AN515-44, AN515-57, AN515-58, AN517-54, ANV15-51, AN16-43-R7N7,
ANV16-42, PHN16-71, SF314-34, SF314-43, SFE16-44-R48X,
SFG14-63-R6PU, SFG16-72, SFX14-71G and SFX16-61G.
The model names above do not control discovery. The live backend order is:
profiles: kernel platform_profile -> Acer Gaming-WMI -> unavailable
fans: kernel PWM -> Acer Gaming-WMI -> RPM only
lighting: zoned WMI or a detected ENEK5130 target
Kernel-backed profile choices come from the live kernel choices interface.
The Gaming-WMI fallback instead exposes the driver's bounded set of known
commands; it is not a firmware-enumerated list. The probe makes this distinction
explicit as profile.choices.source = kernel-platform-profile or
known-gaming-wmi-commands.
The battery 80% health limit is a firmware setting, not a Linux charge threshold file. Enabling it while the battery is already above 80% does not actively discharge the battery; the effect becomes visible after normal use, when firmware prevents a subsequent charge from exceeding the limit.
On Ubuntu 26.04 amd64, download the v0.4.0 DEB and its SHA-256 file, then verify and install them:
sha256sum --check asense-v0.4.0-ubuntu-26.04-amd64.deb.sha256
sudo apt install ./asense-v0.4.0-ubuntu-26.04-amd64.debThe package version is 0.4.0-1~local2. It upgrades an existing DEB/PPA
installation together with the daemon and DKMS source, and sorts below the
PPA revision so normal APT updates can replace it automatically.
The ASense PPA
provides 0.4.0 (0.4.0-1~ppa1~resolute1) for Ubuntu 26.04 amd64.
On Ubuntu 26.04, install ASense and receive updates through APT:
sudo add-apt-repository ppa:fladirmacht/asense
sudo apt update
sudo apt install asenseAPT installs the application, privileged daemon, DKMS transport and desktop
integration together. Rust is not required. Remove the package with
sudo apt remove asense, or remove its ASense-owned configuration and state as
well with sudo apt purge asense.
The recommended release asset is the
ubuntu-26.04-x86_64-installer ZIP.
It contains prebuilt asense and asensed binaries, so Rust is not required.
Ubuntu 26.04 x86_64 is the supported prebuilt baseline.
Install runtime and optional DKMS prerequisites:
sudo apt update
sudo apt install \
build-essential dkms "linux-headers-$(uname -r)" kmod udev util-linux \
python3 unzip mokutil desktop-file-utils \
libgtk-3-0t64 libwebkit2gtk-4.1-0 libxdo3 libssl3t64Download the installer ZIP and matching .zip.sha256 from the Release page,
then verify and install it as the logged-in desktop user (not with sudo):
sha256sum --check asense-v0.4.0-ubuntu-26.04-x86_64-installer-*.zip.sha256
unzip asense-v0.4.0-ubuntu-26.04-x86_64-installer-*.zip
cd asense-v0.4.0-ubuntu-26.04-x86_64-installer-*/
./install.shThe installer requests elevation only for system files, builds the optional DKMS transport when needed, configures the daemon/socket and verifies the installation. Re-running a newer installer upgrades in place.
Standalone releases can be reinstalled or upgraded in place. A Debian package
can likewise be reinstalled or upgraded through APT and safely takes ownership
of an older standalone installation. To avoid mixed ownership, the standalone
installer and uninstaller refuse to modify an installation currently managed
by dpkg. Run sudo apt purge asense before switching from the Debian package
back to a standalone release; a plain apt remove deliberately leaves package
state whose later purge could otherwise affect the standalone installation.
The asense AUR source-package templates build ASense and its DKMS transport
from the tagged source with the system Rust toolchain. First publication is
pending. Check the
AUR package page before using
the following commands; they require a published package. Clone and install
as your regular build user:
git clone https://aur.archlinux.org/asense.git
cd asense
makepkg -si
sudo asense-configure-user "$USER"The final command explicitly selects the desktop account allowed to use the
private ASense control socket; the package never guesses the packager's user.
Remove it with sudo pacman -Rns asense.
Launch ASense from the application menu or run:
asenseCreate a local read-only report for a GitHub issue with:
asense probe > asense-probe.json
asense probe --summaryThe probe can run while the ASense window is open. The first command creates the authoritative schema-4 JSON attachment. The second prints a compact human-readable view of a fresh capture; it does not replace the JSON evidence.
The report contains model, profile, fan, known WMI and known HID capability
data. It sends HELLO 2 followed by the fixed read-only DIAG PASSIVE request
to the local daemon. It does not call general capability discovery, send an
ENEK target selector or invoke a setter. It performs no upload. The JSON omits
serials, UUIDs, hostname, user and network identity, boot and storage identity,
HID serial/physical paths, journals, raw ACPI tables, absolute device paths and
the process environment. Review it before sharing; the exact collection,
privacy and support-state contract is documented in
Probe privacy and support workflow.
The current reader also accepts the original schema-3 reports; runtime control
continues to negotiate HELLO 2.
Uninstall with the copy retained by the installer:
/usr/libexec/asense/uninstall.shUninstall requests and verifies Auto when fan control is available and reports an absent interface separately. It removes ASense services, DKMS/HWDB/udev integration and the desktop entry. Other firmware settings (profile, lighting, charge limit and similar choices) remain configured.
DKMS uses the distribution signing setup. If module loading reports
Key was rejected by service, import the key path printed by DKMS (commonly
/var/lib/shim-signed/mok/MOK.der) and complete MOK enrollment after reboot:
sudo mokutil --import /var/lib/shim-signed/mok/MOK.derInstall build dependencies:
sudo apt update
sudo apt install \
build-essential rustc cargo pkg-config git dkms \
"linux-headers-$(uname -r)" libelf-dev \
libgtk-3-dev libwebkit2gtk-4.1-dev libxdo-dev libssl-dev \
desktop-file-utils python3 mokutil udevUse the Rust toolchain installed by the operating system. ASense does not install, pin, downgrade or override it. Then run:
cargo test --locked
cargo build --release --locked --bin asensed --no-default-features
cargo build --release --locked --bin asense --features gui
./install.sh- profile and WMI settings are read back after writing;
- failed multi-step fan/profile changes use the existing rollback path;
- Manual fan mode is tied to the GUI session and returns to Auto after a disconnect;
- a confirmed Maximum request remains active after the GUI closes; daemon restart and resume reconciliation return firmware control to Auto;
- HID lighting without a getter shows
State unknownafter discovery andLast appliedafter a successful write; - battery calibration shows only real firmware state and live battery/AC telemetry. Keep the AC adapter connected during calibration;
- NVIDIA offsets and the Predator hardware-key mapping remain exact PHN16-72 features.
The GUI is unprivileged. Hardware writes run through the root-owned,
socket-activated asensed helper. ASense exposes typed profile, fan, lighting
and platform operations; it does not expose a raw WMI/ACPI/EC/HID console.
The installed desktop user owns the 0600 Unix socket
/run/asense-control.sock. Every UTF-8 command is newline-terminated; the
first command must be HELLO 2:
python3 - <<'PY'
import socket
s = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
s.connect("/run/asense-control.sock")
f = s.makefile("rwb", buffering=0)
for command in (b"HELLO 2\n", b"CAPS\n"):
f.write(command)
print(f.readline(4097).decode().rstrip())
PYThe expected replies begin with OK protocol=2 and OK caps=1; the latter is
followed by capability JSON. Every reply is OK <payload> or ERR <message>.
| Operation | Command |
|---|---|
| Discover | PING, CAPS, HARDWARE GET, PLATFORM GET |
| Profile | PROFILE <raw-token-from-CAPS> |
| Fans | FAN AUTO, FAN MAXIMUM, FAN MANUAL <cpu-20..100> <gpu-20..100> |
| Lighting | LIGHTING APPLY <device-id> <OFF|STATIC|BREATHING|NEON> <brightness-0..100> <speed-0..9> <RRGGBB> <-|RRGGBB,...>, LIGHTING POWER <device-id> <ON|OFF> |
| Platform toggles | PLATFORM <BATTERY_LIMIT|KEYBOARD_TIMEOUT|BOOT_SOUND|LCD_OVERRIDE> <ON|OFF> |
| Other platform controls | PLATFORM BATTERY_CALIBRATION <START|STOP>, PLATFORM USB_CHARGING <0|10|20|30>, PLATFORM REAR_LOGO <RRGGBB> <brightness-0..100> <ON|OFF> |
Commands are limited to 192 bytes excluding the newline; response content is
limited to 4096 bytes. A normal ERR rejects only that command and leaves the
session usable. There is no generic raw-call command or required client
library.
Release packaging, checksums, CI gates and reproducibility are documented in
docs/RELEASING.md. Kernel-backed support follows the
upstream Linux
acer-wmi
driver.
If ASense is useful to you, donations are optional:
- PayPal:
paypal.me/fladirm(@fladirm) - Bitcoin:
bc1qqdumr0umlaak7tyrrh0jx729z272fv2jr4t5zp
See DONATE.md for the PayPal and Bitcoin QR codes.
Fladirmacht — [email protected]
ASense is provided AS IS and is licensed GPL-2.0-only. See
LICENSE. ENEK5130 wire-protocol research was independently
documented by
predator-sense; ASense uses
its own implementation and tests.

