[[Vorlage(Getestet, focal, bionic, )]] [[Vorlage(Fortgeschritten)]] {{{#!vorlage Wissen [:Pakete_installieren: Installation von Paketen] [:Terminal: Ein Terminal öffnen] [:Editor: Einen Editor mit Root-Rechten öffnen] }}} [[Inhaltsverzeichnis(2)]] [[Bild(Wiki/Icons/Oxygen/battery.png, 48, align=left)]] Notebooks von IBM/Lenovo (ThinkPads) besitzen eine proprietäre Schnittstelle namens ''"SMAPI BIOS"'' (System Management Application Program Interface), die über den Umfang von [wikipedia:Advanced_Configuration_and_Power_Interface:ACPI] hinausgehende Möglichkeiten zur Hardwaresteuerung bietet: * '''tp_smapi''': Kontrolle des Akkuladevorgangs und erweiterter Akkustatus * '''hdaps''': siehe [:Festplattenschutz:] tp-smapi ist __nicht__ zuständig für das Schalten der Funkgeräte, Hotkeys, Temperaturanzeige sowie die Lüftersteuerung. Darum kümmert sich das Kernelmodul [:Thinkpad_ACPI:thinkpad_acpi]. Benutzer folgender Modelle sollten den Abschnitt [#Besonderheiten Besonderheiten] beachten: * ThinkPad Edge, L, SL (ab SL410/510) * ThinkPad T420(s), T520, W520, X220, E320 [[Anker(inkompatibel)]] Inkompatible Modelle, auf denen tp-smapi generell nicht funktioniert: * alle Nicht-ThinkPad-Baureihen von Lenovo (z.B. Ideapad-Reihe) * ThinkPad SL300/400/500 * ThinkPad X121e * ThinkPad L430, L530, T430(s), T530, W530, X230, S430 sowie __alle__ neueren Baureihen – siehe [:TP-SMAPI#Alternativen-für-neuere-ThinkPads: Alternativen] Die in tp-smapi enthaltenen Kernelmodule `tp_smapi` und `hdaps` machen diese Steuerungsmöglichkeiten über die sysfs-Schnittstelle als Dateien unterhalb von '''/sys/devices/platform/smapi/''' und '''/sys/devices/platform/hdaps/''' zugänglich. Beide Kernelmodule verwenden ein drittes Modul `thinkpad_ec` für den Zugriff auf den sog. ''"Embedded Controller"'', der SMAPI hardwareseitig implementiert. = Installation = tp-smapi ist in den Ubuntu-Paketquellen verfügbar. Zu installieren [1] ist das Paket {{{#!vorlage Paketinstallation tp-smapi-dkms }}} Ab Ubuntu 16.04.2 mit HWE-Kernel 4.8 erhält man bei der Installation des Pakets folgende Fehlermeldung: {{{ Error! Bad return status for module build on kernel: 4.8.0-46-generic (x86_64) }}} Zur Behebung lädt man entweder das neuere Paket 0.43-1 aus Ubuntu 19.04 [packages:disco/tp-smapi-dkms:herunter] und installiert es von Hand [1] oder man installiert aus dem [:Festplattenschutz#PPA-einrichten: ThinkPad Extras PPA]. == Kernelmodul manuell laden == Um die sysfs-Schnittstelle nutzen zu können, muss nach der Installation noch das Kernelmodul `tp_smapi` geladen werden. Das Terminal-Kommando [2] {{{#!vorlage Befehl sudo modprobe -v tp_smapi }}} lädt die Module `tp_smapi` und `thinkpad_ec` und produziert im Erfolgsfall folgende Ausgabe: {{{ insmod /lib/modules/KERNELVERSION/updates/dkms/thinkpad_ec.ko insmod /lib/modules/KERNELVERSION/updates/dkms/tp_smapi.ko }}} == Problembehebung == Erscheint beim obigen Kommando hingegen die Fehlermeldung {{{ insmod /lib/modules/KERNELVERSION/updates/dkms/thinkpad_ec.ko WARNING: Error inserting thinkpad_ec (/lib/modules/KERNELVERSION/updates/dkms/thinkpad_ec.ko): No such device or address FATAL: Error inserting tp_smapi (/lib/modules/KERNELVERSION/updates/dkms/tp_smapi.ko): No such device or address }}} kann man die Ursache weiter eingrenzen mit {{{#!vorlage Befehl dmesg | grep thinkpad_ec }}} [[Anker(noec)]] Erscheint die Meldung {{{... thinkpad_ec: no ThinkPad embedded controller!}}} so handelt es sich entweder um ein sehr altes ThinkPad-Modell, das tp-smapi nicht unterstützt (siehe [https://www.thinkwiki.org/wiki/Tp_smapi#Model-specific_status tp-smapi] {en}) oder um ein ganz neues Modell. Im zweiten Fall hilft der Abschnitt [#ThinkPad-T420-s-T520-W520-X220 ThinkPad T420(s), T520, W520, X220] weiter. Erscheint die Meldung {{{... thinkpad_ec: cannot claim IO ports 0x1600-0x161f... consider using force_io=1}}} sollte man einzeln in der genannten Reihenfolge die nachfolgenden Lösungsmöglichkeiten durchtesten und jeweils den obigen Ladebefehl wiederholen. === Hardware Reset === * ThinkPad herunterfahren und ausschalten * Netzteil entfernen * Akku entfernen * Einschalttaste mindestens 30 Sekunden gedrückt halten * Stromversorgung wieder herstellen und das ThinkPad starten {{{#!vorlage Warnung Beim ThinkPad X121e kann der Hardware-Reset dazu führen, dass das Notebook überhaupt nicht mehr startet (2 Fälle im Forum aufgetreten) und das Gerät in die Werkstatt muss. Alle anderen Modelle sind von diesem Problem jedoch nicht betroffen. }}} === BIOS Default Settings === * Nach dem Einschalten beim Erscheinen des ThinkPad-Logos mit [[Vorlage(Tasten, F1)]] ins BIOS Setup * [[Vorlage(Tasten, F9)]] (Default Settings) [[Vorlage(Tasten, Enter)]] (Yes) * [[Vorlage(Tasten, F10)]] (Save and Exit) [[Vorlage(Tasten, Enter)]] (Yes) * Nach dem Erscheinen des ThinkPad-Logos durch Halten der Einschalttaste (ca. 10 Sekunden) ThinkPad ausschalten * Wieder einschalten {{{#!vorlage Warnung Bei einem im [wikipedia:Unified_Extensible_Firmware_Interface:UEFI]-Modus installiertem Ubuntu – erkennbar z.B. an der Existenz des Verzeichnisses '''/sys/firmware/efi''' – wird durch den Aufruf der Default Settings der Booteintrag gelöscht, dadurch startet das System nicht mehr. Den Booteintrag kann man mittels eines Live-Systems ([:Live-CD:]/[:Live-USB:]) per [:efibootmgr#Booteintrag-erstellen:] wiederherstellen. }}} Manchmal liegt das Problem auch an einer veralteten BIOS-Version. Auf der [https://support.lenovo.com/de_DE/ Herstellerseite] {de} werden BIOS-Updates in Form von bootfähigen ISO-Images angeboten. Nach jedem BIOS-Update sollte man unbedingt wie oben beschrieben die ''"Default Settings"'' aktivieren. === Modulparameter === Mit einem Editor mit Root-Rechten [3] legt man die Datei '''/etc/modprobe.d/tp-smapi.conf''' mit folgendem Inhalt an: {{{ options thinkpad_ec force_io=1 }}} === Inkompatible Hardware === Bringen die vorstehenden Maßnahmen keinen Erfolg, dann hat man eine [#inkompatibel inkompatible Hardware]. == Kernelmodul automatisch beim Systemstart laden == Wenn das manuelle Laden erfolgreich getestet wurde, kann man es durch Einfügen [3] der folgenden Zeile in '''/etc/modules''' automatisieren: {{{ tp_smapi }}} {{{#!vorlage Hinweis Benutzer von TLP (siehe [#Links Links]) brauchen diesen Schritt nicht durchzuführen, da TLP `tp_smapi` automatisch lädt. }}} = Akkufunktionen = Status und Einstellungen sind je Akku als Dateien unterhalb eines Verzeichnisses abgebildet: [[Anker(tabelle1)]] {{{#!vorlage tabelle <-2 rowclass="titel"> Tabelle 1: Akkuverzeichnisse +++ Akku Verzeichnis +++ Hauptakku '''/sys/devices/platform/smapi/BAT0/''' +++ Ultrabayakku '''/sys/devices/platform/smapi/BAT1/''' }}} Die Bedeutung der einzelnen Dateien erklärt die folgende Tabelle (aus Gründen der Übersichtlichkeit wird nur eine Auswahl wiedergegeben): [[Anker(tabelle2)]] {{{#!vorlage tabelle <-5 rowclass="titel"> Tabelle 2: Akkufunktionen +++ Datei Schreibbar Funktion Einheit Bemerkung +++ `current_avg` <:>N Akkustrom (Durchschnitt) mA Durchschnitt der letzten Minute; positiver Wert=Akku wird geladen, negativer Wert=Akku wird entladen +++ `current_now` <:>N Akkustrom (momentan) mA positiver Wert=Akku wird geladen, negativer Wert=Akku wird entladen +++ `cycle_count` <:>N Anzahl Ladezyklen 1 als Ladezyklus zählt eine vollständige Entladung des Akkus, d.h. von 100 % auf 0 %, oder z.B. zweimaliges Entladen von 80 % auf 30 %, gefolgt von einer Aufladung auf den Ursprungswert +++ `design_capacity` <:>N Vorgesehener Energieinhalt mWh Designkapazität (mAh) · Nennspannung (V) +++ `design_voltage` <:>N Nennspannung mV +++ `first_use_date` <:>N Datum der Erstverwendung JJJJ-MM-TT +++ `force_discharge` <:>J Entladung erzwingen - 0=Inaktiv, 1=Entladen; Zwangsentladung ist nur bei angeschlossenem Netzteil möglich; der Entladevorgang wird bei leerem Akku automatisch beendet und der Akku anschließend bis zur eingestellten oberen Ladeschwelle (s.u.) geladen +++ `inhibit_charge_minutes` <:>J Ladevorgang unterbrechen für definierte Zeitspanne min +++ `installed` <:>N Akku vorhanden - 0=nein, 1=ja +++ `last_full_capacity` <:>N Energieinhalt nach letzter vollständiger Aufladung mWh Tatsächlich nutzbarer Energieinhalt; dieser Wert kann bei neuem Akku über dem vorgesehenen (s.o.) liegen und sinkt im Verlauf des Akkulebens durch Verschleiß allmählich ab +++ `manufacture_date` <:>N Herstellungsdatum JJJJ-MM-TT +++ `manufacturer` <:>N Hersteller der Akkuzellen - +++ `power_avg` <:>N Leistungsaufnahme/-abgabe (Durchschnitt) mW Durchschnitt der letzten Minute; positiver Wert=Akku wird geladen, negativer Wert=Akku wird entladen +++ `power_now` <:>N Leistungsabgabe (momentan) mW positiver Wert=Akku wird geladen, negativer Wert=Akku wird entladen +++ `remaining_capacity` <:>N momentaner Energieinhalt mWh +++ `remaining_charging_time` <:>N verbleibende Ladezeit min +++ `remaining_percent` <:>N momentaner Ladestand % +++ `remaining_running_time` <:>N Restlaufzeit (Durchschnitt) min Schätzung aus Durchschnitts-Endladestrom (s.o.) +++ `remaining_running_time_now` <:>N Restlaufzeit (momentan) min Schätzung aus momentanem Endladestrom (s.o.) +++ `state` <:>N Akkustatus - charging=Akku wird geladen, discharging=Akku wird entladen, idle=keine Änderung des Ladestands +++ `start_charge_thresh` <:>J untere Ladeschwelle % Das Aufladen startet beim Anschließen des Netzteils nur dann, wenn die Ladung unterhalb dieses Werts liegt; Werkseinstellung: 96 % +++ `stop_charge_thresh` <:>J obere Ladeschwelle % Beim Erreichen dieses Werts endet der Aufladevorgang; Werkseinstellung: 100 % +++ `temperature` <:>N Akkutemperatur °C / 1000 +++ `voltage` <:>N Akkuspannung (momentan) mV }}} = Anwendungsbeispiele = == Akkudaten auslesen == Alle in [#tabelle2 Tabelle 2] aufgeführten Daten lassen sich per Terminalkommando auslesen. Entweder einzeln mit {{{#!vorlage Befehl cat /sys/devices/platform/smapi/BATx/DATEI }}} oder alles zusammen mit {{{#!vorlage Befehl grep '.*' /sys/devices/platform/smapi/BATx/* }}} == Stromverbrauch anzeigen == Folgendes Kommando gibt alle 5 Sekunden die am Hauptakku gemessene momentane Leistungsaufnahme aus: {{{#!vorlage Befehl watch -n 5 cat /sys/devices/platform/smapi/BAT0/power_now }}} Beenden mit [[Vorlage(Tasten, strg+c)]]. == Ladeschwellen einstellen == Um beim Hauptakku den Ladebeginn auf 75% und das Ladeende auf 80% der Akkukapazität festzulegen, verwendet man folgende Kommandos: {{{#!vorlage Befehl sudo sh -c "echo 75 > /sys/devices/platform/smapi/BAT0/start_charge_thresh" sudo sh -c "echo 80 > /sys/devices/platform/smapi/BAT0/stop_charge_thresh" }}} __Hinweise:__ * Die untere Ladeschwelle muss mindestens 4 Prozentpunkte kleiner als die obere sein; von dieser Regel abweichende Werte werden von tp-smapi eigenständig angepaßt * Die so eingestellten Ladeschwellen werden erst wirksam, nachdem das ThinkPad einmal heruntergefahren und ausgeschaltet wurde (siehe auch [#Ladeschwellen-im-laufenden-Betrieb-aktivieren sofort aktivieren]) * Die Ladeschwellen bleiben beim Ausschalten des ThinkPads erhalten * Die Ladeschwellen gehen beim Entnehmen des Akkus verloren und müssen nach dem Wiedereinsetzen neu geschrieben werden (gilt nur für ältere Modelle) Möchte man - z.B. aufgrund des vorstehenden Hinweises zum Akkuwechsel - die Ladeschwellen bei jedem Systemstart erneut setzen, nimmt man folgende Zeilen in [:Archiv/rc.local:] auf [3] : {{{ echo 75 > /sys/devices/platform/smapi/BAT0/start_charge_thresh echo 80 > /sys/devices/platform/smapi/BAT0/stop_charge_thresh }}} === Ladeschwellen aktivieren === Bei älteren ThinkPad-Modellen greifen die so geschriebenen Akkuladeschwellen nicht sofort. Man aktiviert sie entweder durch Herunterfahren und Ausschalten des ThinkPads oder indem man im laufenden Betrieb `force_discharge` für kurze Zeit (im Beispiel 2s) auf 1 setzt: {{{#!vorlage Befehl cd /sys/devices/platform/smapi/BAT0/ sudo sh -c "echo 1 > force_discharge; sleep 2; echo 0 > force_discharge" }}} {{{#!vorlage Warnung In einem Fall eines ThinkPads mit defektem Akku wurde beobachtet, dass diese Vorgehensweise zu einer Unterbrechung der Stromversorgung und damit zum sofortigen Neustart führte. Daher sollte das Kommando keinesfalls in den Systemstart eingebaut werden. }}} == Akku rekalibrieren == Das Rekalibrieren sorgt dafür, dass die Elektronik im Akkupack Ladezustand und Kapazität korrekt wiedergibt. Verschlissene oder defekte Akkuzellen werden dadurch nicht repariert. Der Rekalibrierungsvorgang besteht aus folgenden Schritten: * Ladeende auf 100% festlegen (Vorgehensweise s.o.) * Akku vollständig entladen (mit angeschlossenem Netzteil) * Akku vollständig aufladen Das folgende Kommando leitet das Entladen des Hauptakkus ein (nur bei angeschlossenem Netzteil möglich!): {{{#!vorlage Befehl sudo sh -c "echo 1 > /sys/devices/platform/smapi/BAT0/force_discharge" }}} Nach dem Ende des Entladevorgangs wechselt der Inhalt der Datei automatisch wieder auf 0 und der Ladevorgang bis zur eingestellten oberen Ladeschwelle beginnt. Die verbleibende Kapazität kann man während des Entladens beobachten mit: {{{#!vorlage Befehl cd /sys/devices/platform/smapi/BAT0/ while [ "$(cat force_discharge)" = "1" ]; do cat remaining_capacity; sleep 5; done }}} oder prozentual (erster Befehl), bzw. prozentual ohne abzubrechen (zweiter Befehl): {{{#!vorlage Befehl while [ $(cat force_discharge) -eq 1 ]; do cat remaining_percent; sleep 5; done watch -n5 cat remaining_percent }}} = Besonderheiten = == ThinkPad Edge, L, SL (ab SL410/510) == Bei diesen Baureihen entsprechen die ausgelesenen Werte für die Akkuladeschwellen nicht den zuvor geschriebenen Werten. So liefert z.B. das Setzen der Ladeschwellen auf `start_charge_thresh = 75 / stop_charge_thresh = 80`, beim Auslesen stattdessen 81 / 80. Wenn man zuerst `stop_charge_thresh` und danach `start_charge_thresh` schreibt, ist das Ergebnis 75 / 74. Benutzer berichten jedoch, dass trotzdem die zuvor geschriebenen Werte wirksam sind. == ThinkPad T420(s), T520, W520, X220, E320 == Bei diesen Modellen (mit Intel Sandy Bridge Prozessor) werden derzeit die Akkufunktionen `start_charge_thresh` und `force_discharge` nicht unterstützt, wobei bisher nicht bekannt ist, ob es sich um eine Limitierung der Hardware oder ein Softwareproblem handelt. Alternativen sind [:TP-SMAPI#Alternativen-fuer-neuere-ThinkPads: unten erwähnt]. Der [:Festplattenschutz:] funktioniert (außer E320). Leider entfällt bei den betroffenen Modellen beim Schreiben von `stop_charge_thresh` auch die automatische Anpassung von `start_charge_thresh` auf einen Wert kleiner oder gleich `stop_charge_thresh - 4`. Dies kann zu häufigen kurzen Ladevorgängen und erhöhtem Akkuverschleiß führen. == ThinkPad T430(s), T530, W530, X230, S430 == Bei diesen Modellen (mit Intel Ivy Bridge Prozessor) und allen neueren Baureihen schlägt das Laden von `tp_smapi` mit der Meldung {{{ insmod /lib/modules/KERNELVERSION/updates/dkms/thinkpad_ec.ko WARNING: Error inserting thinkpad_ec (/lib/modules/KERNELVERSION/updates/dkms/thinkpad_ec.ko): No such device or address FATAL: Error inserting tp_smapi (/lib/modules/KERNELVERSION/updates/dkms/tp_smapi.ko): No such device or address }}} fehl. Eine Lösung für tp-smapi ist bisher nicht bekannt. Alternativen für die Ladeschwellen werden im nächsten Abschnitt beschrieben. = Alternativen für neuere ThinkPads = Für ThinkPad-Modelle ab der Sandy-Bridge-Generation (oder neuer), bei denen tp-smapi nur unvollständig oder gar nicht mehr funktioniert (s. oben, Ausnahme: E320), existieren zwei Alternativen für das Setzen der Ladeschwellen: * Das Perl-Skript [github:teleshoes/tpacpi-bat:tpacpi-bat] {en} * Ab Kernel 4.18 die native API "natacpi", integriert in das Kernelmodul [:Thinkpad_ACPI:thinkpad_acpi] Für die genannten Alternativen greift man am einfachsten auf das [https://linrunner.de/tlp Stromspartool TLP] zurück. TLP bringt tpacpi-bat bereits mit, bietet eine einheitliche Schnittstelle zu den oben beschriebenen ThinkPad-Akkufunktionen und verwendet je nach Hardware automatisch entweder natacpi, tpacpi-bat oder tp-smapi. [[Vorlage(Fremd, Quelle, "")]] = Links = == Intern == * [:Festplattenschutz:] – Installation und Konfiguration von HDAPS (Hard Disk Active Protection System) * [:Thinkpad_ACPI: thinkpad_acpi] – ThinkPad-spezifisches Kernelmodul zum Schalten der Funkgeräte, Hotkeys, Temperaturanzeige und Lüftersteuerung == Extern == * [github:evgeni/tp_smapi:tp-smapi bei Github] {en} – Repository des Debian Package Maintainers (hier werden mittlerweile Änderungen gepflegt) * [https://www.thinkwiki.org/wiki/Tp_smapi tp-smapi] {en} – Artikel bei thinkwiki.org * [github:teleshoes/tpacpi-bat:tpacpi-bat] {en} – Perl-Skript zum Setzen der Ladeschwellen bei neueren ThinkPads * [github:teleshoes/acpi_call/commits/master:acpi-call] {en} – Kernelmodul das von tpacpi-bat vorausgesetzt wird * [https://linrunner.de/tlp TLP] {de} – Stromspartool mit Funktionen zur Anzeige des Akkustatus, Setzen der Ladeschwellen und Rekalibrieren des Akkus * [https://thinkwiki.de/TLP_FAQ#ThinkPad_Akku TLP FAQ ThinkPad-Akku] {de} – vertiefende FAQ zu Akkufunktionen, Ladeschwellen sowie zur Fehleranalyse bei tp-smapi und tpacpi-bat * [https://thinkwiki.de/Messung_der_Leistungsaufnahme_unter_Linux#thinkwatt thinkwatt] {de} – einfaches Tool zur Aufzeichnung und grafischen Anzeige des Stromverbrauchs * [wikipedia:Lithium-Ionen-Akkumulator:] – Wikipedia # tag: Hardware, System, Notebook