fan script auf ThinkWiki

AndreasMeier

New member
Themenstarter
Registriert
21 März 2005
Beiträge
398
Hallo zusammen,

ich wollte das Skript auf der ThinkWiki-Seite für mein T42 hernehmen.
Ich hab ibm_acpi in Version 0.11 mit Switch experimental=1 laufen und kann z.B. unter /proc/acpi/ibm/thermal die Sensoren auslesen.

Aber wo ich nicht durchblicke ist :
Das Skript sagt ja, den Fan unter /proc/acpi/ibm/fan zu schalten.
Diese Datei "fan" find ich aber nicht.

Es gibt ein "Verzeichnis" unter /proc/acpi/fan, dieses ist aber leer.

Ich hab leider nur sehr wenig bis gar keine Skript-Erfahrung und find auch nicht, wo mit genannter ibm_acpi Version der Lüfter geschaltet werden kann.

Kann mir jemand einen Tip geben ?

Danke !
Gruß
Andreas
 
Hi Andreas,

schau mal meinen Thread bei Ubuntuusers: Klick!

Hoffe, das hilft - falls dann noch Fragen sind, kannst du sie ja gern stellen...

beste Grüße
Mario
 
Ok, hab ich mir durchgelesen, aber wenn ich recht durchgeblickt hab, geht es in deinem Thread ja hauptsächlich um die Kompilierung der neuesten Version von ibm_acpi, Version 0.11.
Die hab ich aber schon und läuft auch.

ABER...

es sollte eigentlich eine Datei oder Verzeichnis da sein, die sich unter /proc/acpi/ibm/fan befinden sollte.
Ich hab ibm_acpi mit dem Switch experimental=1 laufen (hoffe ich, gibts da eine Kontroll-Möglichkeit?), kann auch wunderbar die Sensor-Temperaturen auslesen,
aber das fan-script gibt mir eine Fehlermeldung "file not found" zurück, da das Skript wie gesagt unter /proc/acpi/ibm/fan sucht und nix findet.

Darum wollte ich fragen, wie ich, unter der Annahme das ibm_acpi richtig läuft, den Lüfter schalten kann bzw. ob ich das Skript irgendwie für die T-Serie anpassen muß (ist ja ursprünglich für R-Serie).

Danke und Gruß
Andreas
 
Hi Andreas,

Wenn du in der Konsole "dmesg" eingibst, erscheint irgendwo im unteren Bereich der ellenlangen Ausgabe ungefähr folgendes:

ibm_acpi: IBM ThinkPad ACPI Extras v0.11
ibm_acpi: http://ibm-acpi.sf.net/

Dort ist erkennbar, dass die Version 0.11 geladen ist und nicht wie im Standard-Kernel die 0.8.
Ob das Modul unter experimental läuft kann man daran aber nicht erkennen. Das sieht man nur daran, dass die betreffenden Einträge in /proc/acpi/ibm fehlen. Bei dir scheint der experimentelle Modus also noch nicht zu laufen.

In dem Thread hatte ich auch beschrieben, dass ich auch erst Probleme mit dem Experimental-Modus hatte. Dieser ließ sich von mir nämlich nicht durch "modprobe experimental=1" richtig starten. Daher fehlten bei mir auch in dem Ordner /proc/acpi/ibm/ diverse Einträge unter anderem "fan", der für das Skript gebraucht wird.

Deshalb musste ich per Hand in der Datei /etc/modprobe.de/ibm_acpi_modprobe die Zeile folgendermaßen ändern: options ibm_acpi experimental=1 hotkey=enable,0xffff
(Dort fehlte nämlich vorher der Eintrag experimental=1)

Dann erschienen beim nächsten Start die entsprechenden Einträge im Proc-Verzeichnis.

An dem Skript habe ich an sich nichts geändert. Der Eintrag "fan" müsste auf einem Rxx wie auf einem Txx oder Xxx erscheinen. Ich hatte nur Probleme, dass das Skript bei mir nur im Batterie-Modus einwandfrei funktionierte, weil da noch irgendeine Abfrage drin war, die bei mir scheinbar irgendwie nicht passte. Nach Entfernen dieser Abfrage lief das Ganze aber einwandfrei...

Hoffe diese etwas ausführlichere Antwort hilft weiter...

Mario
 
Hm, also Version 0.11 hab ich. /proc/acpi/ibm auch.
Nur fan nicht, von da her muß ich mir das ganze heut abend in Ruhe anschauen.
Mario, welches System hast Du ?
Ich hab Kubuntu Hoary und hoffe, dass ich /etc/modprobe.de/ibm_acpi_modprobe finde und die Änderung machen kann.
Aber aufrufen kann ich ibm_acpi mit experimental=1, das funktioniert ohne Fehlermeldung !
Naja, ich werd mich dann auf jeden Fall melden, danke erstmal soweit.

Gruß
Andreas
 
Mario, vergiß die Frage nach dem System, ich hab gerade in dem Posting von Dir wegen den blauen Tasten beim Cursor erfahren, dass Du auch Kubuntu drauf hast.

Gruß
Andreas
 
Original von AndreasMeier

Aber aufrufen kann ich ibm_acpi mit experimental=1, das funktioniert ohne Fehlermeldung !

Eine Fehlermeldung hab ich auch nie bekommen und hab mich, genauso wie du, über die fehlenden Einträge gewundert. Bis ich dann in diese Datei geschaut hab und im Internet irgendwo gefunden hab, wie sie tatsächlich aussehen soll. Vielleicht ist das ja auch dein Problem...
 
So, hab ich in /etc/modprobe.d/ibm.... eingetragen, beim nächsten Hochfahren waren die Verzeichnisse / Einträge da !!

Jetzt muß ich später noch schauen, ob ich das Skript so zum laufen bekomme.
Wie hast Du das denn eingebunden ?

Gruß
Andreas
 
Na Bitte!

jetzt müsstest du mit
echo enable > /proc/acpi/ibm/fan
den Lüfter aktivieren und mit disable deaktivieren können... bisher nur mit Root-Rechten, da die Dateien in /proc/acpi/ibm/ das so vorsehen

Diese Rechte werden bei jedem Neustart wieder auf Root gesetzt, deshalb nützt einmalige Rechte-Änderung nur für die laufende Sitzung. Ich habe mir also den "Autostart-Patch" von Ubuntuusers geholt >> Link und in das neu entstandene Verzeichnis /etc/autostart/ ein Skript mit folgendem Inhalt gepackt:

#!/bin/sh
sudo chmod a+rwx /proc/acpi/ibm/fan

Damit werden bei jedem Start die Schreibrechte gesetzt, dass auch ein Normal-User den Lüfter kontrollieren kann...

Und dann habe ich nur noch das Skript von Think-Wiki in den Ordner /home/xxxx/.kde/Autostart kopiert, damit es bei jedem Start läuft.

Und fertig!

[schild=14 fontcolor=000000 shadowcolor=C0C0C0 shieldshadow=1]Viel Erfolg![/schild]
Mario
 
So, dass mit dem Autostart-Patch hab ich auch.
Danke erstmal !!
Damit konnte ich wie Du oben beschrieben hast auch die Rechte für /proc/acpi/ibm/fan setzen.
Jetzt kann ich per Kommando den Lüfter aus- und einschalten :-)


Auch hab ich das Lüfter-Skript von ThinkWiki in .kde/Autostart reinkopiert.
Ist ja ein xxx.sh-File, ist ausführbar, aber läuft das dann dauernd im Hintergrund, sobald es dort im Autostart-Ordner liegt ?
Ich hab zwar mal mein T42 vom Strom abgeklemmt, Lüfter lief, aber der Lüfter ist nach abklemmen nicht ausgegangen, obwohl die Temperatur unterhalt der Anlaufschwelle lag.
 
Das Skript wird dann bei jedem KDE-Start gestartet. Also müsste es nach einem KDE-Neustart laufen... sonst kannst du dich ja nochmal melden...
 
@onkel25,

jetzt muß ich doch noch mal auf Deine Hilfe zurückgreifen.
Ich hab das Lüfterskript im .kde/Autostart-Ordner liegen.

So sieht der Code aus:
[code:1]
#!/bin/sh
MAXTEMP=50
DELTA=4

SWITCHTEMP=$MAXTEMP

while [ 1 ];
do
for ac in `sed s/state:// < /proc/acpi/ac_adapter/AC/state`
do
if [ "$ac" = "off-line" ]; then
fan=no
for temp in `sed s/temperatures:// < /proc/acpi/ibm/thermal`
do
test $temp -gt $SWITCHTEMP && fan=yes
done

if [ "$fan" = "yes" ]; then
command='enable'
SWITCHTEMP=`expr $MAXTEMP - $DELTA`
else
SWITCHTEMP=$MAXTEMP
command='disable'
fi

else # ac-adapter on -> set fan control to standard behaviour
command='enable'
fi

echo $command > /proc/acpi/ibm/fan
sleep 15
done
done
[/code:1]

Kannst Du das bitte mal mit Deinem vergleichen ?
Liegt im Autostart-Ordner als "lueftersteuerung.sh".

Wenn ich in der Konsole sh lueftersteuerung.sh aufrufe, bekomme ich folgendes:
: command not found: line 19:
: command not found: line 21:
'ueftersteuerung.sh: line 25: syntax error near unexpected token `do
'ueftersteuerung.sh: line 25: ` do

Ich weiß nicht, ob ich das Skript überhaupt so testen kann, aber gut schauts irgendwie nicht aus. Leider kann ich nicht gross ein Skript programmieren, darum möchte ich mich bei sowas kritischen wie dem Lüfter auch nicht selber an ein Skript wagen :-)

Gruß
Andreas
 
Hallo Andreas,

ich bin auch nicht grad die Programmier-Leuchte. Ich suche mir meist aus dem Internet stückchenweise meine Skripts zusammen... Deshalb bin ich bei der Problem-Analyse wahrscheinlich auch nicht die größte Hilfe.
Hier mal mein Skript:
[code:1]
#!/bin/sh

MAXTEMP=59
DELTA=5
SWITCHTEMP=$MAXTEMP
command1='disabled'

#make sure the script doesn't leave the fan off on error
trap "echo enable > /proc/acpi/ibm/fan" EXIT

temperatur=`cat /proc/acpi/ibm/thermal`
datum=`date`
echo $datum RECHNERSTART $temperatur >> /home/onkel25/luefter.log

while [ 1 ];
do

fan=no
for temp in `sed s/temperatures:// < /proc/acpi/ibm/thermal`
do
test $temp -gt $SWITCHTEMP && fan=yes
done

if [ "$fan" = "yes" ]; then
command='enable'
SWITCHTEMP=`expr $MAXTEMP - $DELTA`
#log
if [ "$command1" = 'disabled' ];
then
datum=`date`
temperatur=`cat /proc/acpi/ibm/thermal`
echo $datum Lüfter ein $temperatur >> /home/onkel25/luefter.log
command1='enabled'
fi
#log Ende
else
SWITCHTEMP=$MAXTEMP
command='disable'
#log
if [ "$command1" = 'enabled' ];
then
datum=`date`
temperatur=`cat /proc/acpi/ibm/thermal`
echo $datum Lüfter AUS $temperatur >> /home/onkel25/luefter.log
command1='disabled'
fi
#log Ende
fi

echo $command > /proc/acpi/ibm/fan



sleep 15
done
done
[/code:1]

Ist wie schon gesagt, ein wenig angepasst: Die Abfrage über den Status Batterie/Netz hat bei mir irgendwie nicht funktioniert, deshalb hab ich diese rausgenommen. Und ich wollte mal genauer den Lüfter/Stillstand-Zyklus untersuchen, deshalb hab ich noch die Dokumentierung in einer Log-Datei eingebaut... Kannst ja mal sehn, ob es bei dir funktioniert... Die Log-Datei müsste wohl zuerst angelegt und der Pfad im Skript geändert werden...

Der Aufruf der Datei müsste mit "sh Dateiname" klappen. Hast du dein Original-Skript gepostet oder die auskommentierte Anleitung für den Post rausgenommen? In Zeile 25 des Skripts ist nämlich eine Leerzeile, wenn ich mir das anschaue...

Viellleicht funktioniert mein Skript ja....

Gruß, Mario
 
Ja, das ganze oben auskommentierte hab ich für das Posting rausgenommen, sorry, dann stimmt natürlich die Zeilenangabe nicht mehr :-(
Ich probier gleich mal Dein Skript aus und meld mich dann wieder.

Danke und Gruß
Andreas
 
Also mit Deinem Skript gehts, hab das mit der Logdatei entsprechend angepasst.
Hab das Skript mit "sh fan.sh &" aufgerufen und in den Background geschickt, Lüfter war augenblicklich ruhig :-)
Jetzt hoch ich davor und beobachte die Temperatur.
Erstmal danke, ich meld mich, wenn ich meine Lüfter-Erkenntnisse weiter gebracht habe.

Gruß
Andreas
 
Jetzt hab ich noch ne Frage zum Skript.
Maxtemp hab ich auf 50 gesetzt, 59 ist mir zuviel.
Delta = x => ist das der Wert, um den bei Überschreiten der Maxtemp runtergelüftet wird ?
Sprich Delta=10, Maxtemp=50, dass er bis 40 Grad runterlüftet ?

Irgendwie kann ich das ganze grad nicht so toll testen, weils tierisch warm im Büro ist :-(

Gruß
Andreas
 
Hi Andreas,

ich fand erst 59 auch erst ein wenig hoch. Aber mein Prozessor ist an sich schon ziemlich heiß, den bekommt der Lüfter auch, wenn er die ganze Zeit läuft kaum unter 50 (zumindest nicht bei den derzeitigen Temperaturen). Also hätte sonst das Skript keinen großen Nutzen... Und unter Volllast ist der Prozessor die ganze Zeit weit über 70 - der verträgt wohl bis zu 90 (? - hab ich irgendwo im Internet gelesen). Da find ich 60 gar nicht _zu_ hoch. Kannst ja ausprobieren, wie es bei dir am besten passt und was du deinem Thinkpad zumuten willst. Ich fahr grad ganz gut mit diesen Temperaturen. Der Lüfter läuft bei 60 Grad an, läuft dann für 3 Minuten, bis er 54 Grad erreicht und läuft nach 12 Minuten wieder an. Also ein Verhältnis von 1:4 find ich schon ganz gut... (Ich hab im Internet viel von 50:50 gelesen.) Kannst ja selbst ein wenig probieren und irgendwann dann mal die log auswerten...

Delta ist tatsächlich die Temperaturdifferenz um die herunter gekühlt wird, sobald der Temperaturfühler Maxtemp überschreitet - steht aber auch in dem auskommentierten Text...

beste Grüße und viel Spaß mit dem Skript!

Wäre nett, wenn du demnächst auch mal deine Erfahrungen posten könntest...

Mario

PS: Um die Funktion des Skripts zu testen, kannst du ja Delta auch mal auf weniger als 10 setzen...
 
So läuft IBM_ACPI unter Ubuntu Breezy (Patch)

Hallo zusammen,

hatte am Wochenende ein wenig Probleme auf meinem Thinkpad unter Ubuntu Breezy IBM_ACPI v. 0.11 zum laufen zu bekommen. Über die Linux-on-Thinkpads-Mailingliste ging allerdings ein Patch, der dann funktioniert hat. Daran wollte ich die Ubuntu-Nutzer hier auch gleich teilhaben lassen. Also meine Anleitung:

- Kernel-Header und gcc 3.4 installieren
- den aktuellen Treiber von http://ibm-acpi.sourceforge.net/ herunterladen (0.11)
- den Treiber entpackt tar xzvf
- ins Verzeichnis gewechselt
- jetzt kommt für Breezy der Patch ins Spiel: Dateiname "ibm-acpi-0.11-0.11a.diff"

[code:1]
Common subdirectories: ibm-acpi-0.11/config and ibm-acpi-0.11a/config
diff -C 4 ibm-acpi-0.11/ibm_acpi.c ibm-acpi-0.11a/ibm_acpi.c
*** ibm-acpi-0.11/ibm_acpi.c Thu Mar 17 23:06:16 2005
--- ibm-acpi-0.11a/ibm_acpi.c Sat Sep 10 16:24:53 2005
***************
*** 1751,1759 ****

return 0;
}

! static int device_add(struct acpi_device *device)
{
return 0;
}

--- 1751,1759 ----

return 0;
}

! static int ibm_acpi_device_add(struct acpi_device *device)
{
return 0;
}

***************
*** 1769,1777 ****

memset(ibm->driver, 0, sizeof(struct acpi_driver));
sprintf(ibm->driver->name, "%s/%s", IBM_NAME, ibm->name);
ibm->driver->ids = ibm->hid;
! ibm->driver->ops.add = &device_add;

ret = acpi_bus_register_driver(ibm->driver);
if (ret < 0) {
printk(IBM_ERR "acpi_bus_register_driver(%s) failed: %d\n",
--- 1769,1777 ----

memset(ibm->driver, 0, sizeof(struct acpi_driver));
sprintf(ibm->driver->name, "%s/%s", IBM_NAME, ibm->name);
ibm->driver->ids = ibm->hid;
! ibm->driver->ops.add = &ibm_acpi_device_add;

ret = acpi_bus_register_driver(ibm->driver);
if (ret < 0) {
printk(IBM_ERR "acpi_bus_register_driver(%s) failed: %d\n",
[/code:1]

- diese Datei ins entpackte Verzeichnis kopieren und mit "patch < ibm-acpi-0.11-0.11a.diff" ibm_acpi anpassen
- make
- sudo make install
- modprobe ibm_acpi experimental=1
- wenn der Experimental-Modus nicht klappt, in der /etc/modprobe.de/ibm_acpi_modprobe die Zeile folgendermaßen ändern: options ibm_acpi experimental=1 hotkey=enable,0xffff
- dann hat man in /proc/acpi/ibm/ die entsprechenden Dateien, über die man zB den Lüfter steuern kann...

Gruß, Mario
 
hallo,

könnt ihr mir mal bitte hier den link zu dem skript schicken .. vielen dank

spaci76
 
  • ok1.de
  • ok2.de
  • thinkstore24.de
  • Preiswerte-IT - Gebrauchte Lenovo Notebooks kaufen

Werbung

Zurück
Oben