O problema é que (por qualquer razão) a saída de nvidia-settings -query GPUCoreTemp
no XFCE não contém a string gpu
. Mostra apenas o primeiro conjunto de linhas comparado com a saída do mesmo comando executado sob o GNOME. Isso significa que current_temp
estará vazio e que as expansões aritméticas depois falharão.
A execução do script em sh
não corrigirá isso.
O script bash
a seguir selecionará o número no final da primeira linha de saída e o usará como a temperatura atual ( Editar: modificado para usar outro comando após os comentários).
#!/bin/bash
function set_fan_speed {
local speed="$1"
nvidia-settings -a "[gpu:0]/GPUFanControlState=1" \
-a "[fan:0]/GPUTargetFanSpeed=$speed"
}
interval=5
while true; do
current_temp="$( nvidia-smi -a |
grep -F 'GPU Current Temp' | awk '{ print $(NF-1) }' )"
if [[ -z "$current_temp" ]]; then
echo "Something isn't right, current_temp is empty" >&2
exit 1
fi
if (( current_temp < 45 )); then set_fan_speed 40
elif (( current_temp < 60 )); then set_fan_speed 50
elif (( current_temp < 65 )); then set_fan_speed 60
elif (( current_temp < 70 )); then set_fan_speed 70
elif (( current_temp < 75 )); then set_fan_speed 80
else set_fan_speed 100
fi
sleep "$interval"
done
Eu coloquei o comando longo em uma função para facilitar a leitura e removi testes aritméticos desnecessários. Eu também inseri uma verificação de sanidade para current_temp
.
Uma melhoria futura deste script pode incluir não tocar na velocidade do ventilador se não precisar ser modificado. Manter o controle da velocidade atual do ventilador e não atualizá-lo em set_fan_speed
, se não for necessário, seria o caminho óbvio a seguir.
Observação: na verdade, não sei se a chamada nvidia-settings
na função set_fan_speed
funciona . Pode ser que [gpu:0]/
deva ser removido ou que alguma outra modificação precise ser feita para que o script seja executado no GNOME e no XFCE. Minha solução, pelo menos, cuida do problema primário de analisar a temperatura.