LINUX.ORG.RU

eeebuntu 8.10 и eeepc 1000h


0

0

Есть несколько проблем.
Каким образом заставить работать смену производительности и скорость кулера и как настроить их на спец-клавиши?
Через eee-control они меняется производительность, но просит пароль администратора. eee-applet вообще не работает, но пароль просит и пункты меню меняет.
Что нужно, что бы это все работало без пароля (активировалось при загрузке) и работало на спец-клавишах?

Я написал простенький скрипт и запустил его демоном.

Что-то вроде:


#!/usr/bin/perl

my $temp;
my $speed;

if (my $pid=fork()) {
exit(0)}


while (1) {
open II,"</sys/class/thermal/thermal_zone0/temp";
$temp=<II>;
close II;
$temp=~/^(\d*)$/;
$temp=$1;

if ($temp > 58000){
open OO, ">/sys/class/hwmon/hwmon0/pwm1_enable";
print OO "1";
close OO;
open OO, ">/sys/class/hwmon/hwmon0/pwm1";
print OO "200";
close OO;
}elsif ($temp > 56000){
open OO, ">/sys/class/hwmon/hwmon0/pwm1_enable";
print OO "1";
close OO;
}elsif ($temp > 55000){
open OO, ">/sys/class/hwmon/hwmon0/pwm1_enable";
print OO "1";
close OO;
open OO, ">/sys/class/hwmon/hwmon0/pwm1";
print OO "100";
close OO;
}elsif ($temp < 54000){
open OO, ">/sys/class/hwmon/hwmon0/pwm1_enable";
print OO "0";
close OO;
};

open II, "</sys/class/hwmon/hwmon0/pwm1";
$speed=<II>;
close II;
$temp = $temp/1000;
# print "temp = $temp C, speed = $speed\n";

open II, "</sys/class/power_supply/AC0/online";
$accum=<II>;
close II;

if ($accum =~ /^0/){
$ch = <II>;
chomp $ch;
close II;
open II, "</sys/class/power_supply/BAT0/charge_full";
$chf = <II>;
chomp $chf;
close II;
$TMP = ($ch/$chf)*100;

if ($TMP < 3) {
`/sbin/poweroff`;
};
};

sleep 10;
}

kraw ★★★★
()
Ответ на: комментарий от fizteh

>Зачем, если acpid _сам_ генерирует события и запускает нужные скрипты-обработчики?

А затем, что это у меня никак не привязано в WM. И нет никаких суперкомбайновых наворотов. 
Просто управляет вентилятором в зависимости от температуры и выключает, когда работает не от сети
и сел аккумулятор.

А acpid генерит события нажатий кнопок. Мой скрипт на это никоим образом не покушается. 

>Охо, а что именно он делает?

Все просто. Раз в 10 секунд.заглядывает в FS /sys (взаимодействие с ядром). 
Смотрит температуру процессора (/sys/class/thermal/thermal_zone0/temp) и в зависимости от нее,
меняет скорость вращения вентилятора (/sys/class/hwmon/hwmon0/pwm1).
Если температура достаточно низкая, то позволяет вентилятору управляться аппаратно
(/sys/class/hwmon/hwmon0/pwm1_enable). 
Оно, конечно, можно оставить аппаратное управление во всех случаях, 
но мне захотелось на высоких значениях управлять поагрессивнее. 
Ну просто захотелось.

Ну и смотрит, подключены ли мы к электросетисети (/sys/class/power_supply/AC0/online). 
Если нет, то спрашиваем текущий заряд аккумулятора (/sys/class/power_supply/BAT0/charge_now), 
значение полного заряда (/sys/class/power_supply/BAT0/charge_full),
вычисляем % заряда и, если он меньше 3%, выключаем комп.



PS: При копировании пропала одна строка. Проверка заряда должна быть в следующей редакции:

   if ($accum =~ /^0/){
      open II, "</sys/class/power_supply/BAT0/charge_now";
      $ch = <II>;
      chomp $ch;
      close II;
      open II, "</sys/class/power_supply/BAT0/charge_full";
      $chf = <II>;
      chomp $chf;
      close II;
      $TMP = ($ch/$chf)*100;

      if ($TMP < 3) {
         `/sbin/poweroff`;
      };
   };

kraw ★★★★
()
Ответ на: комментарий от Riksh

Через GUI. Нормальный виндовый способ.

kraw ★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.