X240 optimieren

Skrondgar

New member
Registriert
29 Okt. 2014
Beiträge
17
Hi,
ich nutze zum arbeiten ein X240 mit Debian 9. Ich bin recht unbedarft, was Linux angeht. Welche Möglichkeiten gibt es das OS für das Thinkpad zu optimieren?

EDIT: Um mal ein Beispiel zu nennen, ich habe den Eindruck, dass der Akku nicht so lange hält. Auch der Lüfter gibt deutlich früher und mehr Gas. Ich gehe daher davon aus, dass die CPU nicht sonderlich effizient betrieben wird.

- - - Beitrag zusammengeführt - - -

OK, hab hier ein paar Threads mit jeder Menge Material gefunden. Wenn jemand noch Input, sprich Links, für einen Linux Noob hat, dann immer her damit.
 
Zuletzt bearbeitet:
Zum Strom sparen schaue mal hier:
https://thinkwiki.de/TLP_-_Linux_Stromsparen

Wegen dem Lüfter habe ich auf meinem X240 "thinkfan" installiert, derzeit mit den folgenden Einstellungen:

Code:
sensor /sys/devices/virtual/thermal/thermal_zone0/temp

(0,     0,      42)
(1,     40,     60)
(2,     50,     61)
(3,     52,     63)
(4,     56,     65)
(5,     59,     66)
(7,     63,     32767)

Mir war es dabei vor allem wichtig, das der Lüfter nicht ständig hochläuft und die meiste Zeit auf der ersten Stufe verbleibt - diese hört man zwar immer noch, das ganze ist aber weitaus besser als das ständige abrupte Hochfahren des Lüfters in kurzen Zeitabständen.
 
Hallo,
ich habe das
...Wegen dem Lüfter habe ich auf meinem X240 "thinkfan" installiert, ...
mit meinem X240, kUBUNTU 18.04 auch versucht. Leider startet mein thinkfan nicht:
Code:
$ sudo systemctl start thinkfan
Job for thinkfan.service failed because the control process exited with error code.
See "systemctl status thinkfan.service" and "journalctl -xe" for details.

$ systemctl status thinkfan.service
● thinkfan.service - simple and lightweight fan control program
   Loaded: loaded (/lib/systemd/system/thinkfan.service; disabled; vendor preset: enabled)
   Active: failed (Result: exit-code) since Thu 2018-09-13 19:45:36 CEST; 50s ago
  Process: 5947 ExecStart=/usr/sbin/thinkfan $DAEMON_ARGS (code=exited, status=4)

Sep 13 19:45:36 RechnerName systemd[1]: Starting simple and lightweight fan control program...
Sep 13 19:45:36 RechnerName thinkfan[5947]: thinkfan 0.9.1 starting...
Sep 13 19:45:36 RechnerName thinkfan[5947]: /sys/devices/platform/coretemp.0/hwmon/hwmon1/temp2_input: No such file or directory
Sep 13 19:45:36 RechnerName systemd[1]: thinkfan.service: Control process exited, code=exited status=4
Sep 13 19:45:36 RechnerName thinkfan[5947]: add_sensor: Error getting temperature.
Sep 13 19:45:36 RechnerName systemd[1]: thinkfan.service: Failed with result 'exit-code'.
Sep 13 19:45:36 RechnerName thinkfan[5947]: Refusing to run without usable config file!
Sep 13 19:45:36 RechnerName systemd[1]: Failed to start simple and lightweight fan control program.

$ ls /sys/devices/platform/coretemp.0/hwmon/hwmon1/
device  subsystem         temp1_input  temp2_crit        temp2_label  temp3_crit_alarm  temp3_max
name    temp1_crit        temp1_label  temp2_crit_alarm  temp2_max    temp3_input       uevent
power   temp1_crit_alarm  temp1_max    temp2_input       temp3_crit   temp3_label

Was mich wundert:
- Die als fehlend bemängelte Datei /sys/devices/platform/coretemp.0/hwmon/hwmon1/temp2_input existiert, siehe ls-Abschnitt.
- Das Protokoll zeigt "thinkfan 0.9.1 starting", laut SYNAPTIC ist thinkfan 0.9.3.2 installiert (aus UBUNTU-Repository).

Deine Einstellungen
Code:
(0,     0,      42)
...
(7,     63,     32767)
habe ich in /etc/thinkfan.conf eingetragen.
Irgendeine Idee, wie ich den Fehler beseitigen kann?
Danke.
 
Danke,
Dir fehlt lm-sensors
aber lm-sensors war und ist installiert; diesen Wiki-Abschnitt hatte ich - nach entsprechender Fehlermeldung - bereits abgearbeitet. Jetzt lautet die Fehlermeldung
$ sudo systemctl start thinkfan
Job for thinkfan.service failed because the control process exited with error code.
See "systemctl status thinkfan.service" and "journalctl -xe" for details.
und nicht mehr
/proc/acpi/ibm/thermal: No such file or directory

Die Ausgabe von sensors zeigt z.B.
$ sensors
thinkpad-isa-0000
Adapter: ISA adapter
fan1: 4929 RPM

acpitz-virtual-0
Adapter: Virtual device
temp1: +64.0°C (crit = +200.0°C)

coretemp-isa-0000
Adapter: ISA adapter
Package id 0: +65.0°C (high = +100.0°C, crit = +100.0°C)
Core 0: +61.0°C (high = +100.0°C, crit = +100.0°C)
Core 1: +65.0°C (high = +100.0°C, crit = +100.0°C)

Wie kann ich den Fehler abstellen?
Danke.
 
Ich habe kürzlich Arch Linux auf meinem i7-T420 installiert und hatte dasselbe Problem mit thinkfan wie der TS. Die nicht-gefundenen Verzeichnisse werden beim Booten offenbar dynamisch angelegt und erhalten bisweilen andere Namen. Zumindest auf dem T420 gibt es einen default, der immer da zu sein scheint:

Code:
/sys/devices/virtual/thermal/thermal_zone0/temp

Der dortige Wert ist aber nicht der der CPU Kerne und ist i.d.R. niedriger. Da ich den T420 als Vierkerner hart rannehme und von Windows ThrottleStop weiß, dass einer der Kerne gerne sehr heiß wird, möchte ich thinkfan jedoch unbedingt die CPU Sensoren abfragen lassen. Dazu müssen aber die Verzeichnisnamen in /etc/thinkfan.conf stimmen. Um das sicherzustellen, erzeuge ich /etc/thinkfan.conf dynamisch beim Booten mittels eines von der thinkfan.service ausgeführten Perl Skriptes, das ich selber geschrieben habe (s.u.).

Vorgehen:

1. in thinkfan.service (in Arch zu finden als symlink von /etc/systemd/system/multi-user.target.wants auf /usr/lib/systemd/system/thinkfan.service folgende Zeile einfügen:

Code:
ExecStartPre=/usr/bin/makethinkfanconf.pl

und zwar im Abschnitt [Service]. Das sieht dann so aus:


thinkfan.service (/usr/lib/systemd/system/thinkfan.service)

Code:
[Unit]
Description=simple and lightweight fan control program
Wants=lm_sensors.service
After=lm_sensors.service

[Service]
Type=forking
ExecStartPre=/usr/bin/makethinkfanconf.pl
ExecStart=/usr/bin/thinkfan
PIDFile=/var/run/thinkfan.pid
ExecReload=/usr/bin/kill -HUP $MAINPID

[Install]
WantedBy=multi-user.target

2. Nun muss natürlich auch das perl Skript /usr/bin/makethinkfanconf.pl her. Ich kann nicht abschätzen, ob mein i7-T420-/usr/bin/makethinkfanconf.pl für das X240 geeignet ist. Dieses ist auch auf meine Bedürfnisse angepasst und enthält die Schwellwerte als Template. Aber ich denke, das Skript kann mit wenigen Handgriffen angepasst werden. Entscheidend sind die Variablen

Code:
my $devices_dir = "/sys/devices/platform";
my $default_hwmon = '/sys/devices/virtual/thermal/thermal_zone0/temp';

wobei letztere den Standard-Sensor benennt, der hoffentlich auch auf dem X240 so heisst.

/usr/bin/makethinkfanconf.pl

Code:
#!/usr/bin/perl
# makethinkfanconf.pl: create the thinkfan.conf configuration, suitable for Lenovo T420 with i7.
#                      This script attempts to compile a list of temperature device paths
#                      and creates a thinkfan.conf configuration file from it using a
#                      a stock template.
#                      This script is referenced as a ExecStartPre in 
#                      /usr/lib/systemd/system/thinkfan.service

use strict;
use File::Find;

my $thinkfan_conf = '/etc/thinkfan.conf';
my $devices_dir = "/sys/devices/platform";
my $default_hwmon = '/sys/devices/virtual/thermal/thermal_zone0/temp';

my $conf =<<EOT
# auto-generated by /usr/lib/systemd/system/thinkfan.service::ExecStartPre

tp_fan /proc/acpi/ibm/fan

(0,	0,	45)
(1,	40,	48)
(2,	46,	52)
(3,	50,	57)
(4,	55,	62)
(5,	60,	67)
(6,	65,	72)
(7,	70,	80)
(127,	75,	32767)

EOT
;

my @hwmon_input;

if(-d $devices_dir){
    find({ wanted => sub { push(@hwmon_input, $File::Find::name) if($_ =~ /temp\d+_input/); }},
	 $devices_dir
	);
}

push (@hwmon_input, $default_hwmon);

$conf .= "hwmon $_\n" for(sort @hwmon_input);

open(CONF, '>', $thinkfan_conf) || die "can't open $thinkfan_conf: $!";
print CONF $conf;
close(CONF) or warn "can't close $thinkfan_conf: $!";


3. Zunächst wird das Perl Skript einmal manuell als root (bzw. sudo) aufgerufen (/etc/thinkfan.conf vorher sichern).


4. Dann mit der vom Skript hergestellten /etc/thinkfan.conf wird thinkfan manuell gestartet:

Code:
thinkfan -n

um zu sehen, ob die Konfiguration OK ist.

Falls das alles nichts hilft, kann man dann ja auch noch die thinkfan Doku (/src/README) lesen.
 
Vielen Dank,
Ich habe kürzlich Arch Linux auf meinem i7-T420 installiert und hatte dasselbe Problem mit thinkfan wie der TS. Die nicht-gefundenen Verzeichnisse werden beim Booten offenbar dynamisch angelegt und erhalten bisweilen andere Namen.
Die nach Booten unterschiedlichen Namen habe ich hier (X240, kUBUNTU 18.04.1) auch gefunden. Danke auch für die ausführliche Beschreibung, diese Problem zu umgehen. Für meinen Kenntnisstand ist das zu hoch und zu zeitraubend.

Wäre noch interessant, ob michaeljk offenbar mir FEDORA28 (?) die unterschiedlichen Namen auch beobachtet.
 
@quaentchen: Danke für dein Skript! Es läuft bei mir gut auf einem T495s, vielleicht die Schwellenwerte etwas höher setzen, bloß ist kommt
Code:
ERROR: read_temps: Failed to read temperature(s) from /sys/devices/platform/thinkpad_hwmon/hwmon/hwmon1/temp8_input: No such device or address
, obwohl temp8_input existiert. Wenn ich Perl könnte, würde ich den Sensor ausschließen.
 
Ich bin immer noch unzufrieden:

Meine perldatei sieht wie folgt aus:
#!/usr/bin/perl
# makethinkfanconf.pl: create the thinkfan.conf configuration, suitable for Lenovo T420 with i7.
# This script attempts to compile a list of temperature device paths
# and creates a thinkfan.conf configuration file from it using a
# a stock template.
# This script is referenced as a ExecStartPre in
# /usr/lib/systemd/system/thinkfan.service

use strict;
use File::Find;

my $thinkfan_conf = '/etc/thinkfan.conf';
my $devices_dir = "/sys/devices/platform/thinkpad_hwmon/hwmon";
my $default_hwmon = '/sys/devices/virtual/thermal/thermal_zone0/temp';

my $conf =<<EOT
# auto-generated by /usr/lib/systemd/system/thinkfan.service::ExecStartPre

tp_fan /proc/acpi/ibm/fan

(0, 0, 45)
(1, 40, 48)
(2, 46, 52)
(3, 50, 57)
(4, 55, 62)
(5, 60, 67)
(6, 65, 72)
(7, 70, 80)
(127, 75, 32767)

EOT
;

my @hwmon_input;

if(-d $devices_dir){
find({ wanted => sub { push(@hwmon_input, $File::Find::name) if($_ =~ /temp\d+_input/ and $_ ne 'temp8_input' and $_ ne 'temp11_input'); }},
$devices_dir
);
}

push (@hwmon_input, $default_hwmon);

$conf .= "hwmon $_\n" for(sort @hwmon_input);

open(CONF, '>', $thinkfan_conf) || die "can't open $thinkfan_conf: $!";
print CONF $conf;
close(CONF) or warn "can't close $thinkfan_conf: $!";


Der Sensor "/sys/devices/virtual/thermal/thermal_zone0/temp" liefert zu hohe Werte, wofür ist der gut?

Der Lüfter ist quasi dauerhaft am Blasen. Kann man arch irgendwie einstellen, dass es die CPU bei geringer Last runtertaktet, sodass er leise laufe kann?
 
Du kannst ja einfach mal die Lüfter Sauber machen und neue Paste aufbringen.
 
Der Sensor "/sys/devices/virtual/thermal/thermal_zone0/temp" liefert zu hohe Werte, wofür ist der gut?

Es muss mindestens einen Sensor geben, damit die Konfigurationsdatei syntaktisch korrekt ist.

Fuer den (unwahrscheinlichen) Fall, dass keine Sensoren gefunden werden, bleibt dann eben immerhin der Default. Der ist gut im T420. Wenn er in anderen ThinkPads nicht gut ist, dann die Zeile
Code:
push (@hwmon_input, $default_hwmon);
auskommentieren (mit # am Zeilenanfang) oder ganz loeschen.
 
  • ok1.de
  • thinkstore24.de
  • Preiswerte-IT - Gebrauchte Lenovo Notebooks kaufen
Zurück
Oben