Du bist hier:Start»Linux»Hardware

Linux und Hardware

16.05.2015

Tux, das Linux-Maskottchen

Noch immer gibt es Hardware-Hersteller, die Linux ignorieren und keine Software (sogenannte Treiber) für Linux bereitstellen. Wenn Hersteller die Software-Schnittstelle zur Hardware ebenfalls nicht offenlegen, bleibt nur der mühsame Weg übers Reverse Engineering. Deshalb ist meine Empfehlung nur Hardware von Herstellern zu kaufen, die die Open-Source-Gemeinschaft unterstützen und Treiber für Linux anbieten. Laut Linus Torvalds, dem "Erfinder" von Linux, funktioniert die Zusammenarbeit des Grafikkartenherstellers Nvidia mit Linux am schlechtesten. Deshalb: Hände weg von Nvidia-Grafikkarten ! Nach meiner persönlichen Erfahrungen engagiert sich Intel im Bezug auf Grafikkarten am besten für die Open-Source-Gemeinschaft. In der englischsprachigen Wikipedia gibt es einen Überblick über Grafikkarten-Treiber für Linux. Wer sich ein Laptop kaufen möchte, das für Linux geeignet ist, findet auf der Seite linlap.com einige Berichte, wie gut die Hardware des Laptops unterstützt wird. Ich hatte mir ein gebrauchtes Acer Travelmate 7740G gekauft. Dadurch spare ich mir zum einen die Windows-Zwangsabgabe und zum anderen wird ältere Hardware durch Linux-Software besser unterstützt. Bei moderner Hardware befinden sich die Software-Treiber von Linux meist noch in der Entwicklung.

Laptop Acer Travelmate 7740G

Bei meinem Acer-Laptop hatte ich Probleme mit dem Grafikkarten-Treiber Radeon. Damals hatte der Radeon-Treiber noch keine Stromspar-Funktionen implementiert und der Lüfter des Laptops lief ständig. Nach Installation der ATI Grafikkarten-Treiber von AMD für Linux war das Laptop dann ruhiger. Außerdem kann durch das "ATI Catalyst Control Center" die Helligkeit und der Kontrast des Bildschirms eingestellt werden.

Lüfter-Steuerung für Acer-Laptops

Der Lüfter eines Laptops wird über den sogenannten Embedded Controller gesteuert. Für Acer-Laptops gibt es unter Windows das Programm Acer Fan Control (acfc). Unter Linux gibt es das Perl-Skript: acer_ec.pl.

# download the perl script for Acer embedded controller:
wget https://www.torsten-traenkner.de/linux/hardware/acer_ec.pl

# become root user
sudo bash

# display the registers
perl acer_ec.pl regs

# filter the relevant registers
perl acer_ec.pl regs | grep ^50

# get the BIOS control byte
perl acer_ec.pl ?= 0x55

# get the fan control byte
perl acer_ec.pl ?= 0x5e

Das Perl-Skript acer_ec.pl kann die Register des Embedded Controllers anzeigen und verändern. Die beiden relevanten Register sind die BIOS-Steuerung bei Register 0x55 hexadezimal beziehungsweise 85 dezimal und die Lüfter-Steuerung bei 0x5E hexadezimal beziehungsweise 94 dezimal. Diese Register scheinen bei den verschiedenen Acer-Laptops an den gleichen Positionen zu sein. Nur die Werte sind je nach Modell unterschiedlich. Einige Werte zur Lüfterkontrolle lassen sich im Acer-Userforum finden. Die Werte für mein Acer Laptop 7740G habe ich durch Versuch und Irrtum herausgefunden. Wenn das Byte zur BIOS-Steuerung bei 0x55 auf den Wert 7 gesetzt wird, dann dreht sich der Lüfter konstant langsam und stört nicht weiter. Allerdings sollte die Temperatur im Auge behalten werden. Bei zu hohen Temperaturen sollte die Lüftersteuerung wieder auf den automatischen BIOS-Betrieb umgestellt werden. Bei den Werten 8 und 9 des BIOS-Control-Bytes dreht sich der Lüfter etwas schneller als beim Wert 7:

# set the BIOS control byte to 7
perl acer_ec.pl := 0x55 0x07

# value 7 lets the fan rotate at a constantly slow speed
# value 8 is a bit faster

# reset the BIOS control byte and
# let the BIOS take over the control
perl acer_ec.pl := 0x55 0

Mit dem dezimalen Wert 31 beziehungsweise 0x1f läßt sich der Lüfter komplett abschalten und mit 0 wieder einschalten. Sollte bei der Lüftersteuerung irgendetwas schief gehen, hilft im Zweifelsfall ein Neustart des Laptops.

# disable the fan with 0x1f == 31
perl acer_ec.pl := 0x55 0x1f

# reset the BIOS control byte and
# let the BIOS take over the control
perl acer_ec.pl := 0x55 0

Der Lüfter läßt sich auch in feineren Abstufungen drehen. Dazu muss das BIOS-Control-Byte auf 14 und das Lüfter-Control-Byte auf Werte von 1 bis 20 gesetzt werden.

# control the steps of the fan with 0xe == 14
perl acer_ec.pl := 0x55 0xe
perl acer_ec.pl := 0x5e 1

# let the BIOS take over the control
perl acer_ec.pl := 0x55 0

Für etwas mehr Komfort habe ich das folgende Shell-Skript geschrieben:

# download the shell script
wget https://www.torsten-traenkner.de/linux/hardware/showRelevantFanRegisters.sh
chmod 755 showRelevantFanRegisters.sh
sudo bash
cp showRelevantFanRegisters.sh /usr/bin/fan

# set the fan to a slow rotation speed
fan 7

# display the settings
fan

# example output
biosControlByte : 7
fanControlByte  : 1
fanRotation     : 494
CPU temperature : 50

# quiet fan on the Acer Travelmate 7740
fan e 2

# fast fan speed on the Acer Travelmate 7740
fan e 7

# reset to BIOS control
fan 3

Außerdem läßt sich über die CPU frequency utilities (cpufrequtils) die Performance der CPU-Kerne auf den Stromspar-Modus einstellen. Bei 4 Kernen sieht das so aus:

# set each CPU core to powersave mode
for index in 0 1 2 3; do cpufreq-set -g powersave -c $index; done

# reset to on demand
for index in 0 1 2 3; do cpufreq-set -g ondemand -c $index; done

Acer Travelmate 7740G Tastatur

Bei der Tastatur des Acer Travelmate 7740G befindet sich das Euro-Zeichen (€) und das Dollar-Zeichen ($) über den Cursortasten. Da ich diese Tasten lieber als "Bild hoch" und "Bild runter" Tasten benutzen möchte, habe ich einige kleine Skripte geschrieben.

# become root
sudo bash

showkey

# now press your keys

# xev might also show some keyboard codes
xev

# on Ubuntu 12.04 the following worked:
setkeycodes b3 175
setkeycodes b4 176

# remap keys to Page Up or Page down
xmodmap -e "keycode 183 = Prior NoSymbol Prior"
xmodmap -e "keycode 184 = Next NoSymbol Next"

# on Linux Mint 17 the following worked for Acer Travelmate 7740G:
sudo bash
wget https://www.torsten-traenkner.de/linux/hardware/listenToKeys.sh -O /usr/bin/listenToKeys.sh
wget https://www.torsten-traenkner.de/linux/hardware/startKey.sh -O /usr/bin/startKey.sh
wget https://www.torsten-traenkner.de/linux/hardware/stopKey.sh -O /usr/bin/stopKey.sh
chmod 755 /usr/bin/listenToKeys.sh /usr/bin/startKey.sh /usr/bin/stopKey.sh

# install necessary software packages
apt-get install expect-dev evtest xautomation

# start the key listener:
sudo /usr/bin/listenToKeys.sh > /dev/null

Die oben beschriebenen Shell-Skripte sollten in ähnlicher Form auch für andere Laptop-Modelle funktionieren. Dabei sind eventuell das Verzeichnis /dev/input/by-path/platform-i8042-serio-0-event-kbd und die konkreten Keycodes zu ersetzen.

Lenovo-Notebook

Für ein Lenovo-Notebook (ehemals IBM) ist die Lüftersteuerung deutlich einfacher, da die Steuerung bereits in den Kernel integriert ist. Der Lüfter läßt sich über das /proc-Dateisystem steuern:

# set the fan rotation speed to a low value:
while true; do echo "level 1" > /proc/acpi/ibm/fan; sleep 1; done

HP Probook 640 G2

Beim Hewlett Packard Probook 640 G2 läßt sich der Embedded Controller ebenfalls mit dem Perl-Skript "acer_ec.pl" steuern. Vermutlich funktioniert das Skript auch mit anderen HP Laptops - zum Beispiel dem EliteBook.

# download the perl script for Acer embedded controller:
wget https://www.torsten-traenkner.de/linux/hardware/acer_ec.pl

# become root user
sudo bash

# display the registers
perl acer_ec.pl regs

# filter the relevant registers
perl acer_ec.pl regs | grep ^20

# set the fan speed to 0x80 (slow fan speed)
perl acer_ec.pl := 0x2f 0x80

Über das Register 0x2f kann die Geschwindigkeit des Lüfters beim Probook gesteuert werden. Der Wert 0x80 läßt den Lüfter langsam und leise drehen. Höhere Werte bedeuten langsamere Lüfterdrehung - kleine Werte (z.B. 0x60) eine schnellere Lüfterdrehung. Natürlich sollte auch hier die CPU-Temperatur nicht aus den Augen gelassen werden. Das Programm "sensors" oder eine Anzeige in der Task-Leiste geben die Temperaturen aus.

Automatischer Laptop-Start

Wer ein Laptop benutzt, um Fernsehen aufzuzeichnen oder automatisch Aktionen ausführen zu lassen, wird sich über eine BIOS-Option freuen, die das Laptop zu einer bestimmten Uhrzeit startet. Dafür gibt es unter Linux die Schnittstelle /sys/class/rtc/rtc0/wakealarm, die als ACPI Wakeup ausführlich beschrieben ist und beim Acer Travelmate 7740G out-of-the-box funktioniert. Dabei wird die Weckzeit ins Non-Volatile RAM (NVRAM) geschrieben. Wenn kein Stromausfall auftritt und der Netzstecker am Laptop angeschlossen ist, dann wird das Laptop zur definierten Zeit gestartet.

# example to set the wake up time in 5 minutes

echo 0 > /sys/class/rtc/rtc0/wakealarm
echo `date '+%s' -d '+ 5 minutes'` > /sys/class/rtc/rtc0/wakealarm
cat /sys/class/rtc/rtc0/wakealarm

# make sure you edit the hardware clock script
# before you shut down the laptop
vi /etc/init/hwclock-save.conf

# you can check the technical details with cat_nvram
apt-get install nvram-wakeup
cat_nvram | hexdump -C

# example output
# ...
00000070  00 00 49 21 13 03 18 13  03 16 05 15 26 22 50 98  |..I!........&"P.|
                   SS    MM    HH                 alarm DD
               seconds minutes hour                     0x80 + day (18)

Viel Spaß beim Experimentieren ! Falls noch etwas unklar sein sollte, dann kannst du die Kommentar-Funktion benutzen.

Kommentar schreiben