ubuntuusers.de

Thinkpad ACPI

Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:

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:

./ibm_tp.png 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

  • ThinkLight,

  • Tastatur-Hintergrundbeleuchung,

  • 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-Hintergrundbeleuchzung
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)

Paketliste zum Kopieren:

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 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.

Diese Revision wurde am 2. Februar 2020 22:51 von Heinrich_Schwietering erstellt.
Die folgenden Schlagworte wurden dem Artikel zugewiesen: Notebook, System, Hardware