Commands
Global Flags
These flags apply to every command.
| Flag | Description |
|---|---|
--device <name\|path> |
Target a single device: keyboard, lightbar, or a /dev/hidrawN path. Without this flag all matching devices are targeted. |
--dry-run |
Preview what would be sent or written without making any changes. Works for all commands including setup. |
--no-button |
Disable the Armoury Crate button watcher (daemon only). Use when another tool needs exclusive access to the button device. |
apply
Apply a lighting effect to the keyboard backlight, the edge lightbar, or both.
| Flag | Default | Description |
|---|---|---|
--color |
FF0000 |
Primary color: 6-digit hex (RRGGBB) or a named color |
--color2 |
000000 |
Secondary color for breathe mode: 6-digit hex or name |
--mode |
static |
Lighting mode (see table below) |
--speed |
normal |
Animation speed: slow, normal, fast |
--brightness |
high |
Brightness level: off, low, medium, high |
--list-colors |
Print all named colors with swatches and exit |
Modes:
| Mode | Description | --color |
--color2 |
--speed |
|---|---|---|---|---|
static |
Solid color | yes | — | — |
breathe |
Fade between two colors | yes | yes | yes |
cycle |
Auto-cycle full spectrum | — | — | yes |
rainbow |
Rainbow wave across zones | — | — | yes |
strobe |
Rapid flash | yes | — | yes |
All modes accept --brightness.
z13ctl apply --color cyan --brightness high
z13ctl apply --mode rainbow --speed slow
z13ctl apply --mode breathe --color hotpink --color2 blue --speed slow
z13ctl apply --list-colors
brightness
Set the brightness level without changing the current lighting mode or color.
<level> is one of: off, low, medium, high
off
Turn off all lighting zones (or a specific zone with --device).
profile
Get or set the system performance profile via the asus-wmi platform_profile
sysfs interface. Root or group access required; see setup.
| Flag | Description |
|---|---|
--get |
Print the active performance profile |
--set <profile> |
Set the performance profile |
Valid profiles: quiet, balanced, performance, custom
The custom profile is a virtual profile that recalls saved fan curves and TDP
settings from the daemon's state file. It does not write to platform_profile.
Setting custom requires the daemon to be running, and at least one custom fan
curve or TDP value must have been previously set.
Setting a stock profile (quiet, balanced, performance) resets any active
custom fan curves and TDP values back to firmware defaults.
z13ctl profile --get
z13ctl profile --set performance
z13ctl profile --set balanced
z13ctl profile --set custom
Note
When the daemon is running, setting a profile also updates
power-profiles-daemon (if installed) to the equivalent PPD profile.
batterylimit
Get or set the battery charge limit via the Linux ACPI power_supply sysfs
interface. Root or group access required; see setup.
| Flag | Description |
|---|---|
--get |
Print the current battery charge limit (percentage) |
--set <percent> |
Set the battery charge limit (40–100) |
Writing 100 removes any limit (charges to full).
bootsound
Get or set the POST boot sound via the asus-armoury firmware-attributes sysfs
interface. Root or group access required; see setup.
| Flag | Description |
|---|---|
--get |
Print the current boot sound setting (0 or 1) |
--set <value> |
Set boot sound: 0 = off, 1 = on |
paneloverdrive
Get or set display panel refresh overdrive via the asus-armoury
firmware-attributes sysfs interface. Root or group access required; see
setup.
| Flag | Description |
|---|---|
--get |
Print the current panel overdrive setting (0 or 1) |
--set <value> |
Set panel overdrive: 0 = off, 1 = on |
fancurve
Get, set, or reset custom fan curves via the asus-wmi hwmon sysfs interface. Both physical fans cool the same APU, so the same curve is always applied to both fans simultaneously. Root or group access required; see setup.
| Flag | Description |
|---|---|
--get |
Print the current fan curve, mode, RPM, and APU temperature |
--set <curve> |
Set a custom 8-point fan curve (applied to both fans) |
--reset |
Reset both fans to firmware auto mode |
Curve format: 8 comma-separated temp:speed pairs. Speed can be a PWM
value (0–255) or a percentage with a % suffix (0–100%). Both formats can be
mixed in the same curve.
"48:2,53:22,57:30,60:43,63:56,65:68,70:89,76:102" # PWM values
"48:1%,53:9%,57:12%,60:17%,63:22%,65:27%,70:35%,76:40%" # percentages
Validation rules:
- Exactly 8 points required
- Temperatures must be monotonically increasing (0–120 °C)
- Speed values must be non-decreasing (0–255 PWM or 0–100%)
# Read current fan curves
z13ctl fancurve --get
# Set a custom fan curve using PWM values (both fans)
z13ctl fancurve --set "48:2,53:22,57:30,60:43,63:56,65:68,70:89,76:102"
# Set a custom fan curve using percentages
z13ctl fancurve --set "48:1%,53:9%,57:12%,60:17%,63:22%,65:27%,70:35%,76:40%"
# Reset both fans to auto mode
z13ctl fancurve --reset
tdp
Get, set, or reset TDP (Thermal Design Power) limits via the asus-nb-wmi PPT (Package Power Tracking) sysfs attributes. Root or group access required; see setup.
| Flag | Description |
|---|---|
--get |
Print current PPT values |
--set <watts> |
Set all PPT limits to the specified wattage |
--reset |
Switch to balanced profile (firmware manages PPT and fan curves) |
--pl1 <watts> |
Override PL1/SPL independently |
--pl2 <watts> |
Override PL2/sPPT independently |
--pl3 <watts> |
Override PL3/fPPT independently |
--force |
Allow sustained TDP (PL1) above 75W (up to 93W). Burst limits (PL2/PL3) are allowed up to 93W without --force. When PL1 exceeds 75W, fans are set to an 80% minimum curve; custom curves must keep all PWM values at or above 204 (80%). |
PPT attributes:
| Attribute | Limit | Description |
|---|---|---|
ppt_pl1_spl |
PL1 — Sustained | Continuous power budget the APU can draw indefinitely. This is your effective base TDP. |
ppt_pl2_sppt |
PL2 — Short-term boost | Power the APU can draw for several seconds before throttling to PL1. |
ppt_fppt |
PL3 — Fast boost | Maximum instantaneous power for millisecond-scale spikes. |
ppt_apu_sppt |
APU short-term | APU-specific short-term limit; automatically mirrors PL2. |
ppt_platform_sppt |
Platform short-term | Platform-level short-term limit; automatically mirrors PL2. |
With --set, all three limits default to the same value. Use --pl1, --pl2,
and --pl3 to set them independently — a stepped configuration like
--set 45 --pl2 55 --pl3 65 sustains 45W with short bursts to 55W and
instantaneous peaks to 65W.
Stock profiles (quiet/balanced/performance) let the firmware manage TDP
dynamically — the firmware sets per-profile PPT values automatically on profile
change. Setting a custom TDP switches to the custom profile.
PPT readback values
The values shown by --get are the kernel driver's cached values, which may
not reflect the actual EC limits (especially after a fresh boot or profile
change). Use ryzenadj -i if you need ground-truth PPT readings.
Safety:
- Default range: 5–75W
--forceextends the range to 5–93W- When any PPT value exceeds 75W, both fans are forced to full speed before the TDP values are written. If the fan write fails, TDP is not applied.
# Read current TDP values
z13ctl tdp --get
# Set all PPT limits to 50W
z13ctl tdp --set 50
# Set with individual PL overrides
z13ctl tdp --set 45 --pl2 55 --pl3 60
# Force high TDP (fans will be set to full speed)
z13ctl tdp --set 85 --force
# Reset to balanced profile (firmware manages PPT)
z13ctl tdp --reset
undervolt
Get or set CPU Curve Optimizer (CO) offsets via the ryzen_smu kernel
module. Negative values reduce voltage (undervolt), improving efficiency and
thermals without reducing performance. Root or group access required; see
setup.
| Flag | Description |
|---|---|
--get |
Print current CO offset (from daemon state) |
--set <value> |
Set all-core CPU CO offset (0 to -40) |
--reset |
Reset CPU CO to stock (0) |
CO values have no sysfs readback — --get returns the last-applied values from
daemon state. If a stock profile is active (quiet/balanced/performance), the
output indicates that the saved offsets are not currently applied. If the daemon
is not running, reports "not set".
CO is volatile: values reset on reboot and sleep/resume. The daemon reapplies them automatically on startup and resume when the custom profile is active.
Safety limits (matching G-Helper defaults):
| Parameter | Range |
|---|---|
| CPU CO | 0 to -40 |
Requires: ryzen_smu kernel module. Install via:
- Arch/CachyOS:
ryzen_smu-dkms-git(AUR) - Other distros: build from amkillam/ryzen_smu source
Strix Halo requires the amkillam fork
The original leogx9r/ryzen_smu does not support Strix Halo. Use the
amkillam/ryzen_smu fork instead.
If the module is not installed, undervolt commands return a helpful error.
# Read current CO value
z13ctl undervolt --get
# Set CPU CO to -20
z13ctl undervolt --set -20
# Reset to stock voltage
z13ctl undervolt --reset
# Preview without applying
z13ctl --dry-run undervolt --set -20
status
Display a summary of all system metrics in a single view: APU temperature, fan speed and mode, performance profile, TDP power limits, undervolt status, and battery charge level with charge limit.
This command is read-only and takes no flags. All values are read directly from
sysfs (except undervolt, which has no sysfs readback — shows ryzen_smu
module availability).
z13ctl status
# APU: 62°C
# Fans: 4200 RPM, mode: auto
# Profile: balanced
# TDP: 52W (PL1) / 71W (PL2) / 70W (PL3)
# Undervolt: available (ryzen_smu loaded)
# Battery: 74% (limit: 80%)
list
List all matching hidraw devices and show whether each has Aura support.
Useful for diagnosing missing devices or verifying that setup worked. Does
not require the daemon to be running.
setup
Install udev rules and a boot service granting a group read/write access to the ASUS HID devices, performance profile, battery charge limit, firmware attributes (boot sound, panel overdrive), hwmon fan curve attributes, asus-nb-wmi PPT power limit attributes for TDP control, and ryzen_smu sysfs files for undervolting (if the module is loaded).
| Flag | Default | Description |
|---|---|---|
--group |
users |
Group to grant device access to |
Use --dry-run to preview exactly what would be written — no root required:
After running setup, log out and back in (or run newgrp <group>) for the
group membership to take effect in your current session.
For a detailed explanation of what setup installs and why the battery limit
requires a separate systemd service, see Installation.
daemon
Start the z13ctl daemon. Normally started automatically via the systemd socket unit — see Daemon. You can also start it directly for testing.
z13ctl daemon # with Armoury Crate button watcher
z13ctl --no-button daemon # without button watcher
When the daemon is running, all other commands (apply, brightness, off,
profile, batterylimit, bootsound, paneloverdrive, fancurve, tdp,
undervolt, status)
route through the daemon socket automatically. If the daemon is not running
they fall back to direct hardware or sysfs access.
Colors
Named colors accepted by --color and --color2. Any 6-digit hex value
(RRGGBB, without #) is also accepted.
Run z13ctl apply --list-colors to see ANSI true-color swatches in your terminal.
| Name | Hex | Name | Hex |
|---|---|---|---|
red |
FF0000 |
blue |
0000FF |
crimson |
DC143C |
navy |
000080 |
orangered |
FF4500 |
indigo |
4B0082 |
coral |
FF7F50 |
blueviolet |
8A2BE2 |
orange |
FF8000 |
purple |
800080 |
gold |
FFD700 |
magenta |
FF00FF |
yellow |
FFFF00 |
deeppink |
FF1493 |
chartreuse |
7FFF00 |
hotpink |
FF69B4 |
green |
00FF00 |
violet |
EE82EE |
springgreen |
00FF7F |
turquoise |
40E0D0 |
aquamarine |
7FFFD4 |
brown |
A52A2A |
teal |
008080 |
white |
FFFFFF |
cyan |
00FFFF |
deepskyblue |
00BFFF |
dodgerblue |
1E90FF |
royalblue |
4169E1 |