Собираем
информацию
по крупицам

RSS подписка

Подпишитесь на новости сайта по RSS

Статьи - Компьютерное

Linux: как перестать удивляться, и начать работать

Как в Linux следить за температурой видеокарты и выводить предупреждения
29-05-2012
00:25:14

В этой статье мы будем решать аппаратные проблемы программными средствами с привлечением человеческого ресурса.

 

Итак, проблема. Через год использования видеокарточки,  кулер перестал самостоятельно раскручиваться. Пылью забился или еще что. Прочистки хватило на месяц, после чего та же проблема. После пяти минут работы компьютера чипсет на видеокарте разогревается, и карточка отключается (где-то на 200°C).

 

Найти подходящий кулер с нужной посадкой никак не могу, ну а пока поиски продолжаются, нужно как-то работать. А начиная работать, постоянно забываешь проверить кулер, и через пять минут работы, чертыхаясь, приходится перезагружаться.

 

Итак, нужна программа-следилка за температурой ядра видеокарточки. Программа должна при увеличении температуры выше нормы напоминать пользователю о том, что неплохо бы подтолкнуть кулер пальцем, чтоб он таки начал вращаться. Вот как это сделать за несколько минут в Linux.

 

Во-первых, надо выяснить, каким образом можно получить текущую температуру ядра видюшки. У меня карточка NVidia, и для нее существует программа nvidia-settings. Она может работать как в графическом, так и в консольном режиме. Используя следующие опции, можно вывести в консоль текущую температуру:

 

$ nvidia-settings --ctrl-display=:0 -q GPUCoreTemp

 

В ответ программа выведет примерно следующее:

 

Attribute 'GPUCoreTemp' (pangolinux:0.0): 43.
'GPUCoreTemp' is an integer attribute.
'GPUCoreTemp' is a read-only attribute.
'GPUCoreTemp' can use the following target types: X Screen, GPU.

 

Число 43 - это и есть температура в градусах Цельсия. Отфильтруем вывод так, чтоб видеть только температуру:

 

$ nvidia-settings --ctrl-display=:0 -q GPUCoreTemp | grep Attribute | awk '{print $4}' | sed 's/\.//'

 

В ответ увидим число 43. Этого нам достаточно, чтобы организовать сравнение с нужным нам числом.

 

Во-вторых, нужно решить, как выводить сообщение о разогреве на экран. Я пользуюсь для таких вещей программой zenity. Zenity - это набор простейших экранных утилит для взаимодействия с пользователем. В наборе Zenity есть стандартное окно-уведомление, мы им и будем пользоваться.

 

Делаем следующий bash-скрипт (назовем его gputemp.sh):

 

#!/bin/sh

# Для отладки

echo "Gputemp run" >> /tmp/gputemp.log

 

# Заппрос температуры
temperature=`nvidia-settings --ctrl-display=:0 -q GPUCoreTemp | grep Attribute | awk '{print $4}' | sed 's/\.//'`

 

# Проверка температуры
if test ${temperature} -gt 64
then

# Получаем номера активных дисплеев.

# Это нужно, чтобы сообщение открывалось не только

# на дисплее :0, но и на других дисплеях,

# если в системе одновременно открыто

# несколько сессий с разными пользователями

disp=`ps -ef | awk '$8 ~ /X$/ {print $9}'`

 

# Перебираются дисплеи
for n in $disp
do

export DISPLAY=${n}

zenity --info --title="Warning" --text="Ядро видеокарты слишком горячее. Текущая температура ${temperature} C. Проверьте, включен ли кулер." &

done
fi

 

Проверяем его следующим образом. В коде скрипта задаем температуру срабатывания ниже текущей. При запуске скрипта должно появиться предупреждающее сообщение. После чего в коде ставим нужную нам пороговую температуру срабатывания.

 

Данный скрипт помещаем куда-нибудь в /opt или в /usr/bin, и прописываем его запуск раз в минуту в Cron. Для этого из-под рута даем команду:

 

#  crontab -e

 

Откроется редактор, в котором нужно добавить строку:

 

* * * * * /usr/bin/gputemp.sh

 

По-идее все должно работать, но есть один подводный камушек, поэтому нам не обойтись без теста. Вначале прописываем в наш скрипт пониженный порог срабатывания и ждем, появится ли сообщение-предупреждение. Если через минуту не появилось, значит что-то пошло не так. Надо разбираться.

 

Удалим файл /tmp/gputemp.log, и если через минуту он не создался, значит что-то не так с Cron. Если же файл создался, но сообщения не появилось, значит X-сервер блокирует вывод окошек-сообщений от рута. Есть такая особенность у X-сервера, что он выводит окошки только те, которые создаются текущим пользователем. Чтобы это исправить, нужно после старта X-сервера автоматически выполнить команду:

 

$ xhost +local:

 

Для систем Ubuntu и Debian размещать команду xhost +local: нужно в файле /etc/profile. Команды из этого файла выполняются после того, как произошел логин пользователя в оконную систему (справедливо для KDE, GNOME, на других DE не проверялось). По неизвестным причинам, файл /etc/X11/xinit/xinitrc, который специально предназначен для выполнения команд в момент входа в DE, в системах Ubuntu и Debian не работает.

 

После таких настроек уведомление о перегреве микросхемы GPU должно появляться в красивом окошечке, которое нарисует нам Zenity. Увидев его, мы лезем под стол, толкаем кулер, чтоб он начал крутиться. И не забываем дать себе обещание, что завтра, непременно, пойдем в во-он тот магазин, и купим, наконец, нужный кулер.

 



К списку "Компьютерное"

Поделиться этой страницей



Внимание!


На этом сайте разрабатывается программа MyTetra и её родственные проекты. Доступны к просмотру следующие базы знаний:

 

База Xintrea (стр. 1)

База Rarrugas (стр. 1)

База Balas

База YellowRaven

База Yurons

База Lesnik757

База Shandor

База Sirrichar

База Anatolean (стр. 1)

База Аrmagedec

База SorokinRed

База Deadelf79

База Adgaver (стр. 1)

База Pipitos1983

База Soxsten (стр. 1)

База Silenn (стр. 1)

База Shlyapnikova - херомантия и ригидность

База Svoynickname (стр. 1)

База Larson227 (стр. 1)

База Velonski (стр. 1)

База BrokeRU (стр. 1)

База Mcold (стр. 1)

База Alensav (стр. 1)

База Consp11 (стр. 1)

База Kozlov-AE (стр. 1)

База Wwwlir (стр. 1)

База Duwaz (стр. 1)

 

Требуют доработки:

 

База Tairesh

База Ivnglkv

База Kolyag87

База Andyk101

База Garik456456

База Harpokrat

База SalexIzyh

База RuDennn (Bunny-Hop)

База Manakaden

База Vitvrn

База Fanrok

База Grimar

База_Juryak

База Nicolasomsk

База Azatserikbaev

База Shut913

 

Подробности на странице MyTetra Share.

 WebHamster.Ru
 Домик любопытного хомячка
Яндекс индекс цитирования
Почтовый ящик