Thinkpad ACPI
Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:
Ubuntu 20.04 Focal Fossa
Du möchtest den Artikel für eine weitere Ubuntu-Version testen? Mitarbeit im Wiki ist immer willkommen! Dazu sind die Hinweise zum Testen von Artikeln zu beachten.
Artikel für fortgeschrittene Anwender
Dieser Artikel erfordert mehr Erfahrung im Umgang mit Linux und ist daher nur für fortgeschrittene Benutzer gedacht.
Zum Verständnis dieses Artikels sind folgende Seiten hilfreich:
thinkpad_acpi ist ein Kerneltreiber speziell für IBM/Lenovo ThinkPad-Laptops. Er ermöglicht, verschiedene Komponenten dieser Laptops zu kontrollieren, welche über ACPI angesteuert, aber vom konventionellen Linux-ACPI-Treiber nicht unterstützt werden. Das Modul ist in Kernel-Versionen seit 2.6.10 enthalten. Diverse Anwendungen (so etwa GNOME-Sensors-Applet oder GKrellM) greifen auf dieses Kernelmodul zurück.
Der vorliegende Artikel beschreibt, wie sich die einzelnen Komponenten manuell oder auch in Skripten ansteuern lassen. Das ist nicht immer ganz ungefährlich, weil damit teils direkt in die Hardware-Register des ThinkPads geschrieben wird. Die Funktionen sind daher mit entsprechender Sorgfalt zu handhaben!
Hinweis:
Thinkpad ACPI funktioniert nicht mit ThinkPads der Baureihe SL, da dort eine abweichende Hardware verbaut ist!
Zugriff¶
Das Kernelmodul wird auf allen kompatiblen ThinkPads beim Systemstart automatisch geladen. Prüfen lässt sich das mittels:
lsmod | grep thinkpad
Falls es nicht automatisch geladen wurde, kann man das durch
sudo modprobe -v thinkpad_acpi
nachholen. Schlägt das Laden fehl, gibt die Ausgabe Hinweise auf die Fehlerursache.
Die Komponenten, die über das Modul angesteuert werden können, finden sich als Dateien in folgenden Verzeichnissen:
/sys/devices/platform/thinkpad_acpi/ und einige Unterverzeichnisse
/sys/class/power_supply/BAT0 bzw. BAT1
/proc/acpi/ibm - veraltet (Komponenten die nur dort verfügbar sind, werden hier dennoch betrachtet)
Sie werden alle auf ähnliche Weise angesprochen.
Hinweis:
Zur besseren Lesbarkeit wird in den cat- und echo-Befehlen der Komponenten-Abschnitte der Verzeichnispfad weggelassen - außer bei /proc/acpi/ibm/. Entweder man ergänzt ihn selbst oder man wechselt zuvor in das Verzeichnis.
Lesen¶
Um auszulesen, wie eine Komponente momentan eingestellt ist (status) und welche Optionen zur Verfügung stehen (commands), ist folgender Befehl zu verwenden:
cat /sys/devices/platform/thinkpad_acpi/KOMPONENTE
Welche Komponenten es gibt, sieht man mit
find /sys/devices/platform/thinkpad_acpi/ -type f | grep -E -v 'modalias|input|power|rfkill|trigger|uevent' | sort
Dabei kommt z.B. heraus:
/sys/devices/platform/thinkpad_acpi/bluetooth_enable /sys/devices/platform/thinkpad_acpi/cmos_command /sys/devices/platform/thinkpad_acpi/driver_override /sys/devices/platform/thinkpad_acpi/hotkey_adaptive_all_mask /sys/devices/platform/thinkpad_acpi/hotkey_all_mask /sys/devices/platform/thinkpad_acpi/hotkey_bios_enabled /sys/devices/platform/thinkpad_acpi/hotkey_bios_mask /sys/devices/platform/thinkpad_acpi/hotkey_enable /sys/devices/platform/thinkpad_acpi/hotkey_mask /sys/devices/platform/thinkpad_acpi/hotkey_poll_freq /sys/devices/platform/thinkpad_acpi/hotkey_radio_sw /sys/devices/platform/thinkpad_acpi/hotkey_recommended_mask /sys/devices/platform/thinkpad_acpi/hotkey_source_mask /sys/devices/platform/thinkpad_acpi/leds/tpacpi::standby/brightness /sys/devices/platform/thinkpad_acpi/leds/tpacpi::standby/max_brightness /sys/devices/platform/thinkpad_acpi/leds/tpacpi::thinklight/brightness /sys/devices/platform/thinkpad_acpi/leds/tpacpi::thinklight/max_brightness /sys/devices/platform/thinkpad_acpi/leds/tpacpi::thinkvantage/brightness /sys/devices/platform/thinkpad_acpi/leds/tpacpi::thinkvantage/max_brightness /sys/devices/platform/thinkpad_acpi/wakeup_hotunplug_complete /sys/devices/platform/thinkpad_acpi/wakeup_reason /sys/devices/platform/thinkpad_acpi/wwan_enable
Schreiben¶
Um die Einstellungen einer Komponente zu verändern, muss die Eingabe an die jeweilige Datei geleitet werden. Das geschieht mit dem echo-Befehl. Weil Dateien im /sys-Verzeichnis aber nur mit Root-Rechten verändert werden dürfen, ist eine verschachtelte Umleitung notwendig. Also entweder durch das Kapseln des Befehls in eine eigene Shell:
sudo sh -c "echo OPTION > /sys/devices/platform/thinkpad_acpi/KOMPONENTE"
oder durch eine Umleitung über tee.
echo OPTION | sudo tee /sys/devices/platform/thinkpad_acpi/KOMPONENTE
Speichern¶
Sollen gewisse Komponenten bei jedem Systemstart mit einer bestimmten Option automatisch geladen werden, so kann dies in einer Datei /etc/modprobe.d/thinkpad_acpi.conf (neu anzulegen) festgelegt werden [2]. Einträge haben die Form KOMPONENTE=OPTION
, die Datei könnte z.B. folgendermassen aussehen:
options thinkpad_acpi experimental=1 fan_control=1
Der Name der Datei spielt übrigens keine Rolle, solange er auf .conf endet.
Eine Übersicht der möglichen Optionen liefert der Befehl:
modinfo thinkpad_acpi | grep 'parm:'
Die Komponenten¶
Im folgenden werden die Komponenten vorgestellt, die über das Modul angesteuert werden können.
Ladeschwellen (ab Ubuntu 18.04.2)¶
Seit Kernel 4.18.0-17 kann man in den Verzeichnissen unterhalb /sys/class/power_supply/BAT0 bzw. BAT1 nicht mehr nur die Daten des/der Akkus auslesen, sondern zusätzlich das Ladeverhalten beeinflussen.
Hinweis:
Voraussetzung ist ein ThinkPad der Generation T420/X220 oder neuer; ältere Modelle bedient TP-SMAPI (Abschnitt „Akkufunktionen“). Eine komfortable, modellunabhängige Steuerung von Ladeschwellen und Rekalibration bietet das Stromspartool TLP.
Dabei ist modellabhängig
BAT0 der interne bzw. Hauptakku,
BAT1 der Ultrabay-, Slice- bzw. Wechselakku.
Folgende Dateien sind relevant:
Datei | Wertebereich | Einheit | Funktion | Bemerkung |
charge_start_threshold | 0 .. 99 | % | untere Ladeschwelle | Das Aufladen startet beim Anschließen des Netzteils nur dann, wenn der Ladezustand unterhalb dieses Werts liegt; Werkseinstellung ist 96 %; 0 deaktiviert die Schwelle, dies ist aber ebenso wie Werte > 96 nicht empfehlenswert! |
charge_stop_threshold | 1 .. 100 | % | obere Ladeschwelle | Beim Erreichen dieses Werts endet der Aufladevorgang; Werkseinstellung ist 100 %; Schreiben von 100 deaktiviert die Schwelle (muss zuerst gesetzt werden) |
Folgende Befehle aktivieren die Werkseinstellung:
echo 100 | sudo tee charge_stop_threshold echo 96 | sudo tee charge_start_threshold
LEDs¶
In den Verzeichnissen unterhalb /sys/devices/platform/thinkpad_acpi/leds/ lassen sich
Tastatur-Hintergrundbeleuchtung,
Tasten-LEDs; sowie
Kontrolleuchten
ein- und ausschalten bzw. in der Helligkeit anpassen, sowie der aktuelle Zustand auslesen.
Unterverzeichnis | Funktion |
platform::mute | Lautstärke-Stumm-Taste |
platform::micmute | Mikrofon-Stumm-Taste |
tpacpi::kbd_backlight | Tastatur-Hintergrundbeleuchtung |
tpacpi::power | Power-Taste bzw. -Kontrollleuchte |
tpacpi::standby | Standby-Anzeige: Mond-Symbol (ältere Modelle) bzw. pulsierende Power-Taste und i-Punkt im Displaydeckel (neuere Modelle) |
tpacpi::thinklight | ThinkLight |
tpacpi::thinkvantage | unbekannt |
Hinweis:
Nicht alle Modelle verfügen über jedes Verzeichnis und nicht für jedes Verzeichnis muss es auch eine LED geben.
Befindet man sich in einem der Verzeichnisse, läßt sich die zugehörige LED über die Datei brightness wie folgt schalten:
echo 255 | sudo tee brightness # an echo 0 | sudo tee brightness # aus
Den maximalen Wert für brightness liefert
cat max_brightness
In der Regel wird hier 255 ausgegeben. Ausnahme ist die Tastatur-Hintergrundbeleuchtung, die 2 ausgibt und die brightness-Werte 0, 1, 2 unterstützt.
Temperatur-Sensoren¶
Ältere ThinkPads (bis zur Generation des X200/T400) verfügen über mindestens sechs Temperatur-Sensoren. Diese können zwar herkömmlich über Lm sensors ausgelesen werden, jedoch bietet bei diesen Modellen
cat /proc/acpi/ibm/thermal
die Möglichkeit, bis zu 16 verschiedene Temperatur-Sensoren im kompakter Darstellung auszulesen. Hier die Ausgabe bei einem X200 (nicht vorhandene Sensoren werden mit -128 ausgewiesen):
temperatures: 29 35 -128 30 26 -128 25 -128 35 33 -128 -128 -128 -128 -128 -128
Wo genau die Sensoren liegen, variiert von Modell zu Modell; folgende Angaben treffen aber auf die meisten unterstützten ThinkPads zu:
Nr. | Sensor-Lage | Nr. | Sensor-Lage | Nr. | Sensor-Lage | Nr. | Sensor-Lage |
1 | CPU | 2 | Mini-PCI | 3 | HDD | 4 | GPU |
5 | Batterie 1 | 6 | UltraBay-Batterie 1 | 7 | Batterie 2 | 8 | UltraBay-Batterie 2 |
9 | Modell-spezifisch | 10 | Modell-spezifisch | 11 | Modell-spezifisch | 12 | Modell-spezifisch |
13 | Modell-spezifisch | 14 | Modell-spezifisch | 15 | Modell-spezifisch | 16 | Modell-spezifisch |
Eine Modell-spezifische Zusammenstellung, an welcher Stelle welcher Sensor ausgewiesen wird, findet sich auf thinkwiki.org 🇬🇧 .
Bei dieser Komponente lässt sich manuell nichts verändern; zum Lesen und Überwachen der Temperatur-Sensoren eignet sich folgender Befehl, wobei X
das Zeitintervall in Sekunden angibt, in welchem die Sensor-Daten neu ausgegeben werden sollen:
watch -n X cat /proc/acpi/ibm/thermal
Lüfter¶
Unter /proc/acpi/ibm/fan lässt sich der Lüfter manuell steuern.
Achtung!
Manipulationen am Lüfter können zu Überhitzung und damit zu irreversiblen Hardware-Schäden führen. Die Lüfter-Einstellungen dürfen nur bei gleichzeitiger Überwachung der Temperatur-Sensoren verändert werden!
Hinweis:
Steuerung des Lüfters ist nur möglich, wenn das thinkpad_acpi-Modul mit der Option fan_control=1
geladen wird. Ein entsprechender Eintrag muss also in der Datei /etc/modprobe.d/thinkpad_acpi.conf (siehe Speichern) stehen.
Grundsätzlich lässt sich der Lüfter mit den Befehlen enable
und disable
ein- und ausschalten.
echo enable | sudo tee /proc/acpi/ibm/fan echo disable | sudo tee /proc/acpi/ibm/fan
Die direkte Steuerung des Lüfters erfolgt über Levels, wobei die gewünschte Stufe jeweils als level X
zu übergeben ist (nicht jedes Level muss zu einer spürbaren Veränderung führen):
echo level 0 | sudo tee /proc/acpi/ibm/fan # stoppt den Ventilator echo level 1 | sudo tee /proc/acpi/ibm/fan # niedrigste Stufe ... echo level 7 | sudo tee /proc/acpi/ibm/fan # höchste (gesicherte) Stufe echo level disengaged | sudo tee /proc/acpi/ibm/fan # Lüfter läuft ungebremst (kann zu Hardware-Schäden führen) echo level auto | sudo tee /proc/acpi/ibm/fan # überlässt die Lüfter-Steuerung dem ThinkPad
Zur Sicherheit verfügt die Lüftungssteuerung zudem über eine Überwachungsfunktion (watchdog): ihr kann eine Zeitspanne zwischen "1" und "120" Sekunden übergeben werden, nach deren Ablauf dem Lüfter automatisch das enable
-Kommando (mit dem Level auto
) übergeben wird, sofern inzwischen vom Benutzer kein neues Kommando eingegangen ist:
echo watchdog 30 | sudo tee /proc/acpi/ibm/fan
Einmal gesetzt, bleibt der Wachhund auch für jede weitere Manipulation gesetzt, bis er entweder manuell verändert oder mit 0
ausgeschaltet wird.
Automatische Lüftersteuerung¶
Mittels des Pakets
thinkfan (universe)
Befehl zum Installieren der Pakete:
sudo apt-get install thinkfan
Oder mit apturl installieren, Link: apt://thinkfan
kann eine individuell anpassbare, automatische Lüftersteuerung eingerichtet werden. Anleitung zur Einrichtung siehe thinkfan 🇩🇪.
Bluetooth, WWAN¶
Hinweis:
Der bessere Weg zum Ein- und Ausschalten führt über den Befehl rfkill. Er unterstützt auch WLAN und funktioniert einheitlich – unabhängig vom Laptop-Fabrikat.
In /sys/devices/platform/thinkpad_acpi/bluetooth_enable kann ein integriertes Bluetooth-Gerät ein- und ausgeschaltet, sowie der aktuelle Status ausgelesen werden.
Die Datei /sys/devices/platform/thinkpad_acpi/wwan_enable tut dasselbe für integriertes WWAN (UMTS/3G, LTE/4G).
Ein- und Ausschalten tut man per:
echo 1 | sudo tee bluetooth_enable # an echo 0 | sudo tee bluetooth_enable # aus
Fn-Hotkeys¶
In /sys/devices/platform/thinkpad_acpi/hotkey_mask kann die Behandlung der Fn -Sondertasten durch den Kerneltreiber aktiviert und deaktiviert, bzw. die aktuelle Einstellung abgelesen werden. Es werden allerdings nicht alle Fn -Sondertasten durch thinkpad_acpi behandelt.
Hinweis:
Für nahezu alle – insbesondere neuere – Thinkpad-Modelle und unterstützte Ubuntu-Versionen arbeiten die Fn -Sondertasten ohne weiteres Zutun. Anpassungen der hotkey_mask sind daher in der Regel unnötig.
Um einzelne Tasten ein- und auszuschalten, bedient sich der Treiber einer 32-Bit-Maske, deren untere 12 Bits nachstehend beschrieben werden (die Zuordnungen der ACPI-Ereignisse können von Modell zu Modell variieren, eine Übersicht bietet das entsprechende Artikel 🇬🇧 im ThinkWiki):
Hotkey | Bit-Maske | ACPI-Ereignis | Hotkey | Bit-Maske | ACPI-Ereignis | Hotkey | Bit-Maske | ACPI-Ereignis |
Fn + F1 | 0001 | Bildschirm sperren | Fn + F5 | 0010 | Bluetooth an / aus | Fn + F9 | 0100 | abdocken |
Fn + F2 | 0002 | Bildschirm abdunkeln | Fn + F6 | 0020 | unbekannt | Fn + F10 | 0200 | unbekannt |
Fn + F3 | 0004 | Bildschirm aus | Fn + F7 | 0040 | Monitor wechseln | Fn + F11 | 0400 | unbekannt |
Fn + F4 | 0008 | Standby | Fn + F8 | 0080 | unbekannt | Fn + F12 | 0800 | Ruhezustand |
Es ist nun die Summe der Bit-Masken aller zu aktivierender Hotkeys an die Hotkey-Komponente zu übergeben. Dazu einige Beispiele:
echo 0xffff | sudo tee hotkey_mask # Alle möglichen Hotkeys werden aktiviert echo 0x0000 | sudo tee hotkey_mask # Alle möglichen Hotkeys werden deaktiviert echo 0xff9f | sudo tee hotkey_mask # Alle möglichen Hotkeys außer Fn + F8 werden aktiviert echo 0x080c | sudo tee hotkey_mask # Nur Fn + F3, Fn + F4 und Fn + F12 werden aktiviert
Hinweis:
Diese Bit-Masken entsprechen nicht den Codes der ACPI-Ereignisse 🇬🇧 , welche durch die Tasten ausgelöst werden!
Den ursprünglichen Zustand kann man jederzeit mit
cat hotkey_recommended_mask | sudo tee hotkey_mask
wieder herstellen.
Weitere vordefinierte Zustände kann man aus den Dateien hotkey_all_mask, hotkey_recommended_mask und hotkey_source_mask auslesen. Die detaillierte Beschreibung – auch für einige weitere, weniger gebräuchliche Hotkey-Komponenten – findet sich in der Kernel-Dokumentation 🇬🇧.
Weitere Komponenten¶
Dieser Artikel beschreibt nur Komponenten, die für die Mehrzahl der User interessant sind. Für weniger gebräuchliche Komponenten sei auf die Kernel-Dokumentation 🇬🇧 verwiesen.
Hotkey-Problembehebung¶
Lautstärke-Tasten zeigen kein OSD¶
Bei ThinkPad-Modellen bis einschließlich T60/X60/R52 wird beim Betätigen der Lautstärketasten kein On-Screen-Display (OSD) angezeigt (siehe 357673 🇬🇧). Hier schafft folgende Masken-Anpassung Abhilfe:
echo 0x00fc7fff | sudo tee hotkey_mask
Um die Lösung persistent zu machen, nimmt man folgende Zeile in Archiv/rc.local (vor dem abschließenden exit 0) auf:
echo 0x00fc7fff > /sys/devices/platform/thinkpad_acpi/hotkey_mask
W510 Bildschirmhelligkeit¶
Wegen den Nvidia-Grafiktreibern funktioniert die Regelung der Bildschirmhelligkeit über die Fn-Tasten erst, nachdem man in der Datei /etc/X11/xorg.conf im Bereich Device
folgende Option hinzufügt:
1 | Option "RegistryDwords" "EnableBrightnessControl=1" |
Danach den Benutzer ab- und wieder anmelden und das Regeln der Bildschirmhelligkeit funktioniert wieder.
Links¶
Kernel-Dokumentation 🇬🇧 – in Teilen veraltet
ThinkWiki 🇬🇧 – umfangreiche Informationsquelle zu allen Thinkpad-Modellen
Thinkpad-acpi 🇬🇧 im ThinkWiki
ThinkPad-Wiki 🇩🇪 – nicht ganz so umfangreiche, aber deutschsprachige Informationen
Ubuntu Schnelleinstieg 🇩🇪 – Ubuntu auf Thinkpads installieren
ThinkPad Extras PPA 🇩🇪 – Tools für Thinkpads
ThinkPad-Forum 🇩🇪 – weitere Informationsquelle
thinkfan 🇩🇪 – einfache Lüftersteuerung (in den offiziellen Paketquellen enthalten)
Trackpoint einrichten
Akkuladeschwellen per SMAPI einstellen und mehr
TLP 🇩🇪 - Stromspartool, das zusätzlich eine komfortable, modellunabhängige Steuerung für Ladeschwellen und Rekalibration implementiert