Skip to content

Installation

Prerequisites

  • Linux kernel with hidraw support (standard on all mainstream distributions)
  • 2025 ASUS ROG Flow Z13 (USB IDs 0b05:18c6 and 0b05:1a30)

InputPlumber conflict (Bazzite, ChimeraOS, Nobara)

On gaming distributions that ship InputPlumber, the z13ctl daemon's button watcher will fail to open the Armoury Crate button device. InputPlumber ships a built-in profile for the ROG Flow Z13 that grabs the device exclusively. See InputPlumber compatibility for the override instructions.

Optional: ryzen_smu kernel module (for undervolting)

CPU undervolting via AMD Curve Optimizer requires the ryzen_smu kernel module. Without it, all other features work normally — undervolt commands will return a helpful error explaining how to install the module.

Strix Halo requires the amkillam fork

The original leogx9r/ryzen_smu does not support Strix Halo (the SoC in the 2025 Z13). You must use the amkillam/ryzen_smu fork. z13ctl detects the wrong fork at startup and reports undervolt as unavailable.

Distribution Package Source
Arch / CachyOS ryzen_smu-dkms-git AUR (amkillam fork)
Other distros build from source github.com/amkillam/ryzen_smu
# Arch / CachyOS
yay -S ryzen_smu-dkms-git

# Other distros (build from amkillam fork)
git clone https://github.com/amkillam/ryzen_smu.git
cd ryzen_smu
make
sudo make install

Install

Download the latest linux_amd64 archive from the Releases page, then extract and install:

tar xzf z13ctl_*_linux_amd64.tar.gz
sudo install -Dm755 z13ctl /usr/local/bin/z13ctl

One-time permissions setup (requires root):

sudo z13ctl setup

Then log out and back in (or run newgrp users) for the group membership to take effect in your current session.

Install the systemd user service (socket activation):

install -Dm644 contrib/systemd/user/z13ctl.socket \
    ~/.config/systemd/user/z13ctl.socket
install -Dm644 contrib/systemd/user/z13ctl.service \
    ~/.config/systemd/user/z13ctl.service
systemctl --user daemon-reload
systemctl --user enable --now z13ctl.socket z13ctl.service

Install the z13ctl-bin package with your preferred AUR helper:

yay -S z13ctl-bin

The package installs the binary, udev rules, systemd units, and the battery permissions service automatically. After installing, add your user to the users group if not already a member:

sudo usermod -aG users $USER

Then log out and back in for the group membership to take effect.

Alternatively, download the .pkg.tar.zst package directly from the Releases page and install with pacman:

sudo pacman -U z13ctl-*.pkg.tar.zst

Download the .deb package from the Releases page, then install:

sudo apt install ./z13ctl_*.deb

The package installs the binary, udev rules, systemd units, and the battery permissions service automatically. After installing, add your user to the users group if not already a member:

sudo usermod -aG users $USER

Then log out and back in for the group membership to take effect.

Download the .rpm package from the Releases page, then install:

sudo dnf install ./z13ctl_*.rpm

The package installs the binary, udev rules, systemd units, and the battery permissions service automatically. After installing, add your user to the users group if not already a member:

sudo usermod -aG users $USER

Then log out and back in for the group membership to take effect.

Requires Go 1.23 or later.

git clone https://github.com/dahui/z13ctl
cd z13ctl
make build
sudo make install

make install installs the binary to /usr/local/bin and runs sudo z13ctl setup automatically.

Install the systemd user service:

make install-service

Verify the installation

z13ctl list

This should print the discovered hidraw devices and confirm Aura support. If it prints nothing, see Troubleshooting below.


Next steps

You're installed and ready to go. Head to the Quick Start guide to set your first lighting effect, fan curve, and performance profile.


What setup does

sudo z13ctl setup performs four steps:

  1. Writes /etc/udev/rules.d/99-z13ctl.rules — grants the users group MODE=0660 / GROUP=users on the ASUS HID and input device nodes; uses RUN+=chgrp/chmod to set permissions on the platform-profile attribute, hwmon fan curve attributes (asus_custom_fan_curve + asus pwm_enable), and asus-nb-wmi PPT power limit attributes when the drivers load.
  2. Reloads udev and applies permissions immediately to all currently present files — including ryzen_smu sysfs files for undervolting (if the module is loaded).
  3. Writes /etc/systemd/system/z13ctl-perms.service and enables it — a Type=oneshot service that runs chgrp + chmod g+w on BAT*/charge_control_end_threshold and ryzen_smu_drv sysfs files at boot.
  4. Starts the service immediately so battery limit and undervolt are accessible right away.

Why a separate oneshot service for battery and ryzen_smu?

The charge_control_end_threshold sysfs attribute is added by the asus_nb_wmi kernel driver late in its probe() sequence — after all observable udev child-device events have already fired. The ryzen_smu files are kobjects under /sys/kernel/, not udev-managed devices. There is no udev hook that can reliably target either. The z13ctl-perms.service unit is a self-contained workaround that runs at sysinit.target. It has no dependency on the z13ctl binary and can be inspected at any time:

systemctl cat z13ctl-perms.service

Use --dry-run to preview all changes without root or any side effects:

z13ctl --dry-run setup

Uninstall

Remove the user service first:

systemctl --user disable --now z13ctl.socket z13ctl.service
rm -f ~/.config/systemd/user/z13ctl.socket \
      ~/.config/systemd/user/z13ctl.service
systemctl --user daemon-reload

Then remove the binary and system files:

sudo rm /usr/local/bin/z13ctl
sudo rm /etc/udev/rules.d/99-z13ctl.rules
sudo udevadm control --reload-rules
sudo systemctl disable --now z13ctl-perms.service
sudo rm /etc/systemd/system/z13ctl-perms.service
sudo systemctl daemon-reload

Troubleshooting

z13ctl list prints nothing

The device was not found. Check that the kernel loaded the hid and hidraw modules:

lsmod | grep hid
ls /dev/hidraw*

If /dev/hidraw* devices exist but none match the ASUS USB IDs, the device is present but not recognized. This tool targets the 2025 ROG Flow Z13 specifically (USB IDs 0b05:18c6 and 0b05:1a30).

Permission denied

Run sudo z13ctl setup and log out/in to apply the group membership. Verify with:

ls -la /dev/hidraw*
groups

Daemon logs "button watcher stopped; retrying … permission denied"

Another process may be holding an exclusive grab on the Armoury Crate button device. On gaming distributions, InputPlumber is a common cause. See InputPlumber compatibility for the fix.

Daemon not starting

systemctl --user status z13ctl.socket z13ctl.service
journalctl --user -u z13ctl -n 50