ubuntuusers.de

Du betrachtest eine alte Revision dieser Wikiseite.

Thinkpad ACPI

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

Dieser Artikel ist mit keiner aktuell unterstützten Ubuntu-Version getestet! Bitte teste diesen Artikel für eine Ubuntu-Version, welche aktuell unterstützt wird. 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:

./ibm_tp.png ibm-acpi ist ein spezielles Treiber-Paket für IBM/Lenovo ThinkPad-Laptops. Es ermöglicht, auf verschiedene Komponenten dieser Laptops zuzugreifen, welche über ACPI angesteuert, aber vom konventionellen Linux-ACPI-Treiber nicht unterstützt werden. Das Modul ist in Kernel-Versionen ab 2.6.10 bereits enthalten. Diverse Prozesse und Anwendungen (so etwa GNOME-Sensors-Applet, GKrellM oder Pidgin-Thinklight) greifen auf dieses Kernelmodul zurück.

Der vorliegende Artikel beschreibt, wie sich die einzelnen Komponenten manuell ansteuern lassen. Das ist nicht immer ganz ungefährlich, weil damit teils direkt in die Hardware-Register des Laptops geschrieben wird. Die Funktionen sind daher mit entsprechender Sorgfalt auszutesten!

Hinweis:

Thinkpad ACPI funktioniert derzeit nicht mit ThinkPads der Baureihen SL und L, da dort eine abweichende Hardware verbaut ist!

Zugriff

Ob das Kernelmodul automatisch geladen wurde, lässt sich mittels

lsmod | grep pad 

herausfinden. Falls es nicht geladen ist, kann man das durch

sudo modprobe -v thinkpad-acpi 

nachholen. Die Komponenten, die über das Modul angesteuert werden können, finden sich im Verzeichnis /proc/acpi/ibm. Sie werden alle auf dieselbe Weise angesprochen.

Hinweis:

Der Zugriff über /proc/acpi/ibm gilt inzwischen als veraltet. Stattdessen sollte der Zugriff bei neueren Kerneln (Faustregel: 2.6.29 und neuer) über die Ordner /sys/devices/platform/thinkpad_acpi/ und /sys/devices/platform/thinkpad_hwmon/ erfolgen (siehe auch Verzeichnisstruktur (Abschnitt „sys“) und ThinkWiki 🇬🇧). Beispiel:

cat /sys/devices/platform/thinkpad_acpi/bluetooth_enable 

liefert für BlueTooth den Wert 0 (deaktiviert) zurück. Um BlueTooth zu aktivieren:

echo 1 | sudo tee /sys/devices/platform/thinkpad_acpi/bluetooth_enable 

Lesen

Um auszulesen, wie eine Komponente momentan eingestellt ist (status) und welche Optionen zur Verfügung stehen (commands), ist folgender Befehl zu verwenden:

cat /proc/acpi/ibm/KOMPONENTE 

Welche Komponente es gibt, sieht man mit

ls /proc/acpi/ibm/

Dabei kommt z.B. heraus:

beep  bluetooth  cmos  driver  fan  hotkey  led  light  thermal  video  volume

Wird eine Komponente vom aktuellen Gerät nicht unterstützt, so kommt die Rückmeldung

status:     not supported

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 /proc-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 bash -c "echo OPTION > /proc/acpi/ibm/KOMPONENTE" 

oder durch eine Umleitung über tee.

echo OPTION | sudo tee /proc/acpi/ibm/KOMPONENTE 

Es können mehrere Optionen gleichzeitig an eine Komponente übergeben werden, sie sind dann durch Kommas zu trennen. Falsch geschriebene Optionen geben eine Fehlermeldung aus.

Speichern

Sollen gewisse Komponenten bei jedem Systemstart mit einer bestimmten Option automatisch geladen werden, so kann dies in der Datei /etc/modprobe.d/thinkpad_acpi.conf festgelegt werden. Einträge haben die Form KOMPONENTE=OPTION, eine modifizierte Datei könnte folgendermassen aussehen:

options thinkpad_acpi experimental=1 fan_control=1 hotkey=enable,0xffff8f bluetooth=enable

Nicht alle der hier beispielhaft genannten Optionen machen Sinn, sondern sollten nur bei Bedarf aktiviert werden. Eine Übersicht der möglichen Optionen liefert der Befehl:

modinfo thinkpad-acpi 

Die Komponenten

Im folgenden werden alle Komponenten vorgestellt, die über das Modul angesteuert werden können. Ein ganze Reihe von ihnen sind längst mit Multimedia- und Sondertasten ansprechbar (Volumen, Helligkeit, Bluetooth einschalten), so dass ein gewöhnlicher Benutzer nicht auf die hier vorgestellten Befehle zurückgreifen muss. Sie werden hier dennoch vorgestellt, weil zum einen nicht alle ThinkPads über die gleichen Sondertasten verfügen und weil zum anderen damit die Möglichkeit gegeben ist, wie ACPI-Ereignisse mit entsprechenden Scripts ausgelesen, ausgelöst oder gesteuert werden können (genaueres s.u.).

Energieverwaltung

Fn-Hotkeys

In /proc/acpi/ibm/hotkey können die Fn -Sondertasten aktiviert und deaktiviert, bzw. deren aktuelle Einstellung abgelesen werden. Grundsätzlich freigeschaltet und gesperrt werden können diese Tasten mit den Optionen enable und disable:

echo enable
echo disable 

Es lassen sich aber auch nur einzelne Tasten ein- und ausschalten. Dazu bedient sich der Treiber folgender 16-Bit-Maske (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   # Alle möglichen Hotkeys werden aktiviert
echo 0x0000   # Alle möglichen Hotkeys werden deaktiviert
echo 0xff9f   # Alle möglichen Hotkeys außer Fn + F8 werden aktiviert
echo 0x080c   # 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!

Mit der Option reset schließlich lässt sich die ursprüngliche Maske wiederherstellen:

echo reset 

⚓︎

Fn-Hotkeys W510 Bildschirmhelligkeit

Wegen den Nvidia-Grafiktreibern funktioniert die Bildschirmhelligkeit Reglung ü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.

⚓︎

Temperatur-Sensoren

Die meisten ThinkPads verfügen über mindestens sechs Temperatur-Sensoren, übergeben dem normalen ACPI aber nur die CPU-Themperatur (einlesbar unter /proc/acpi/thermal_zone/THM0/temperature). Unter /proc/acpi/ibm/thermal hingegen können bis zu 16 verschiedene Temperatur-Sensoren abgelesen werden. Das ist insbesondere deswegen interessant, weil Lm sensors ThinkPads nicht unterstützen. Hier die Ausgabe bei einem T43 (nicht vorhandene Sensoren werden mit -128 ausgewiesen):

$ cat /proc/acpi/ibm/thermal
temperatures:   00 00 00 00 00 -000 00 -000 00 00 00 -000 -000 -128 -128 -128

Wo genau die Sensoren liegen, variiert von Modell zu Modell; folgende Angaben treffen aber für die meisten neueren 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

Ein 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, was besonders interessant ist, weil der übliche Weg mit Lm sensors bei ThinkPads nicht unterstützt wird.

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:

Manipulationen am Lüfter sind 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 stehen.

Mittels des Pakets

  • thinkfan (universe)

Befehl zum Installieren der Pakete:

sudo apt-get install thinkfan 

Oder mit apturl installieren, Link: apt://thinkfan

kann eine automatisierte Lüftersteuerung verwendet werden. Anleitung zur Einrichtung siehe thinkfan 🇩🇪.

Grundsätzlich lässt sich der Lüfter mit den Befehlen enable und disable ein- und ausschalten.

echo enable
echo disable 

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           # stoppt den Ventilator
echo level 1           # niedrigste Stufe
...
echo level 7           # höchste (gesicherte) Stufe
echo level disengaged  # Lüfter läuft ungebremst (kann zu Hardware-Schäden führen)
echo level auto        # überlässt die Lüfter-Steuerung dem PC 

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 

Einmal gesetzt, bleibt der Wachhund auch für jede weitere Manipulation gesetzt, bis er entweder manuell verändert oder mit 0 ausgeschaltet wird.

Erscheinung

Helligkeit, Lautstärke und ThinkLight lassen sich inzwischen bei den meisten Modellen problemlos über die Tastatur einstellen. Das vorliegende acpi-Modul bietet dennoch gleich zwei Möglichkeiten, wie diese Komponenten eingestellt werden können: über die je eigenen Konfigurationsdateien /brightness, /volume und /light oder über die interne Schnittstelle /cmos:

Bildschirm-Helligkeit

Unter /proc/acpi/ibm/brightness kann die Helligkeit des LCD-Bildschirms eingestellt werden. Dies geschieht entweder, indem als level X direkt eine Helligkeitsstufe zwischen "0" (dunkelste) und "7" (hellste) eingegeben wird,

echo 'level 0'
...
echo 'level 7' 

oder indem mit up und down die Helligkeit eine Stufe höher, bzw. tiefer gestellt wird (entspricht den Tastenkombinationen Fn + Pos1 und Fn + Ende ):

echo up
echo down 

Bei manchen Modellen kann die Helligkeit über /sys/class/backlight/acpi_video0 (oder thinkpad_screen ab Ubuntu 11.04) gesteuert werden. Andere Modelle (getestet für X240) nutzen /sys/class/backlight/intel_backlight/brightness, wobei in der Datei max_brightness der Helligkeitsmaximalwert hinterlegt ist. Hier schaltet

echo 0 

den Bildschirm ab, ohne dass er sich durch Mausbewegung etc. wieder einschaltet – im Gegensatz zu:

xset dpms force off 

Lautstärke-Regler

Um mit /proc/acpi/ibm/volume die Lautstärke regeln zu können muss dem thinkpad-acpi Modul zusätzlich der Parameter volume_control=1 übergeben werden. Dann kann entweder als level X direkt eine Stufe zwischen "0" (stumm) und "15" (Maximum) eingegeben werden,

echo 'level 0'
...
echo 'level 15' 

oder es kann mit up und down die Lautstärke eine Stufe höher, bzw. tiefer gestellt werden. Allerdings entspricht nicht zwingend jede Stufe einer eigenen Lautstärke, so dass nicht jeder Schritt eine hörbare Veränderung hervorrufen muss.

Mit mute schließlich kann die Lautstärke ausgeschaltet werden; dabei ist zu beachten, dass der Stumm-Modus nicht mit einem Level-Befehl, sondern nur mit up oder down wieder verlassen werden kann:

echo up
echo down
echo mute 

Alternativ lässt sich die Lautstärke auch mit dem Befehl amixer -D [device] set Console [0-14,mute,unmute] regeln.

Bildschirmlampe

Unter /proc/acpi/ibm/light lässt sich das ThinkLight ein- und ausschalten sowie sein aktueller Status ablesen. Zum Ein- und Ausschalten dienen die Optionen on' und off (entspricht Fn + Bild ↑ ):

echo on
echo off 

Einstellung via CMOS

Alternativ besteht die Möglichkeit, die eben erwähnten und einige weitere Komponenten über eine interne acpi-Schnittstelle unter /proc/acpi/ibm/cmos anzusprechen. Die Eingabe erfolgt über eine Zahl zwischen 0 und 21

echo 0
...
echo 21 

wobei zu folgenden Zahlen die Effekte bekannt sind (möglicherweise von Modell zu Modell verschieden, bitte ergänzen):

Befehl Ereignis Befehl Ereignis Befehl Ereignis
echo 0 Lautstärke runter echo 3 Drücken von "Access IBM" wird simuliert echo 12 ThinkLight an
echo 1 Lautstärke hoch echo 4 Bildschirm-Helligkeit hoch echo 13 ThinkLight aus
echo 2 Lautstärke aus echo 5 Bildschirm-Helligkeit runter

Hardware-Verwaltung

Bluetooth

In /proc/acpi/ibm/bluetooth kann ein installiertes Bluetooth-Gerät ein- und ausgeschaltet sowie der aktuelle Status ausgelesen werden. Zum Ein- und Ausschalten dienen die Optionen enable und disable (fürs Bluetooth entspricht dies Fn + F5 ):

echo enable
echo disable 

Eine Alternative zum Ein- und Ausschalten ist der Befehl rfkill.

Video-Ausgänge

In /proc/acpi/ibm/video lassen sich der LCD-, der CRT- und, falls vorhanden, der DVI-Video-Ausgang steuern. Jeder lässt sich mit X_enable, bzw. X_disable ein- und ausschalten:

echo lcd_enable    # bzw. lcd_disable
echo crt_enable    # bzw. crt_disable
echo dvi_enable    # bzw. dvi_disable 

Zudem kann mit auto_enable, bzw. auto_disable ein automatisches Wechseln des aktiven Video-Ausgangs - etwa beim Zuklappen des Laptops - ein- und ausgeschaltet werden (eingeschaltet kann die Option manchmal zu einem Flackern führen). Wenn die Option ausgeschaltet ist, kann mit video_switch der Video-Ausgang manuell umgeschaltet werden (entspricht Fn + F7 ):

auto_enable        # bzw. auto_disable
video_switch 

Damit besteht etwa die Möglichkeit, einen Beamer zu benutzen, auch wenn dieser beim Hochfahren noch nicht an den PC angeschlossen war.

Ultra-Bay

Hinweis:

Der folgende Abschnitt funktioniert nicht mehr unter Ubuntu 10.04.

Unter /proc/acpi/ibm/bay lässt sich der Status der Ultra-Bay 🇬🇧 ablesen; für ThinkPad-Modelle, die über keinen Schalter verfügen, um die Ultra-Bay bei laufendem PC auszuwerfen, besteht zudem die Möglichkeit, mit der Option eject die notwendigen ACPI-Ereignisse für ein sicheres Entfernen zu veranlassen:

echo eject 

Sobald die Kontrollleuchte an der Ultra-Bay erlischt, kann sie sicher entfernt werden.

Docking-Station

Hinweis:

Der folgende Abschnitt funktioniert nicht mehr unter Ubuntu 10.04.

Der Zustand einer Docking-Station kann unter /proc/acpi/ibm/dock ausgelesen werden. Damitt ist es möglich, die ACPI-Ereignisse eines An- und Abdockens hervorzurufen:

echo undock
echo dock 

Letzteres ist etwa dann sinnvoll, wenn der PC nicht innerhalb der Docking-Station gestartet wurde und sie nun nicht automatisch erkennt. Der undock-Befehl löst nur die Dock-spezifischen ACPI-Ereignisse aus, weitere an der Dock angeschlossene Hardware muss separat ausgeworfen werden.

Hilfs-Signale

Kontrollleuchten

In /proc/acpi/ibm/led lassen sich die Kontrollleuchten ansprechen. Zur Verfügung stehen die Optionen on, off und blink:

echo X on
echo X off
echo X blink 

"X" ist dabei ein Zahl zwischen "0" und "7", wobei die Zahlen bei den meisten Modellen für folgende Leuchten stehen:

Nr. Warnleuchte Nr. Warnleuchte Nr. Warnleuchte Nr. Warnleuchte
1 Batterie (orange) 3 UltraBase 5 Modell-spezifisch 7 Standby
2 Batterie (grün) 4 UltraBay 6 Modell-spezifisch 8 Power

Für Sonderfälle bietet diese Tabelle 🇬🇧 den besten Überblick.

Warntöne

Unter /proc/acpi/ibm/beep können eine Reihe von Warntönen ausgelöst werden, indem der Komponente eine Zahl zwischen "0" und "17" übergeben wird:

echo X 

Die Zahlen stehen für folgende Warntöne:

Nr. Signal Nr. Signal Nr. Signal Nr. Signal
0 stoppt einen Ton (außer 16) 5 ein einzelner Beep 10 ein langer Beep
1 k.A. 6 ein sehr hoher und ein normaler Beep 11 k.A. 15 drei konstant wiederholte, hohe Beeps (mit Null stoppen)
2 2 kurze Beeps, Pause, ein langer Beep 7 ein hoher Beep 12 ein tiefer Beep 16 ein normaler Beep, konstant wiederholt (mit 17 stoppen)
3 ein einzelner Beep 8 k.A. 13 k.A. 17 Zum Stoppen von 16
4 ein hoher und ein tiefer Beep 9 drei kurze Beeps 14 k.A.

Für die Entwicklung: Treiber und Kennzahlen

Der Treiber

Unter /proc/acpi/ibm/driver erfährt man, welche Treiberversion aktuell installiert ist. In diese Datei lässt sich entsprechend nicht schreiben.

ecdump

Hinweis:

Der folgende Abschnitt funktioniert nicht mehr unter Ubuntu 10.04.

In /proc/acpi/ibm/ecdump lassen sich schließlich die Werte von 256 internen Kontroll-Registern lesen. Werte, die sich seit dem letzten Ablesen verändert haben, sind mit einem Stern markiert. Damit ist es möglich, durch spezifisches Verändern von Hardware-Begebenheiten auf die zugehörigen Kontroll-Register zu schließen. Genaueres dazu ist der Entwickler-Dokumentation 🇬🇧 von ibm-acpi zu entnehmen.

⚓︎

Steuerung via Scripts

Für einige der Komponenten kann es interessant sein, sie über Scripte zu steuern. Entweder werden die Befehle, genau so wie sie hier vorgestellt worden sind, mitsamt Optionen in ein Script eingebaut (s.u. Bsp. 2), oder es wird, wo die Optionen jedesmal gewählt werden sollen - und um die Eingabe der Optionen zu vereinfachen, ein spezifisches kleines Script geschrieben. Dazu empfiehlt es sich, zuerst mit echo kurz auf die zur Vefügung stehenden Optionen zu verweisen, sie sodann mit read als Argument vom Benutzer abzufragen und schließlich wie gewohnt an eine Komponente zu übergeben.

Beispiel 1

Zur manuellen Regulierung des Lüfters kann etwa folgendes Script verwendet werden:

#! /bin/sh
echo "Bitte Lüfter-Stufe (0-7 oder 'auto') eingeben:"
read A
echo "level $A" | sudo tee /proc/acpi/ibm/fan

⚓︎

Beispiel 2

Folgendes Script schaltet die Bluetooth-Antenne ein, startet eine Synchronisation via OpenSync und schaltet die Bluetooth-Antenne wieder aus:

#! /bin/sh
echo enable | sudo tee /proc/acpi/ibm/bluetooth
msynctool --sync nokia
echo disable | sudo tee /proc/acpi/ibm/bluetooth

Diese Revision wurde am 7. Mai 2017 11:46 von Heinrich_Schwietering erstellt.
Die folgenden Schlagworte wurden dem Artikel zugewiesen: Hardware, System, Notebook