# ROG-Core **NOTICE:** I have completed kernel patches to move a large chunk of rog-core functionality in to the Linux kernel. The patch is not in mainline yet, but can be found in the `./kernel-patch/` directory. The patch enables the following in kernel: - All hotkeys (FN+Key combos) - Control of keyboard brightness using FN+Key combos (not RGB) - FN+F5 (fan) to toggle fan modes. You can watch the path `/sys/devices/platform/asus-nb-wmi/throttle_thermal_policy` to see which mode you are in You will not get RGB control in kernel (yet), and rog-core is still required to change modes and RGB settings. The current version in master and last release still take full control of the interfaces **work on a version of rog-core for use with the kernel patch is in another branch** The last version of rog-core will work with any kernel with or without this patch and provide full functions. --- rog-core is a utility for Linux to control many aspects (eventually) of the ASUS ROG laptops like the Zephyrus GX502GW. One of the benefits of this app (for me at least) is that you *don't* require a kernel with correct support for the laptop keyboard EC. The app reads and writes direct to the device interrupts, and can be customised (in source) quite extensively to do what you want such as directly controlling your laptop backlight rather than emitting a key-press for the DE to handle. Other laptop functions such as fan modes or battery charge limiting will need kernel level support which exists in most newer kernels (higher than 5.6.10). ## Discord [Discord server link](https://discord.gg/PVyFzWj) ## SUPPORTED LAPTOPS **Please help test or provide info for:** - GL703(0x1869) - GL553/GL753 (device = 0x1854) (attempted support from researching 2nd-hand info, multizone may work) **Laptop support is modified on a per-case basis** as the EC for the keyboard varies a little between models, e.g, some RGB modes are missing, or it's a single colour. As far as I can see, the EC does not give us a way to find what modes are supported. ### KEYS + OTHER FUNCTIONS Media keys are Volume -/+, Mute output, previous, next, play/pause. These keys are grouped together on one interface block on the keyboard EC as a "Consumer Device" HID, all other fn+ combo are on another interface which is "Vendor Custom", this includes things like keyboard LED brightness and mode change keys, Calc, fan-mode toggles etc. | MODEL |Media keys| Additional FN+ | AniMe |Touchpad-Numpad| Fan Modes | Charge Limit | |:-----:|:--------:|:-------------------:|:-----:|:-------------:|:---------:|:------------:| | GM501 | X | X | | | X | X | | GX502 | X | X | | | X | X | | GX531 | X | X | | | X | X | | GX701 | X | X | | | X | X | | G512 | X | X | | | X | X | | G712 | X | X | | | X | X | | G531 | X | X | | | X | X | | G731 | X | X | | | X | X | | G532 | X | X | | | X | X | | GA401 | X | X | X | | X | X | | GA502 | X | X | X | | X | X | | GU502 | X | X | X | | X | X | **NOTE:** GA14/GA401 and GA15/GA502/GU502, You will need kernel [patches](https://lab.retarded.farm/zappel/asus-rog-zephyrus-g14/-/tree/master/kernel_patches). ### LED MODES Models GA401, GA502, GU502 support LED brightness change only (no RGB). | MODEL | SINGLE | BREATHING | STROBE | RAINBOW | STAR | RAIN | HIGHLIGHT | LASER | RIPPLE | PULSE | COMET | FLASH | ZONES | PER-KEY RGB | |:------:|:------:|:---------:|:------:|:-------:|:----:|:----:|:---------:|:-----:|:------:|:-----:|:-----:|:-----:|:-----:|:-----------:| | G512LI | X | X | X | X | | | | | | | | | | | | G712LI | X | X | X | X | | | | | | | | | | | | GM501 | X | X | X | X | | | | | | | | | X | | | GX531 | X | X | X | X | | | | | | | | | X | | | G512 | X | X | X | X | | | | | | | | | X | | | G712 | X | X | X | X | | | | | | | | | X | | | GX502 | X | X | X | X | X | X | X | X | X | X | X | X | | X | | GX701 | X | X | X | X | X | X | X | X | X | X | X | X | | X | | G531 | X | X | X | X | X | X | X | X | X | X | X | X | X | X | | G731 | X | X | X | X | X | X | X | X | X | X | X | X | X | X | | G532 | X | X | X | X | X | X | X | X | X | X | X | X | | X | ## Implemented - [X] Setting/modifying built-in LED modes - [X] Per-key LED setting - [X] Fancy LED modes (See examples) - [X] Daemon mode - [X] Saving settings for reload - [ ] System control + [X] ROG key custom mapping (Can be done in source) + [X] Fan/Performance mode + [ ] Screen off? Now mapped to a keycode but has no effect + [X] Screen brightness up/down + [X] Touchpad toggle + [X] Sleep + [X] Airplane mode - [X] Capture and use hotkeys + [X] Aura control by Aura keys + [X] Volume + media controls work + [X] Mic mute - [X] Logging - required for journalctl - [X] AniMatrix display on G14 models that include it - [X] Set battery charge limit (with kernel supporting this) ## Requirements for compiling - `rustc` + `cargo` + `make` - `libusb-1.0-0-dev` - `libdbus-1-dev` - `llvm` - `libclang-dev` - `libudev-dev` ## Installing Run `make` then `sudo make install` then reboot. The default init method is to use the udev rule, this ensures that the service is started when the device is initialised and ready. If you are upgrading from a previous installed version, you will need to restart the service or reboot. ``` $ systemctl daemon-reload && systemctl restart rog-core ``` You may also need to activate the service for debian install. If running Pop!_OS, I suggest disabling `system76-power` gnome-shell extension, or at least limiting use of the power-management parts as `rog-core` lets you set the same things (one or the other will overwrite pstates). I will create a shell extension at some point similar to system76, but using the rog-core parts. It is safe to leave `system76-power.service` enabled and use for switching between graphics modes. ### Ubuntu PPA Alternatively, instead of building manually you can use the PPA. ``` sudo add-apt-repository ppa:lukedjones/rog-core sudo apt-get update sudo apt-get install rog-core ``` the rog-core service will run when the device is initialised. ### Gentoo ebuild Thanks to @aspann you can grab it here [sys-power/rog-core](https://lab.retarded.farm/zappel/zGentoo/-/tree/master/sys-power/rog-core) ### Arch AUR You can find the thingimajig [here](https://aur.archlinux.org/packages/rog-core/). If you are using a GA14 or GA15 series, you may need kernel [patches](https://lab.retarded.farm/zappel/asus-rog-zephyrus-g14/-/tree/master/kernel_patches). ## Updating Occasionally I might break things for you by tweaking or changing the config file layout. Usually this will mean you need to remove `/etc/rog-core.conf` and restart the daemon to create a new one. You *can* back up the old one and copy settings back over (then restart daemon again). # Usage **NOTE! Fan mode toggling requires a newer kernel**. I'm unsure when the patches required for it got merged - I've tested with the 5.6.6 kernel and above only. To see if the fan-mode changed cat either: - `cat /sys/devices/platform/asus-nb-wmi/throttle_thermal_policy` or - `cat /sys/devices/platform/asus-nb-wmi/fan_boost_mode` The numbers are 0 = Normal/Balanced, 1 = Boost, 2 = Silent. Running the program as a daemon manually will require root. Standard (non-daemon) mode expects to be communicating with the daemon mode over dbus. Commands are given by: ``` rog-core