Como ler a temperatura da cpu manualmente?

Olá pessoal tudo bem
eu estou tentando fazer um código em c pra ver a temperatura da cpu (apenas para treinar e entender mais sobre o sistema), pesquisando achei o arquivo /sys/class/thermal/thermal_zone0/temp que mostra a temperatura, mas quando tento abrir ele com o cat retorna apenas 26800, e esse valor não muda.
existe outra forma de ver a temperatura?
ou “consertar” esse arquivo?
obs: O lm-sensor funciona perfeitamente.

No Conky, eu uso 2 “IF / ENDIF” aninhados, porque em algumas distros as temperaturas que quero exibir podem estar em hwmon 0, 1, 2 ou 3 – variando de um boot para outro:

${if_existing /sys/class/hwmon/hwmon0/temp1_label}\
MB       ${alignr}${hwmon 1 temp 1}°C                         \
CPU       ${alignr}${hwmon 0 temp 1}°C

Core0 ${alignr}${hwmon 0 temp 2}°C          \
Core1 ${alignr}${hwmon 0 temp 3}°C          \
Core2 ${alignr}${hwmon 0 temp 4}°C
Core3 ${alignr}${hwmon 0 temp 5}°C          \
Core4 ${alignr}${hwmon 0 temp 6}°C          \
Core5 ${alignr}${hwmon 0 temp 7}°C\
${else}\
${if_existing /sys/class/hwmon/hwmon1/temp1_label}\
MB       ${alignr}${hwmon 0 temp 1}°C                         \
CPU       ${alignr}${hwmon 1 temp 1}°C

Core0 ${alignr}${hwmon 1 temp 2}°C          \
Core1 ${alignr}${hwmon 1 temp 3}°C          \
Core2 ${alignr}${hwmon 1 temp 4}°C
Core3 ${alignr}${hwmon 1 temp 5}°C          \
Core4 ${alignr}${hwmon 1 temp 6}°C          \
Core5 ${alignr}${hwmon 1 temp 7}°C\
${else}\
MB       ${alignr}${hwmon 0 temp 1}°C                         \
CPU       ${alignr}${hwmon 2 temp 1}°C

Core0 ${alignr}${hwmon 2 temp 2}°C          \
Core1 ${alignr}${hwmon 2 temp 3}°C          \
Core2 ${alignr}${hwmon 2 temp 4}°C
Core3 ${alignr}${hwmon 2 temp 5}°C          \
Core4 ${alignr}${hwmon 2 temp 6}°C          \
Core5 ${alignr}${hwmon 2 temp 7}°C\
${endif}\
${endif}

Agora, sudo watch sensors – que lê em intervalos de 2 segundos – enquanto o Conky lê a cada 1 segundo, e por isso nem sempre coincidem:

Aquela primeira temperatura, que assinalei como “MB” nunca muda, é sempre 27º – e nunca me convenci de que seja, mesmo, da MotherBoard.

As outras, me parecem “convincentes”.

Não acredito em “verdades eternas”, neste caso – pois com minha antiga placa-mãe (2 x Core2 Duo), eu tinha uma “coleção de números” muito diferente – incluindo Voltagens (tensões):

${if_existing /sys/class/hwmon/hwmon1/temp3_input}\
CPU ${alignr}${hwmon 0 temp 1}°C                     ${alignr}Vcore     ${alignr}${execi 10 sensors | grep -A 0 'Vcore' | cut -c 20-27}
MB ${alignr}${hwmon 0 temp 2}°C                      ${alignr}+3.3     ${alignr}${execi 10 sensors | grep -A 0 '+3.3 Voltage' | cut -c 20-27}
Core0    ${alignr}${hwmon 1 temp 2}°C              ${alignr}+5        ${alignr}${execi 10 sensors | grep -A 0 '+5 Voltage' | cut -c 20-27}
Core1    ${alignr}${hwmon 1 temp 3}°C            ${alignr}+12       ${alignr}${execi 10 sensors | grep -A 0 '+12 Voltage' | cut -c 20-27}

Fan  ${alignr}${hwmon 0 fan 1} rpm                 Freq. ${alignr} $freq   MHz\
${else}\
CPU ${alignr}${hwmon 1 temp 1}°C                     ${alignr}Vcore     ${alignr}${execi 10 sensors | grep -A 0 'Vcore' | cut -c 20-27}
MB ${alignr}${hwmon 1 temp 2}°C                      ${alignr}+3.3     ${alignr}${execi 10 sensors | grep -A 0 '+3.3 Voltage' | cut -c 20-27}
Core0    ${alignr}${hwmon 0 temp 2}°C              ${alignr}+5        ${alignr}${execi 10 sensors | grep -A 0 '+5 Voltage' | cut -c 20-27}
Core1    ${alignr}${hwmon 0 temp 3}°C            ${alignr}+12       ${alignr}${execi 10 sensors | grep -A 0 '+12 Voltage' | cut -c 20-27}

Fan  ${alignr}${hwmon 1 fan 1} rpm                 Freq. ${alignr} $freq   MHz\
${endif}

Além disso, a “coleção de números” vem aumentando, de um ano para outro – embora eu continue com a mesma placa-mãe desde 2020.

Imagino que cada placa-mãe ofereça diferentes “coleções de números” – e nem sempre o manual dá “certeza” do que cada número signifique.

Minhas anotações estão aqui.

2 curtidas

O lm-sensors lê os arquivos em /sys/class/hwmon/, os mesmos lidos no script do @frc_kde. Cada dispositivo tem uma pasta numerada, hwmon0, hwmon1, etc., com arquivos com nomes auto-explicativos.

Se for para uma única máquina com hardware 100% fixo, dá para usar a abordagem dele de “fixar” os números do hwmon0, hwmon1, etc. já no código.

Para criar algo genérico para qualquer sistema (ou para se blindar contra mudança nos números, já que não há garantia alguma de que pasta vai ser a CPU, que número vai ser a GPU, etc.), no entanto, é bom conferir o arquivo name de cada pasta hwmon[0-9], ou buscar os dispositivos em /sys/bus/platform e /sys/bus/pci, onde eles são organizados pela conexão física que eles utilizam.


Acredito que o próprio Conky já possa mostrar voltagem, não?

2 curtidas