# evga-icx This program allows you to read temperature sensors off of supported EVGA 30-series iCX3 video cards, as well as control the fans individually. ## Prerequisites A supported EVGA 30-series iCX3 card. I have not done extensive testing but belive this is every model of their: * RTX 3060 Ti * RTX 3070 * RTX 3070 Ti * RTX 3080 * RTX 3080 Ti * RTX 3090 * RTX 3090 Ti The number of fans supported depends, of course, on your particular model. Access to the `/dev/i2c` device files, which means either: * Run as root, or * Install udev rules to allow user access. If you have the OpenRGB udev rules installed to control the LEDs you already have this set up. ## Dependencies * libi2c-dev * libnvidia-ml-dev (if building with `USE_NVML=1`) ## Building `make` ## Optional features ### NVML support Add the make flag `USE_NVML=1` and the it will also display the main GPU temperature ("GPU1") as reported by the NVIDIA driver. It will also display the performance cap/clock reason. This requires the NVIDIA management library (NVML) to be installed. ## Usage Note that when controlling fans directly through iCX3 they will fall offline from the Nvidia driver and show as 0 RPM until you return them to automatic mode. ```text Available options: --gpu N : Control only GPU N instead of all supported cards --fan SPEED : Set all fans at once to SPEED (see below) --fanN SPEED : Set fan N (0-3) to SPEED SPEED may be one of the following: 'auto' to return the fan to its default control mode N to set the fan to that manual % speed [+/-]N to set that fan to an RPM offset from the GPU-controlled speed --reset : Reset all fans to their default mode --sensors : Print sensor readings even if setting a fan speed --compact : Print sensor reading in a compact one-line per card format --watch N : Keep printing output every N seconds --overwrite : Overwrite previously displayed info with --watch instead of continuously logging ``` ### Examples: Read sensors: ```text $ ./evga-icx #0: EVGA GeForce RTX 3090 FTW3 Ultra v2 (/dev/i2c-3) @ c:00.0 Fan 0: 1122 RPM (37/0%, Auto) Fan 1: 1177 RPM (39/0%, Auto) Fan 2: 1189 RPM (39/0%, Offset) Ext. fan: 0 RPM (0/0%, Offset) GPU1: +36°C GPU2: +41.2°C MEM1: +42.8°C MEM2: +41.1°C MEM3: +41.5°C PWR1: +40.5°C PWR2: +41.2°C PWR3: +41.9°C PWR4: +42.5°C PWR5: +42.0°C Clock reasons: GPU idle (0x1) ``` Compact one-line mode: ```text $ ./evga-icx --compact #0 FAN 37 39 39 0% GPU 35 41 MEM 41 41 41 PWR 40 41 42 42 42°C CLK Idle ``` Set external fan to follow Nvidia driver controlled speed with a -500 RPM offset: `evga-icx --fan3 -500` Set all fans to manual 100% `evga-icx --fan 100` Force all fans on card 0 to off except for fan1: `evga-icx --gpu 0 --fan1 0 --fan2 auto --fan3 0 --fan4 0` Return fans back to Nvidia driver control: `evga-icx --reset` ### Future capabilities It appears to also be possible to read power and voltage sensors off of the K|NGP|N cards, and possibly even control the onboard OLED screen. If you have one of these and are willing to help test this please contact me!