Использую пк с дебиан как рабочую станцию, решил написать демона, который бы разгонял карту и запускал майнер, пока активен скринсейвер (рабочий стол локнут)
Код:
#! /bin/bash
function suspend_miner() {
kill $(cat ./miner.pid) && rm -rf ./miner.pid
X :2 &
sleep 2
export DISPLAY=:2
XORG_DISPLAY_PID=$!
nvidia-settings -a "[gpu:0]/GPUGraphicsClockOffset[2]=0"
nvidia-settings -a "[gpu:0]/GPUGraphicsClockOffset[3]=0"
nvidia-settings -a "[gpu:0]/GPUMemoryTransferRateOffset[2]=0"
nvidia-settings -a "[gpu:0]/GPUMemoryTransferRateOffset[3]=0"
nvidia-settings -a "[gpu:0]/GPUFanControlState=0"
kill $XORG_DISPLAY_PID
}
function resume_miner() {
X :2 &
sleep 2
export DISPLAY=:2
XORG_DISPLAY_PID=$!
nvidia-settings -a "[gpu:0]/GPUGraphicsClockOffset[2]=200"
nvidia-settings -a "[gpu:0]/GPUGraphicsClockOffset[3]=200"
nvidia-settings -a "[gpu:0]/GPUMemoryTransferRateOffset[2]=700"
nvidia-settings -a "[gpu:0]/GPUMemoryTransferRateOffset[3]=700"
nvidia-settings -a "[gpu:0]/GPUMemoryTransferRateOffset[3]=700"
nvidia-settings -a "[gpu:0]/GPUFanControlState=1"
nvidia-settings -a "[fan:0]/GPUTargetFanSpeed=60"
nvidia-smi -pl 145
kill $XORG_DISPLAY_PID
./miner --config ./miner.cfg & echo $! > ./miner.pid
}
function on_exit() {
suspend_miner
kill $(cat ./miner.pid)
rm -rf ./miner.pid
exit 1
}
export suspend_miner
export resume_miner
cd /.../zec_miner_0.3.4b
trap on_exit INT EXIT
DBUS_ADDRESS=$(grep -z DBUS_SESSION_BUS_ADDRESS /proc/$(pidof -s gnome-session-binary)/environ)
dbus-monitor --address ${DBUS_ADDRESS:25} "type='signal',interface='org.gnome.ScreenSaver'" |
while read x; do
case "$x" in
*"boolean true"*) resume_miner;;
*"boolean false"*) suspend_miner;;
esac
done
В чем проблема: nvidia-settings нужен X для применения настроек, поэтому я создаю новый (X :2). Все запускается, идет разгон, майнер майнит, как и положено. Но. После входа в систему используется функция suspend_miner, где не работает nvidia-settings -a "[gpu:0]/GPUFanControlState=0". Т.е. настройка применяется, значение выставляется 0, но куллер все равно крутится со сокростью 60%. Насколько я понимаю, после закрытия X :2 в функции "resume_miner" значение 60% устанавливается как дефолтное и после используется вместо стандартной курвы скорости от nvidia. Собсно как это можно пофиксить?
P.S. сам скрипт ловит события блокировки/разблокировки экрана и запускает эти две функции