Kjetil's Information Center: A Blog About My Projects

GeForce GTX 1060 Thermal Repaste

The ASUS GeForce GTX 1060 I have installed in a Linux box suddenly started to behave badly. The screen would go dark but everything else would keep running. The dmesg command would reveal the following:

[  696.858198] NVRM: Xid (PCI:0000:01:00): 79, pid=1579, name=Renderer, GPU has fallen off the bus.
[  696.858208] NVRM: GPU 0000:01:00.0: GPU has fallen off the bus.
[  696.858922] NVRM: Xid (PCI:0000:01:00): 154, GPU recovery action changed from 0x0 (None) to 0x1 (GPU Reset Required)
[  718.874880] nvidia-modeset: ERROR: GPU:0: Failed to query display engine channel state: 0x0000927c:3:0:0x0000000f
[  718.875505] nvidia-modeset: ERROR: GPU:0: Failed to query display engine channel state: 0x0000927c:3:0:0x0000000f
[  718.875615] nvidia-modeset: ERROR: GPU:0: Failed to query display engine channel state: 0x0000927c:3:0:0x0000000f
          


Apparently the GPU had fallen off the bus. It would seem that one of the causes is overheating, so I disassembled the card:

GeForce GTX 1060


I applied new thermal paste on the GPU core, but left the thermal pad on the VRM section as-is. This solved the problem. To monitor the temperature afterwards I made a quick Python script that utilizes the Cooltek LCD display to display the GPU and CPU degrees:

#!/usr/bin/python3
import serial
import time
import subprocess
import re

class Cooltek(object):
    def __init__(self, port):
        self.s = serial.Serial()
        self.s.port = port
        self.s.baudrate = 115200
        self.s.bytesize = serial.EIGHTBITS
        self.s.parity = serial.PARITY_NONE
        self.s.stopbits = serial.STOPBITS_ONE
        self.s.xonxoff = False
        self.s.rtscts = False
        self.s.dsrdtr = False

        self.s.setDTR(True) # Important!
        self.s.setRTS(True) # Also Important!
        self.s.open()
        self.s.flushInput()
        self.s.flushOutput()

    def __del__(self):
        self.s.close()

    def nvidia_gpu_temp(self):
        try:
            result = subprocess.run(['nvidia-smi',
                '--query-gpu=temperature.gpu','--format=csv'],
                capture_output=True, text=True)
            return result.stdout.split()[1]
        except:
            return "Read Error"
    
    def cpu_temp(self):
        try:
            result = subprocess.run(['sensors'],
                capture_output=True, text=True)
            reg_match = re.search(r'Package id 0:\s+\+(\d+).',
                result.stdout, flags=re.MULTILINE)
        except:
            return "Read Error"
        if reg_match:
            return reg_match.group(1)
        else:
            return "Regex Error"

    def loop(self):
        while True:
            self.s.write(bytes.fromhex("1B4A")) # Clear screen...
            gpu = "GPU: " + self.nvidia_gpu_temp()
            cpu = "CPU: " + self.cpu_temp()
            self.s.write(gpu.encode('utf-8'))
            self.s.write(bytes.fromhex("1B592120")) # Cursor to line 2...
            self.s.write(cpu.encode('utf-8'))
            self.s.write(bytes.fromhex("1B592220")) # Cursor to line 3...
            time.sleep(1)

if __name__ == "__main__":
    import sys
    c = Cooltek("/dev/ttyACM0")
    c.loop()
          


After the re-pasting the temperature stays at around 40 degrees Celsius when idle, or between 70 and 75 degrees Celsius when displaying 3D graphics. Unfortunately I forgot to check the temperature when it was overheating and falling off the bus...

Topic: Repair, by Kjetil @ 23/10-2026, Article Link