• This repository has been archived on 26/Mar/2021
  • Stars
    star
    150
  • Rank 245,818 (Top 5 %)
  • Language
    Rust
  • License
    MIT License
  • Created over 5 years ago
  • Updated over 3 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Asus Aura Sync driver application for Linux

Borealis

NOTE: This is not being actively developed. If you are looking for a RGB solution, I suggest OpenRGB.

Borealis is an Asus Aura Sync driver application for Linux. It can set your peripherals' RGB lighting without the use of the Windows Aura application.

The Aura branding covers multiple protocols. At present, Borealis only supports the motherboard-based SMBus/I2C protocol, which provides control over LED lighting on the motherboard and RAM (e.g. G.Skill Trident Z RGB). It may support additional forms of lighting, including Aura-enabled GPUs and input peripherals, in the future.

Borealis has only been tested on my personal workstation (Arch Linux, X399 Strix-E, 4x G.Skill Trident Z RGB, Lian Li Bora Lite fans), and makes certain assumptions about where to locate resources. While these should be valid across similar systems to mine, I have not tested them, and I make no guarantees. I'm not responsible for your computer blowing up, but I'm happy to help get it working if it's within my purview.

Building

Install the latest version of Rust, clone this repository, and run cargo build within the directory to produce binaries.

Running

Currently, Borealis only supports setting all LEDs to a given colour. This interface will be extended in future to provide for additional control.

As Borealis uses Linux's I2C interface, you will need to ensure that this has been loaded. To do so temporarily, you can use modprobe i2c-dev; for extended use, consider having the module automatically loaded.

To run Borealis, use cargo run or run the binary built by cargo build. Arguments are a RGB triplet - that is,

cargo run 127 0 127

to set all lighting on your motherboard to purple.

Caveats

  • As previously mentioned, this does not support all Aura products. Other products include STRIX GPUs, non-addressable RGB LED strips, keyboards, mice, and potentially more.

    Supporting these will take additional reverse engineering, which may or may not happen in the future.

  • You may not have the same memory layout as I do, so Borealis may fail to connect to some of the RAM sticks. Adjust the controllers array in src/main.rs to suit; there will be better detection of installed devices in the future.

  • Annoyingly, the I2C addresses for the individual RAM sticks may not be available from a cold boot. Using Aura Sync in Windows may make them visible, but it's not guaranteed. I hope to make this more reliable in future.

  • The Aura Sync controller for the motherboard resides on an auxiliary SMBus. For AMD systems, this SMBus is not initialised with the stock Linux kernel; to get it to work, you will need to patch your kernel. The patch follows for Linux kernel 4.20 (derived from here):

--- a/drivers/i2c/busses/i2c-piix4.c	2019-01-09 01:23:06.197945763 +1100
+++ b/drivers/i2c/busses/i2c-piix4.c	2019-01-09 01:24:58.007942622 +1100
@@ -964,6 +964,11 @@
 		retval = piix4_setup_sb800(dev, id, 1);
 	}
 
+	if (dev->vendor == PCI_VENDOR_ID_AMD &&
+	    dev->device == PCI_DEVICE_ID_AMD_KERNCZ_SMBUS) {
+		retval = piix4_setup_sb800(dev, id, 1);
+	}
+
 	if (retval > 0) {
 		/* Try to add the aux adapter if it exists,
 		 * piix4_add_adapter will clean up if this fails */

Acknowledgements

Many, many thanks to the great work of those at https://gitlab.com/CalcProgrammer1/KeyboardVisualizer/issues/85 , whose extensive reverse-engineering work paved the way for me to investigate further and determine reliable methods of communicating with Aura devices. I wouldn't have been able to get started without their efforts demonstrating the viability of the approach.

Additionally, much amusement was derived from this Aura Sync CVE. Folks, the way Aura Sync is implemented on Windows is really, really bad. I hope they fix it soon.

More Repositories

1

wgpu-openxr-example

a barebones example of how to integrate OpenXR with wgpu (Vulkan-only)
Rust
48
star
2

fit3143-notes

Extensive course notes for Monash University's FIT3143 (2018)
TeX
25
star
3

valhalla

Basic proof-of-concept kernel written in Crystal.
Crystal
13
star
4

jc2mp-buymenu

The Buy Menu for JC2-MP
Lua
10
star
5

exilent

A Discord bot for Automatic1111's Stable Diffusion web UI
Rust
10
star
6

ggllama

`ggllama` is a Rust port of ggerganov's llama.cpp.
Rust
8
star
7

athena

fxdis-d3d1x based decompiler, written in D
D
7
star
8

stable-diffusion-a1111-webui-client

A Rust library for interacting with Automatic1111's SD Web UI
Rust
7
star
9

irradiant

A Clang-based C to Lua source-to-source compiler.
C++
6
star
10

vespertine

C++11 game engine
C++
6
star
11

llama-http

Rust
6
star
12

djitt

An in-memory x86 assembler.
D
5
star
13

cynosure

A x86 emulator
C++
5
star
14

jc2mp-bank

The Bank script for JC2-MP
Lua
4
star
15

pyxis

A DSL for describing types for existing structures and classes in memory
Rust
4
star
16

exvr

exvr: experimental VR ports
Rust
4
star
17

jc2mp-firstperson

The first-person script for JC2-MP
Lua
4
star
18

binarycpp

Compile-time binary arithmetic in the C preprocessor.
C
3
star
19

skiron

Skiron is a basic 32-bit RISC-inspired CPU architecture.
D
3
star
20

aitai

Finetuning a large language model using AITA posts
Rust
3
star
21

bevy-city

Vice City assets in Bevy
Rust
3
star
22

gtc-downloader

Download GTC videos easily
Python
2
star
23

plogonscript

Load single-file JS scripts in Dalamud for things that are too small to be plugins of their own
C#
2
star
24

gm_cmd

Execute system commands
C++
1
star
25

alpa

Rust
1
star
26

ere-rs

wot
C
1
star
27

x86rc

experiments in x86 static recompilation
C++
1
star
28

jc2mp-skydivingstats

Skydiving stats for JC2-MP (distance to ground, time, speed, angle of descent)
Lua
1
star
29

nixos-configuration

NixOS configuration
Shell
1
star
30

re-utilities

a crate of nice utilities to use in Rust
Rust
1
star