[[Vorlage(Getestet, focal, bionic, )]] [[Vorlage(Fortgeschritten)]] {{{#!vorlage Wissen [:Terminal: Ein Terminal öffnen] [:Editor/#Bearbeiten-von-Systemdateien: Bearbeiten von Systemdateien] }}} [[Inhaltsverzeichnis()]] [[Bild(./ibm_tp.png, 64, align=left)]] [https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/drivers/platform/x86/thinkpad_acpi.c?id=HEAD thinkpad_acpi] ist ein Kerneltreiber speziell für IBM/Lenovo ThinkPad-Laptops. Er ermöglicht, verschiedene Komponenten dieser Laptops zu kontrollieren, welche über [wikipedia: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 [sourceforge:sensors-applet: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 [wikipedia_en:Hardware_register:Hardware-Register] des ThinkPads geschrieben wird. Die Funktionen sind daher mit entsprechender Sorgfalt zu handhaben! {{{#!vorlage 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: {{{#!vorlage Befehl lsmod | grep thinkpad }}} Falls es nicht automatisch geladen wurde, kann man das durch {{{#!vorlage Befehl 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. {{{#!vorlage 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: {{{#!vorlage Befehl cat /sys/devices/platform/thinkpad_acpi/KOMPONENTE }}} Welche Komponenten es gibt, sieht man mit {{{#!vorlage Befehl 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 [:sudo:Root-Rechten] verändert werden dürfen, ist eine verschachtelte Umleitung notwendig. Also entweder durch das Kapseln des Befehls in eine eigene Shell: {{{#!vorlage Befehl sudo sh -c "echo OPTION > /sys/devices/platform/thinkpad_acpi/KOMPONENTE" }}} oder durch eine Umleitung über [:Shell/Umleitungen:tee]. {{{#!vorlage Befehl 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: {{{#!vorlage 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. {{{#!vorlage Hinweis Voraussetzung ist ein ThinkPad der Generation T420/X220 oder neuer; ältere Modelle bedient [:TP-SMAPI#Akkufunktionen:]. Eine komfortable, modellunabhängige Steuerung von Ladeschwellen und Rekalibration bietet das Stromspartool [https://linrunner.de/tlp TLP]. }}} Dabei ist modellabhängig * '''BAT0''' der interne bzw. Hauptakku, * '''BAT1''' der Ultrabay-, Slice- bzw. Wechselakku. Folgende Dateien sind relevant: {{{#!vorlage Tabelle 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: {{{#!vorlage Befehl 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 * [wikipedia_en:ThinkLight:], * Tastatur-Hintergrundbeleuchtung, * Tasten-LEDs; sowie * Kontrolleuchten ein- und ausschalten bzw. in der Helligkeit anpassen, sowie der aktuelle Zustand auslesen. {{{#!vorlage Tabelle 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 }}} {{{#!vorlage 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: {{{#!vorlage Befehl echo 255 | sudo tee brightness # an echo 0 | sudo tee brightness # aus }}} Den maximalen Wert für brightness liefert {{{#!vorlage Befehl 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. [[Anker(temp)]] == 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 {{{#!vorlage Befehl 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 [https://thinkwiki.org/wiki/Thermal_Sensors thinkwiki.org] {en} . 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: {{{#!vorlage Befehl watch -n X cat /proc/acpi/ibm/thermal }}} [[Anker(fan)]] == Lüfter == Unter '''/proc/acpi/ibm/fan''' lässt sich der Lüfter manuell steuern. {{{#!vorlage Warnung 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 [#temp Temperatur-Sensoren] verändert werden! }}} {{{#!vorlage 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 Speichern]) stehen. }}} Grundsätzlich lässt sich der Lüfter mit den Befehlen ``enable`` und ``disable`` ein- und ausschalten. {{{#!vorlage Befehl 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): {{{#!vorlage Befehl 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: {{{#!vorlage Befehl 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 {{{#!vorlage Paketinstallation thinkfan, universe }}} kann eine individuell anpassbare, automatische Lüftersteuerung eingerichtet werden. Anleitung zur Einrichtung siehe [http://thinkwiki.de/Thinkfan thinkfan] {de}. == Bluetooth, WWAN == {{{#!vorlage 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: {{{#!vorlage Befehl 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 [[Vorlage(Tasten, Fn)]]-Sondertasten durch den Kerneltreiber aktiviert und deaktiviert, bzw. die aktuelle Einstellung abgelesen werden. Es werden allerdings nicht alle [[Vorlage(Tasten, Fn)]]-Sondertasten durch thinkpad_acpi behandelt. {{{#!vorlage Hinweis Für nahezu alle – insbesondere neuere – Thinkpad-Modelle und unterstützte Ubuntu-Versionen arbeiten die [[Vorlage(Tasten, 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 [https://www.thinkwiki.org/wiki/How_to_get_special_keys_to_work#Overview Artikel] {en} im ThinkWiki): ||'''Hotkey''' ||'''Bit-Maske''' || '''ACPI-Ereignis''' ||'''Hotkey''' ||'''Bit-Maske''' || '''ACPI-Ereignis''' ||'''Hotkey''' ||'''Bit-Maske''' || '''ACPI-Ereignis''' || || [[Vorlage(Tasten, fn+F1)]] ||~+(``0001``)+~ || ''Bildschirm sperren'' || [[Vorlage(Tasten, fn+F5)]] ||~+(``0010``)+~ || Bluetooth an / aus || [[Vorlage(Tasten, fn+F9)]] ||~+(``0100``)+~ || abdocken || || [[Vorlage(Tasten, fn+F2)]] ||~+(``0002``)+~ || Bildschirm abdunkeln || [[Vorlage(Tasten, fn+F6)]] ||~+(``0020``)+~ || ''unbekannt'' || [[Vorlage(Tasten, fn+F10)]] ||~+(``0200``)+~ || ''unbekannt'' || || [[Vorlage(Tasten, fn+F3)]] ||~+(``0004``)+~ || Bildschirm aus || [[Vorlage(Tasten, fn+F7)]] ||~+(``0040``)+~ || Monitor wechseln || [[Vorlage(Tasten, fn+F11)]] ||~+(``0400``)+~ || ''unbekannt'' || || [[Vorlage(Tasten, fn+F4)]] ||~+(``0008``)+~ || Standby || [[Vorlage(Tasten, fn+F8)]] ||~+(``0080``)+~ || ''unbekannt'' || [[Vorlage(Tasten, 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: {{{#!vorlage Befehl 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 }}} {{{#!vorlage Hinweis Diese Bit-Masken entsprechen __nicht__ den [https://www.thinkwiki.org/wiki/How_to_get_special_keys_to_work#ibm-acpi_events Codes der ACPI-Ereignisse] {en} , welche durch die Tasten ausgelöst werden! }}} Den ursprünglichen Zustand kann man jederzeit mit {{{#!vorlage Befehl 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 [https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/Documentation/laptops/thinkpad-acpi.txt#n262 Kernel-Dokumentation] {en}. == 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 [https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/Documentation/laptops/thinkpad-acpi.txt#n74 Kernel-Dokumentation] {en} 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 [bug:357673:] {en}). 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 }}} [[Anker(W510 Bildschirmhelligkeit)]] === 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: {{{#!code text Option "RegistryDwords" "EnableBrightnessControl=1" }}} Danach den Benutzer ab- und wieder anmelden und das Regeln der Bildschirmhelligkeit funktioniert wieder. = Links = * [https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/drivers/platform/x86/thinkpad_acpi.c Quellcode im Linux-Kernel] {en} * [https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/Documentation/laptops/thinkpad-acpi.txt Kernel-Dokumentation] {en} – in Teilen veraltet * [https://www.thinkwiki.org/ ThinkWiki] {en} – umfangreiche Informationsquelle zu allen Thinkpad-Modellen * [https://www.thinkwiki.org/wiki/Thinkpad-acpi Thinkpad-acpi] {en} im ThinkWiki * [https://www.thinkwiki.de/ ThinkPad-Wiki] {de} – nicht ganz so umfangreiche, aber deutschsprachige Informationen * [https://thinkwiki.de/Ubuntu_Schnelleinstieg Ubuntu Schnelleinstieg] {de} – Ubuntu auf Thinkpads installieren * [https://thinkwiki.de/Ubuntu_ThinkPad_Extras_PPA ThinkPad Extras PPA] {de} – Tools für Thinkpads * [https://www.thinkpad-forum.de/ ThinkPad-Forum] {de} – weitere Informationsquelle * [https://thinkwiki.de/Thinkfan thinkfan] {de} – einfache Lüftersteuerung (in den offiziellen Paketquellen enthalten) * [:Trackpoint:] einrichten * [:TP-SMAPI:Akkuladeschwellen per SMAPI] einstellen und mehr * [https://linrunner.de/tlp TLP] {de} - Stromspartool, das zusätzlich eine komfortable, modellunabhängige Steuerung für Ladeschwellen und Rekalibration implementiert # tag: Hardware, System, Notebook