Есть такая проблема, пока решена с помощью скрипта:
Почитайте:
http://ubuntuforums.org/showthread.php?t=2217658Значит коротко:
0. sudo apt install lm-sensors
1. Нужно установить пакеты acpi_call-tools и dkms .
Взять можно в репозитории ppa:linrunner/tlp
2. Далее от рута идем в папку /usr/src/
Создаем папку, например acpi_call-0.0.2
Копируем в эту папку содержимое папки acpi-call-20130623
3. Далее в терминале:
sudo gedit /usr/src/acpi_call-0.0.2/acpi_call-0.0.2/acpi_call.c
4. В открытом файле ищем "not called" и заменяем их на " ",
то есть один пробел в кавычках, сохраняем.
5. Далее в терминале
sudo gedit /usr/src/acpi_call-0.0.2/dkms.conf
Редактируем этот файл заменив версию 20130623 на 0.0.2 в двух местах.
Должно стать типа так:
PACKAGE_NAME="acpi-call"
PACKAGE_VERSION="0.0.2"
CLEAN="make clean"
BUILT_MODULE_NAME[0]="acpi_call"
DEST_MODULE_NAME[0]="acpi_call"
MAKE[0]="make IGNORE_CC_MISMATCH=1 KDIR=$kernel_source_dir PWD=$dkms_tree/acpi_call/0.0.2/build"
DEST_MODULE_LOCATION[0]="/updates/dkms/"
AUTOINSTALL="yes"
Сохраняем файл.
6. Далее в терминале
cd /usr/src/
sudo dkms add -m acpi_call -v 0.0.2
sudo dkms build -m acpi_call -v 0.0.2
sudo dkms install -m acpi_call -v 0.0.2
и
sudo modprobe -r acpi_call
sudo modprobe acpi_call
и проверяем
sudo cat /proc/acpi/call
Должно ответить просто пробелом, если ответило "not called", значит где-то допустили ошибку.7. Далее в терминале:
sudo gedit /sbin/pb_fan
Вставляем туда это
#!/bin/bash
#
# HP ProBook 4320s Fan Control Script
# V 0.1.0
# ACPI SFSD/GFSD Methods
# ASSUMING DUAL CORE CPU
# For single core CPU check comments below
INTERV=1 # Polling interval, seconds
HYST=5 # Hysterisis (deg. C)
TSTEP=( 30 40 50 60 70 80 ) # Temperature Steps (deg. C)
SSTEP=( 00 14 28 3c 50 64 ) # Speed Steps (Fan speed percentage, hexadecimal, 00 < x < 64)
# FIRST speed step must always be 00
# LAST temperature step must always be 128
# You may add as many steps in between, as long the number of temperature and speed steps are equal
# --- NO EDITING BEYOND HERE NECESSARY ---
# Make sure only root can run our script
if [ "$(id -u)" != "0" ]; then
echo "This script must be run as root" 1>&2
exit 1
fi
# Make sure acpi_call is installed
if ! lsmod | grep -q acpi_call; then
echo "Error: acpi_call module not loaded"
exit
fi
if [ ${#SSTEP[@]} -ne ${#TSTEP[@]} ]; then
echo "Error: Speed Step length and Temp Step length not equal!"
exit
fi
acpi_call () {
echo "$*" > /proc/acpi/call
echo "$(cat /proc/acpi/call)"
}
get_speed () {
# Exact speed
local PWM0h=$(acpi_call "\_SB.PCI0.LPCB.EC0.PWM0"|cut -b3,4)
local PWM0d=$(echo "obase=10; ibase=16; ${PWM0h^^}" | bc )
local FANOFF=$(($PWM0d & 1))
if [ $FANOFF -eq 1 ]; then
echo "0"
else
local SPD=$((($PWM0d & 127) >> 1))
echo $(( 100 - ($SPD*100)/64 ))
fi
}
set_speed () {
CMD="\_SB.PCI0.LPCB.EC0.SFSD 0x$1"
echo "$(acpi_call $CMD)"
}
# display () {
# # Display the magic
# echo -en "\ec"
# echo -en "ProBook 4320s Fan Control Interface.\nUse at your own risk!\n\n"
# echo -e " Temperature: $TEMP\xC2\xB0C"
# echo -e " Current Step: $STEP"
# echo -e " Set Step: $NSTEP"
# echo -e " Target Speed: $(( $(echo "obase=10; ibase=16; ${SSTEP[$i]^^}" | bc ) ))%"
# echo -e "Reported Speed: $CURSPD%"
# }
# Sizing and Titling
# echo -en "\033[8;5;20t"
# echo -en "\033]0;ProBook Fan Control DEBUG Script\007"
while true; do
# Get CPU temperature
SENSE="$(sensors)"
CORE0=$(echo "$SENSE"|grep 'Core 0'|awk '{print $3}'|cut -b2,3)
# FOR SINGLE CORE CPU
# Comment from here
CORE2=$(echo "$SENSE"|grep 'Core 2'|awk '{print $3}'|cut -b2,3)
SUM="`expr $CORE0 + $CORE2`"
TEMP=`expr $SUM / 2`
#UNTIL HERE and uncomment the line below
#TEMP=$CORE0
# Calculate the current speed step
CURSPD=$(get_speed)
STEP=-1
for (( i = 0; i < ${#SSTEP[@]}; i++ )); do
ST=$(echo "obase=10; ibase=16; ${SSTEP[$i]^^}" | bc )
CS=$CURSPD
# Allow for 2% deviation from target speed
if [ "$(( $ST + 1 ))" -ge "$CS" ] && [ "$(( $ST - 1 ))" -le "$CS" ]; then
STEP=$i;
break
fi
done
# Make the magic happen
NSTEP="-"
if [ $STEP -eq -1 ]; then
# If we didn't set the speed, turn the fan off and start over.
NSTEP=0
STEP=0
set_speed "0"
#display
continue
else
echo $TEMP
if [ $TEMP -gt ${TSTEP[$STEP+1]} ]; then
if [ `expr $STEP + 1` -eq ${#SSTEP[@]} ]; then
sleep $INTERV
continue # Sky High Step
fi
# Step Up
set_speed "${SSTEP[$STEP+1]}" > /dev/null
NSTEP=`expr $STEP + 1`
# echo -e "Stepping up to: `expr $STEP + 1`; Temp: $TEMP\xC2\xB0C"
elif [ $TEMP -lt `expr ${TSTEP[$STEP]} - $HYST` ]; then
if [ $STEP -eq 0 ]; then
sleep $INTERV
continue # Rock Bottom Step
fi
# Step Down
set_speed "${SSTEP[$STEP-1]}" > /dev/null
# echo -e "Stepping down to: `expr $STEP - 1`; Temp: $TEMP\xC2\xB0C"
NSTEP=`expr $STEP - 1`
fi
fi
#display
sleep $INTERV
done
Сохраняем.
8. Применяем атрибут исполняемого файла:
sudo chmod 755 /sbin/pb_fan
9. Выполняем файл:
sudo /sbin/pb_fan
Если скрипт запустился, то в
терминале будет отображаться температура.Но если такое:
/sbin/pb_fan: line 129: [: -gt: unary operator expected
/sbin/pb_fan: line 138: [: -lt: unary operator expected
expr: syntax error
expr: syntax error
то нужно найти в файле /sbin/pb_fan "CORE2" и заменить его на "CORE1"
без кавычек.
То есть в терминале
sudo gedit /sbin/pb_fan
поиск CORE2, меняем на CORE1
Сохраняем.
10. Запускаем и наблюдаем
sudo /sbin/pb_fan
Если все запустилось и бегает температурка то нагружаем проц, чтобы убедиться в работоспособности скрипта.
Если все работает то:
11. То
sudo gedit /etc/rc.local
И добавляем
строку до exit 0
$(nohup pb_fan 0<&- &>/var/log/pb_fan.log &) &
Сохраняем и перезагружаем.