Kategorie: Linux

Energie sparen unter Linux (anhand eines X61 Tablet unter Ubuntu 8.10) – Teil 1

Ein weiteres wichtiges Thema bei Laptops oder TabletPCs ist die Leistungsaufnahme, da hier eine Batterie die Energie liefert und diese nur eine begrenzte Kapazität hat, wird früher oder später der Computer seine Dienste einstellen und warten bis man ihn wieder mit der Steckdose in Verbindung bringt.

Der erste Schritt ist herauszufinden, wieviel Leistung der Computer überhaupt braucht, und wodurch diese benötigt wird. Ein Werkzeug welches genau für diesen Zweck geschrieben wurde ist Powertop, es stellt dar wielange der Prozessor in welchem Zustand verbracht hat, dabei wird zwischen C und P States unterschieden. C-States sind Klassen wie „wach“ ein Prozessor ist, C0 – C4 sind derzeit von aktuellen Prozessoren unterstützt. wobei C0 für „wach“ steht und C4 eine Art Tiefschlaf darstellt. Die P-States sind die Taktstufen in denen der Prozessor takten kann. Außerdem wird die aktuelle Leistungsaufnahme angezeigt, mein unoptimiertes System bezieht bei voller Helligkeit etwa 17-22 Watt während ich den Artikel schreibe.

Nun habe ich derzeit GKrell aktiviert welches mir ein paar Informationen zu meinem System ausgibt, es aktualisiert sich recht häufig, ebenso ein kleines Applet welches mir Prozessor und Netzwerkauslastung ausgibt. Beenden dieser beiden nicht wirklich nützlichen Programme bringt immerhin fast 0,2-0,3 Watt Einsparung mit sich.

Powertop schlägt nun einige Maßnahmen selbst vor:

  • USB autosuspend einschalten
  • Writebacktime erhöhen
  • SATA ALPM aktivieren
  • Nicht genutzte Bluetoothschnittstelle abschalten
  • Laptop Modus einschalten

Es gibt auch eine Wikiseite welche sich sehr ausgiebig mit dem Thema befasst, sowie die Intel-Seite lesswatts.org. Das Powertop Werkzeug stammt auch von Intel.

Ein Bug in Powertop meint jedoch dass USB Autosuspend nicht standardmäßig aktiv ist, mit Ubuntu 8.10 wurde dies jedoch eingeführt, also kann der Punkt schonmal aus der Liste gestrichen werden.

Laptop-Mode-tools ist ein eigenständiges mächtiges Werkzeug welches Unterstützung bieten um eine lange Batterielaufzeit zu erhalten. Dabei wird auf den von Powertop angesprochenen Laptop_Mode zurückgegriffen, es sind also hauptsächlich Werkzeuge die automatisch den Laptopmode ein und ausschalten sowie die gewünschten Parameter einstellt.

Man muss das ganze nur dem Acpi-Dämon mitteilen, man kann prüfen ob laptopmode bereits aktiv ist indem man in der Konsole folgendes eintippt:

1
cat /proc/sys/vm/laptop_mode

Erhält man einen Wert von 0 so ist der Laptopmode deaktiviert.

Um den Laptopmode zu aktivieren müssen wir Datei /etc/default/acpi-support editieren und dabei:

1
ENABLE_LAPTOP_MODE = true

In die entsprechende Zeile schreiben.

Nun sollte man noch die Einstellungen von laptop_mode-tools entsprechend den eigenen Bedürfnissen anpassen.
Dazu editiert man die Datei /etc/laptop_mode/laptop_mode.conf:

1
nano /etc/laptop_mode/laptop_mode.conf

Die wichtigste Einstellung hier ist vielleicht:
LM_BATT_MAX_LOST_WORK_SECONDS=600

Je nach dem wie sicher das System ist kann man diesen Wert vergrößern und so die Festplatte länger schlafen lassen.

Das Problem ist jedoch, dass manche Funktionen erzwingen, dass der Schreibcache auf die Festplatte gebracht wird, dies fürht dann zu häufigerem aufwachen der Festplatte was sich negativ auf die sogenannten Load Cycle Counts auswirkt. Daher muss man schon darauf achten inwiefern diese Optionen sinnvoll sind. Um Schreibzugriffe auf die Festplatte zu verhindern gibt es auch Dämon der die Logs in eine Ramdisk umlenkt, was dazu führt dass bei einem Systemabsturz alle Logeinträge verloren gehen, aber auch die Schreibzugriffe auf die Festplatte verhindert. Das ganze nennt sich Ramlog
Von der Seite lädt man einfach das Paket herunter installiert es und freut sich.

Mit dieser Aktivierung reduziert sich der Energiebedarf bereits auf etwa 15 Watt.

Zusätzlich kann man den Prozessor auch manuell dazu bringen nur mit der niedrigsten Taktfrequenz zu arbeiten, inwiefern dass sinnvoll ist ist ebenfalls nicht genauer geklärt, da es Theorien gibt welche besagen dass ein Prozessor schneller wieder schläft wenn er kurz mit voller Geschwindigkeit gearbeitet hat. Ob jedoch das kurzzeitige schnelle arbeiten oder längerandauernde langsame arbeiten mehr Energie benötigt ist eine Frage die sich ähnlich der ob man besser durch Regen geht oder rennt (um weniger nass zu werden) so einfach nicht lösen lässt.

Weiteres Enegiesparpotenzial bietet der Lüfter, ebenfalls etwas kritisch zu betrachten, da hier quasi die Hardwaretemperatursteuerung umgangen wird, dies kann zu Überhitzung und somit Verringerung der Lebensdauer der Komponenten führen. Für mich ist derzeit auch unklar welcher Sensor welche Temperatur darstellt, deswegen ist eine Risikobewertung auch recht schwierig.
Für die Temperaturregelung empfiehlt sich das Paket ThinkPad Fan Control.
Die Installation ist denkbar einfach. In Synaptic fügt man die Paketquelle hinzu:

1
deb http://ppa.launchpad.net/surban/ubuntu intrepid main

Danach aktualisiert man die Paketinformationen und kann die Anwendung tpfan-admin installiert werden, diese richtet sich unter System->Systemverwaltung ein.
Dort kann man nun mit den Grenzwerten experimentieren, ich gebe keine Anhaltswerte weil ich selbst nicht weiß welche Temperatur was bedeutet. Damit kann man das Laptop auch sehr leise betreiben, was schon angenehm sein kann.

Der nächste Punkt ist das sogenannte SATA Aggressive Link Power Management (ALPM) da bei mir keine ATAPI Laufwerke vorhanden sind spielt Asynchronous Notification (AN) keine Rolle für mich.
Das geschätzte Einsparpotenzial von ALPM ist mit 0,5-1,5 Watt recht hoch.
Wichtig dabei ist, dass der SATA Controller im AHCI Modus und nicht im Compatibility Modus betrieben wird. Durch:

1
echo min_power > /sys/class/scsi_host/host0/link_power_management_policy

Aktivieren wir den Stromsparmodus. Die Option min_power sorgt bei manchen wohl für ein sehr langsames Suspend to Ram. Hier wird stattdessen ein medium_power empfohlen. Einfach testen, da ich eh so gut wie nie Suspend to Ram einsetze werde ich wohl min_power belassen.
Dieser Schritt reduzierte die Leistungsaufnahme laut Powertop um 0,5-0,7 Watt, erstaunlich für eine einzige Zeile oder? Damit bin ich bei 14,3 Watt bei eingeschaltetem WLAN und voller Bildschirmhelligkeit.

Die Idee die nichtgenutzte Bluetoothschnittstelle zu deaktivieren löst leichte Schwierigkeiten aus, das Modul welches Powertop vorschlägt (hci_usb) wird nicht verwendet. Stattdessen habe ich ein Modul namens btusb entdeckt, Bluetooth-USB? Klingt schonmal vielversprechend, tatsächlich handelt es sich wohl um den Nachfolger von hci_usb, welcher derzeit (kernel 2.6.17-11) noch kein autosuspend unterstützt, dies ist für die Kernel Version 2.6.28 geplant, dieser ist bereits vefügbar aber nicht in den Ubuntu Quellen verfügbar, ob autosuspend nun funktioniert oder nicht ist mir nicht klar hervorgegangen.
Um nun die Bluetoothschnittstelle zu deaktivieren müssen wir als erstes die Schnittstelle deaktivieren und dann das Modul aus dem Kernel entfernen (nicht löschen, wir wollen ja eventuell mal wieder Bluetooth haben oder?)
Ähnlich zu Netzwerkschnittstellen gibt es hciconfig welches ohne Parameter aufgerufen eine Liste der aktiven Bluetoothschnittstellen ausgibt. Mit:

1
hciconfig hci0 down

können wir die Schnittstelle deaktivieren. Dieser Schritt alleine bringt noch keine wirklich messbare Verminderung, eventuell 0,1 Watt, aber das ist ein Wert der durchaus auch innerhalb der Schwankungen liegen kann. Mit:

1
2
/etc/init.d/bluetooth stop
modprobe -r btusb

Sollte sich jetzt das Modul entfernen lassen, der Effekt: auch nicht mehr als durch die Deaktivierung, tendenziell also wohl nur eine Einsparung von 0,1 Watt.

Als nächstes kommen die Netzwerkkarten dran. Dazu installieren wir das ethtool. Mit ihm können wir Einstellungen an der Netzwerkhardware vornehmen, wie beispielsweise Wake on Lan ausschalten oder die Geschwindigkeit drosseln.
Ein Aufruf von:

1
ethtool eth0

Lieferte mir folgende Ausgabe:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Settings for eth0:
    Supported ports: [ TP ]
    Supported link modes:   10baseT/Half 10baseT/Full
                            100baseT/Half 100baseT/Full
                            1000baseT/Full
    Supports auto-negotiation: Yes
    Advertised link modes:  10baseT/Half 10baseT/Full
                            100baseT/Half 100baseT/Full
                            1000baseT/Full
    Advertised auto-negotiation: Yes
    Speed: Unknown! (65535)
    Duplex: Unknown! (255)
    Port: Twisted Pair
    PHYAD: 1
    Transceiver: internal
    Auto-negotiation: on
    <strong>Supports Wake-on: pumbag
    Wake-on: g</strong>
    Current message level: 0x00000001 (1)
    Link detected: no

Hier wird deutlich, die Karte unterstützt Wake on Lan und hat es vermutlich auch aktiviert. Dadurch verbringt die Karte ihre Zeit in einer Art halbschlaf (auch wenn der Computer läuft). Deaktivieren bringt vermutlich ebenfalls nicht viel aber jedes Bisschen hilft:

1
ethtool -s eth0 wol d

Und Powertop zeigt uns: irgendwie hat sich nichts getan.
Auf zum Drahtlosnetzwerk, WLAN. Ein relativ bekannter Stromfresser. Ganz abschalten bringt natürlich viel, aber oft möchte man ja doch im Internet surfen oder ähnliches, daher ist es viel interessanter ob man den Stromhunger auch im Betrieb drosseln kann. Es geht, allerdings hat eine Methode auch Nachteile:

The downsides to this power saving technique:

  • network latencies increase, due to the „save up and check once in a while“ behavior. This is generally not noticable when you’re browsing the web and such. In situations where lower network latency is important (for example online gaming, voice and media streaming, etc.), we don’t recommend enabling PS-Poll.
  • a second potential problem is that not all access points (APs) support this technology. While most newer access points support this technique, some older APs may not support it very well. The effect of having an AP that doesn’t support the technique is that network connectivity may be lost. If, after enabling PS-Poll you find you are losing network access, check and see if your AP has newer firmware available from the manufacturer.

Zumindest mit dem ersten Punkt kann ich leben, ob mein Router das unterstützt werde ich gleich herausfinden.
Also schauen wir mal, es gibt ein Werkzeug namens iwconfig, komisch oder? Es ist wie das ethtool nur für Intel WLAN Adapter.
iwconfig gab folgendes aus:

1
2
3
4
5
6
7
8
9
wlan0     IEEE 802.11abgn  ESSID:""  
          Mode:Managed  Frequency:2.427 GHz  Access Point: MAC
          Bit Rate=54 Mb/s   Tx-Power=14 dBm  
          Retry min limit:7   RTS thr:off   Fragment thr=2352 B  
          Encryption key:blubber   Security mode:fu
          <strong>Power Management:off</strong>
          Link Quality=100/100  Signal level:-40 dBm  Noise level=-95 dBm
          Rx invalid nwid:0  Rx invalid crypt:0  Rx invalid frag:0
          Tx excessive retries:0  Invalid misc:0   Missed beacon:0
1
iwconfig wlan0 power 3

Sollte uns den Stromsparmodus einschalten, mal sehen was wir erreichen: ebenfalls bestenfalls 0,1 Watt eher nichts.
Aaber: eine andere Methode hat einen deutlichen Effekt:

1
echo 5 > /sys/bus/pci/drivers/iwlagn/*/power_level

Damit reduzierte sich die Leistungsaufnahme um ein beachtliches Watt (also 1 Watt),ohne dass sich die Verbindung merklich verlangsamt hätte.
Nun lässt sich das ganze eigentlich auf alle über PCI angeschlossenen Geräte übertragen. Also aufgehts:

1
for i in /sys/bus/pci/devices/*/power_level ; do echo 5 > $i ; done

Bringt nicht mehr so viel, der Übeltäter Wlan ist erschlagen. Ganz abschalten (netter Schalter am Gehäuse) bringt weitere 0,2-0,3 Watt. Also dringen abschalten wenn mans grade nicht braucht.

—-
Teil 1 endet hier, weil der Artikel sonst zu lang wird (!)


Tabletstifttasten anders belegen unter Linux

Wie es sich herausstellte war die Tastenbelegung des Stiftes unter Linux anders als die unter Windows, da dies deutlich störend für mich ist, habe ich mich auf die suche gemacht, wie man die Tastenbelegung ändern kann.

Dabei muss man wie so oft Hand an die Kofigurationsdateien legen, diesmal ist es wieder die xorg.conf. Diese eidtieren wir nun als root oder über sudo:

1
sudo nano /etc/X11/xorg.conf

Dort suchen wir nach den Einträgen die wir eh schon für unsere Stifteingabe angelegt haben und fügen die fett markierten Zeilen hinzu:

1
2
3
4
5
6
7
8
9
10
11
12
13
Section "InputDevice"
  Driver "wacom"
  Identifier "stylus"
  [...]
  <strong>Option "Button2" "3"</strong>
EndSection

Section "InputDevice"
  Driver "wacom"
  Identifier "eraser"
  [...]
  <strong>Option "Button1" "2"</strong>
EndSection

Damit verhält sich der Stift dann wie unter Windows. Möchte man noch den Rechtklick über langes gedrückthalten der ersten Maustaste (halten des Stiftes) simulieren so geht dies in den Mauseinstellungen von Gnome unter dem Reiter Barrierefreiheit.


Opera in die Paketquellen von Ubuntu aufnehmen

Da ich ein Fan der Synaptic beziehungsweise apt Werkzeuge bin, versuche ich stets, Software die ich verwende in die Paketquellen mit aufzunehmen damit ich mich nicht mehr selbstständig um die Aktualisierung kümmern muss.

Von Opera gibt es bereits die Paketquellen, also muss man diese nur in Synaptic hinzufügen:

1
2
Synaptic -> Einstellungen -> Paketquellen -> Software von Drittanbietern -> Hinzufügen
deb http://deb.opera.com/opera etch non-free

Dann einfach noch den Authentifizierungsschlüssel über die Konsole mit:

1
wget -O - http://deb.opera.com/archive.key | sudo apt-key add -

Importieren. Man muss dazu das Benzuterpasswort eingeben, die Aufforderung geht ein wenig in wget unter.

Nun in Synaptic einfach auf „Neu laden“ klicken und schon sollte sich Opera in den auswählbaren Paketen befinden.

Diese Anleitung entstand auf Basis von:
Sven’s Wiki – Opera


Xubuntu vom USB-Stick installieren über Unetbootin

Unetbootin ist ein Programm welches die Erstellung von bootbaren USB Medien automatisieren soll. Unetbootin ist von der Homepage des Projekts erhältlich. Da es kein vorgefertigtes Paket für Fedora gibt habe ich kurzentschlossen die Binary heruntergeladen.

Ein chmod +x unetbootin-linux-304 später kann ich die Datei ausführen, zwei Warnmeldungen machen mir klar, dass ich noch die sogenannten mtools und p7zip installieren muss, welche sich glücklicherweise in den vorgefertigten Paketen befinden.

Das Programm sollte erst gestartet werden, wenn der USB Stick tatsächlich angeschlossen ist, sonst kann man ihn nicht mehr auswählen. Dann kann man entweder die gewünschte Distribution auswählen oder ein ISO-Image angeben. Ich hatte bereits das Image und habe es einfach ausgewählt und auf los geklickt und eine Minute später war der Vorgang bereits abgeschlossen.

Im Nachhinein stellte sich dann allerdings heraus, dass der USB Stick ein paar Sonderzeichen im Namen hatte mit denen Unetbootin nicht klar kam, daher musste ich den USB-Stick manuell an einen Ort mounten der keine Sonderzeichen oder Leerzeichen enthielt, daraufhin dauerte der Erstellungsprozess auch deutlich länger.

Danach kann man dann einfach die Live-CD-Umgebung vom USB-Stick booten und auch normal davon installieren.

Ich vermisse eine Möglichkeit ein verschlüsseltes System einzurichten, eventuell müsste ich dort auf das sogenannte „alternate install“ Abbild zurückgreifen.


Tablet-PC Funktionalität unter Fedora 10 aktivieren für Lenovo X61t (Teil 2 – Sondertasten + Rotation)

Für Ubuntu gibt es hier eine neue Anleitung:Rotation unter Ubuntu

So im zweiten Teil kümmern wir uns um die Zusatztasten des Tablets. Dazu untersuchen wir zunächst die relevanten Keycodes. Dazu gibt es zwei Werkzeuge, eins für die Konsole und eins für den XServer.
Für die Konsole showkey und für den XSever xev
Auf meinem Tablet ließen sich so folgende Keycodes herausfinden:

1
2
3
4
5
6
7
8
9
10
Taste       Showkey         xev
Rotate      191         199
Werkzeugkasten  152         (160)
Escape      1           9
Oben        103         111
Rechts      106         114
Unten       108         116
Links       105         113
Enter       28          36
Reset       Unknown-&gt;code 0x67   no_event

Bei mir waren die xev-Codes alle um 8 größer als die von showkey. Dies ist aber wohl nicht immer der Fall.
Escape und Enter haben natürlich schon die Standardfunktionen, ebenso sind die Oben, Rechts, Unten und Links-Tasten bereits richtig belegt. Der Werkzeugkasten sperrt bei mir den Bildschirm, nur der Rotierknopf ist mit keiner Funktion belegt.
Diesem wollen wir nun Leben einhauchen.
Dazu müssen wir die Tastenbelegung des XServers editieren.

1
2
3
4
cp /etc/X11/Xmodmap    /etc/X11/Xmodmap.ORIGINAL
echo "! Custom Xmodmap for X61 Tablet PC" &gt; /etc/X11/Xmodmap
xmodmap -pke &gt;&gt; /etc/X11/Xmodmap
nano /etc/X11/Xmodmap

Dort suchen wir nun nach dem oben gefundenen Keycode und schreiben hinter das Istgleich XF86User1KB.
Damit führt der Xserver dann beim Drücken der Taste die Aktion XF86User1KB aus. Jetzt müssen wir also nur noch eine Rotationsfunktion einbinden die wir dann mit der Aktion verknüpfen und dann funktioniert das ganze schon hoffentlich. Da ich nicht der erste bin der ein Tablet gekauft hat, gibt es bereits ein Python Script welches die Rotation sehr gut erledigt. (Lukes Homepage) Es ist zwar für ein X60 Tablet geschrieben aber man wird es schon so umbiegen können, dass es auch auf einem X61 Tablet läuft.
Mit folgenden Anweisungen sollte das Script installiert sein:

1
2
3
4
5
6
7
8
mkdir -p /usr/local/src/X61_XF86
pushd /usr/local/src/X61_XF86
wget http://luke.no-ip.org/x60tablet/examples/rotate
chmod ugo+x rotate
pushd /usr/local/bin
ln -s /usr/local/src/X61_XF86/rotate
popd
popd

Als nächstes müssen wir noch Berechtigungen setzen, so ist es erforderlich sudo zu verwenden wenn man den Bildschirm rotiert oder die globale Tastaturbelegung ändern möchte.
Dazu müssen wir einmal eine Gruppe der Tabletbenutzer anlegen. Gruppen werden in der Datei /etc/group eingerichtet.

1
nano /etc/group

Wir fügen in eine zusätzliche Zeile einfach folgendes ein:

1
tabletgroup:x:501:root,<strong>Tabletnutzernamen</strong>

Wobei die Nutzernamen jeweils durch Komma getrennt einzutragen sind, bei mir wäre es zum Beispiel tabletgroup:x:501:root,arsenal.
Jetzt müssen wir der Gruppe noch die Rechte zuweisen die sie haben soll: sudo benutzen für Rotation und Tastenbelegungändern. Dabei wollen wir natürlich nicht jedemal unser Passwort eingeben um dieses Ziel zu erreichen. Die Berechtigungen für sudu sind in der Datei /etc/sudoers zu finden. Also bedienen wir uns wieder unseres allseitsbeliebten Konsoleneditor als root:

1
nano /etc/sudoers

Wir fügen dort am Ende hinzu:

1
2
##Allow users to do tablet screen rotations if in this group
%tabletgroup    ALL=(ALL)       NOPASSWD:/usr/bin/setkeycodes,/usr/local/bin/rotate

Zudem suchen wir nach der Zeile:

1
Defaults    requiretty

und kommentieren diese durch voranstellen eines # aus.

Jetzt müssen wir noch die XF86User1KB mit dem rotate-Script in Verbindung bringen.
Dazu benötigt man wohl den gconf-editor (zumindest für Gnome) um das ganze etwas komfortabel zu gestalten. (Dank an Codejacked.com für den Guide)
Wir starten ihn aus dem Menü Anwendungen -> Systemwerkzeuge -> Konfigurationseditor oder über ein Terminal mit der Eingabe von gconf-editor.
Wir wechseln dann in der Liste zu apps/metacity/keybinding-commands.
Nun können wir rechts bei command_1 oder einem anderen freien Befehl folgendes eingeben:

1
sudo /usr/local/src/X61_XF86/rotate

Danach wechseln wir zu /apps/metacity/global_keybindings/run_command_1 und fügen dort XF86User1KB ein und „schon“ sollte die Rotation beim drücken des Knopfes ausgeführt werden.

Beim Testen ist mir jedoch aufgefallen, dass das Script nicht ganz funktioniert sondern aus der Funktion mit einem Fehler herausspringt, es versucht einfach für jedes Wacomgerät die Rotation zu verändern. Dummerweise ist jedoch ein recht seltsames Gerät gelistet, namens „ThinkPad Extra Buttons“, es kann jedoch nicht vom Wacomtreiber angesteuert werden. Daher muss im Script ausgeschlosssen werden, dass versucht wird die Rotation von dem Gerät zu ändern, dargestellt im folgenden Screenshot:
rotatescript
Ein Download ist auch verfügbar: rotate
Einfach als root folgendes ausführen:

1
2
3
4
5
6
7
8
mkdir -p /usr/local/src/X61_XF86
pushd /usr/local/src/X61_XF86
wget http://www.arsenal-of-wisdom.org/wp-content/uploads/2009/01/rotate
chmod ugo+x rotate
pushd /usr/local/bin
ln -s /usr/local/src/X61_XF86/rotate
popd
popd

Damit verhält sich unser Tablet schon recht zufriedenstellend unter Linux. Als nächtes werde ich versuchen die automatische Orientierung des Bildschirms zu aktivieren.

Dieser Artikel entstand haupsächlich aus Informationen die ich auf folgenden Seiten erhalten habe:
Installing Fedora 8 on an X61 Tablet
Lukes X60 tablet Seite