Nachdem mein erster Libretto verstorben war, habe ich mich möglichst schnell bei ebay nach einem "neuen" Gerät umgeschaut.
Nach relativ kurzer Zeit wurde ich fündig und habe diesmal für 150€ einen Libretto 50CT mit PCMCIA-Floppy, Dockingstation und Parallel-CDROM-Laufwerk erstanden.
Natürlich war klar, dass wieder eine Slackware laufen wird und dass ich die beiden neuen Komponenten einbinden werde.
Der Libretto ist auf 100MHz hochgetaktet, was sich sehr schnell als Nachteil herausgestellt hat, denn bei der Kompilierung eines neuen Kernels schaltet sich das Gerät sehr schnell wegen Überhitzung ab.
Nach einem Monat sehr unbefriedigender Ergebnisse habe ich diesen Libretto dann wieder bei ebay verkauft, da das System sehr instabil reagiert hat.
Die Stromversorgung ist mit dem hochgetakteten Prozessor hoffnungslos überfordert und auch das RAM scheint mit der kürzeren Zykluszeit nicht zurecht zu kommen.
Im Akkubetrieb stellte der Libretto regelmäßig schon nach kurzer Zeit den Betrieb mit einer Kernelpanic ein.
Besonders wenn das X im Akkubetrieb lief bootete der Rechner einfach mittendrin neu.
Da man so nicht arbeiten kann und ich ein solches Verhalten von meinem ersten Libretto nicht kannte, habe ich mir ein weiteres Gerät mit Originalausstattung beschafft und es funktioniert so stabil wie ich es gewohnt war.
Soll sich ein Windows-User mit dem "performanten" Gerät herumschlagen.
Ich habe von diesem ganzen Übertaktungsblödsinn noch nie viel gehalten.
Was soll ich mit einer Maschine, die so viel Performance hat, dass sie schneller abstürzen kann als andere Geräte :-)
Die Paketauswahl habe ich ansonsten ähnlich dem ersten Libretto gestaltet.
Wenn das Gerät über eine genügend große Platte (>3GB) verfügt, kann man auch gern eine Komplettinstallation der Slackware vornehmen.
Ich gebe hier die Installationsprozedur wieder, um anderen Libretto-Fans die Installation zu erleichtern.
Wer im Besitz eines PCMCIA-Floppy-Laufwerkes und eines Parallel-CDROMs ist, kann die Installation mit Bootdiskette (parportide-Kernel) und CDROM starten.
Das ist jedoch nur etwas für Leute, mit sportlichem Ehrgeiz.
Da aber eine Kompilierung des Kernels notwendig wird, da der Standard-Kernel das Floppy-Laufwerk nicht unterstützt, ist eine Installation in einem anderen Laptop oder über einen HD-Adapter in einem Desktop-PC zu empfehlen.
Die letzte Änderung ist der Einbau einer 4GB Solid-State-Disk (SSD) als Ersatz für die Festplatte.
Der Stromverbrauch wird dadurch erheblich gesenkt, sodass die Akkus länger halten.
Außerdem ist das Gerät dadurch robuster, denn Originalplatten passen geradeso in das Gehäse und sind daher Stößen ungeschützt ausgesetzt.
Inhaltsverzeichnis
Der Libretto
Der Libretto von Toshiba ist ein handliches kleines Gerät mit den Abmessungen 208mmx114mmx32mm und einer Masse
von unter 900g inclusive Akku. Man hat es also mit einem Gerät zu tun, dass nur wenig größer als eine Videocassette ist.
Also kein riesiges flaches Ufo, sondern ein kompaktes, kleines Gerät, dass man wirklich fast überall hin mitnehmen kann.
Mit der Tastatur kann man recht gut umgehen, wenn man nicht gerade Kartoffelsortierer ist und das Display ist zwar sehr klein, besticht
jedoch durch seine Schärfe.
Leider reicht die Helligkeit bei direkter Sonneneinstrahlung nicht aus, aber das ist wohl auch ein Kompromiss an den Stromverbrauch.
Wirklich gewöhnungsbedürftig ist der absolut unergonomische Mousepoint.
Da ich früher schon mit einem Toshiba T2100 zu tun hatte, waren mir die Mousestickspielereien schon bekannt.
Aber mal ehrlich, so richtig gibt es neben einer richtigen Mouse keine sinnvolle Alternative.
Touchpads spielen bei Feuchtigkeit verrückt, Trackballs verschmutzen schnell ..... usw.usf.
Mit der richtigen Grifftechnik ist jedoch ein recht zielgenaues Arbeiten möglich.
Ich bediene den Mousepoint mit dem Daumen und die Tasten auf der Rückseite des Displays mit dem 3.und 4.Finger.
Dabei klemme ich das Display zwischen dem Zeigefinger und dem 3.Finger ein.
Die Arbeiten mit dem Mousepoint ist sehr gewöhnungsbedürftig und ungenau, Linkshänder sind ganz angeschmiert.
Die Akkulaufzeit ist ein weiteres Thema. Mit dem Standardakku (10,8V; 1200mAh) läuft der Libretto 1½ Stunden.
Ich habe mir deshalb noch einen 2600mAh Akku zugelegt, um die Laufzeit zu verdoppeln.
Vom Libretto gibt es unterschiedliche Modelle mit unterschiedlicher Ausstattung. Hier nun mein Libretto CT50.
Die HardwareDer Libretto 50CT besitzt folgende Hardwareaustattung:
Zu beachten ist, dass der PCMCIA-Schacht mit einem 16Bit/5V-Slot ausgestattet ist. Als Controller ist der i82365sl als ISA-to-PCMCIA-Bridge verbaut. Damit wird der Kreis der möglichen PC-Cards sehr eng, denn alle modernen Cardbus-PCMCIA Karten können nicht verwendet werden. Es ist bei der Beschaffung also darauf zu achten, dass die PCMCIA-Karten 16Bit/5V Karten sind. Diese kann man äußerlich daran erkennen, dass sie über der PCMCIA-Buchse kein!!! goldenes Blech besitzen. Da der Libretto intern mit ISA/VLB-Bus läuft, ist auch keine hotplug-Unterstützung möglich. Der Wechsel der PCMCIA-Karten wird jedoch problemlos durch den PCMCIA-Cardcontroller gesteuert.
![]() |
![]() |
16Bit-PCMCIA-Karte Über der PCMCIA-Buchse rechts befindet sich kein goldenes Blech. |
32Bit-Cardbus-Adapter Über der PCMCIA-Buchse rechts ist das goldene Blech deutlich erkennbar. |
Die InstallationIch habe für den Libretto wieder ein Slackware-LinuX in Version 9.1 vorgesehen.
Die Slackware ist sehr schlank und schnell und damit für den Libretto geeignet.
Die Kernelsourcen werden nicht abgeändert, wodurch Software unkompliziert kompiliert werden kann.
Ich gebe hier eine kurze Installations- und Konfigurationsbeschreibung, um anderen Nutzern den Einstieg etwas leichter zu machen.
Abzüge der benötigten Software, die sich nicht auf den Slackware-CDs befindet, habe ich hier zum Download hinterlegt.
Ich habe das BIOS_Menü hier mit einem Formular nachempfunden, um die umfassenden Einstellungsmöglichkeiten ohne lange Textausführungen darzustellen.
Zu einigen Menüpunkten erscheinen jeweils Untermenüs, die über den Link "OPTIONS" erreichbar sind.
In das BIOS des Librettos gelangt man, indem man nach dem Einschalten oder Neustart des Gerätes die <ESC>-Taste ständig gedrückt hält.
Es erscheint dann die Aufschrift "Check system. Then press [F1] key._"und nach betätigen der F1-Taste erscheint das BIOS-Menü.
Sollte der Libretto trotzdem booten, sollte man sofort ein <Strg><Alt><Entf> eingeben und danach die <ESC>-Taste gedrückt halten. Dass klappt auf alle Fälle.
Im BIOS können wir nun die wichtigsten Hardware-Einstellungen ablesen und verändern.
Entscheidende Einstellungen, die wir uns auf jeden Fall merken müssen sind:
Im Hibernations-Modus legt das BIOS des Librettos einen Abzug des gesamten Systemspeichers am Ende der Festplatte ab. Wenn man diesen Modus nutzen möchte, sollte man deshalb die letzten Zylinder der Platte mit einem Volumen von mindestens 34MByte ungenutzt lassen. Eine Formatierung oder eine spezielle Partition (ähnlich PHDISK) ist nicht notwendig. Wenn der Hibernations-Modus im BIOS aktiviert ist, überschreibt es dort angelegte Dateisysteme gnadenlos. Ein weiteres Problem entsteht, wenn man im Hibernationsmodus die Festplatte wechselt. Im abgelegten Speicherabbild befindet sich der alte Festplatten-Cache, der dann auf die neue Platte zurückgeschrieben wird und so ebenfalls die Dateisysteme zerstört. Wenn man also die Platte wechseln möchte, sollte man vorher zuindest einmal sync aufrufen oder besser noch das System komplett herunterfahren. Das sync Kommando kann natürlich auch in den apmd-Daemon eingebunden werden und wird dann automatisch ausgeführt.
Der Installationsstart des Librettos ist die erste Hürde, die überwunden werden muss.
Die Standardkernel unterstützen das PCMCIA-Floppy nicht und nach dem Kernelstart wird init nicht gefunden.
Die einfachste und effektivste Methode ist der Ausbau der Platte und das Einsetzen in einen anderen Laptop oder Desktop-PC (mit Adapter).
Da der Kernel und die Module neu kompiliert werden müssen, macht es sowieso Sinn, ein leistungsstärkeres Gerät als den Libretto zu verwenden.
Damit kommen wir zur Standardinstallation der Slackware.
So, das System ist bereit, die Festplatte muss nun partitioniert werden.
Bei der Partitionierung der Festplatte ist der Hibernations-Modus bereits zu beachten. Dazu müssen wir dem BIOS die letzten 32MB der Festplatte zur Speicherung des RAM freilassen. Dazu kommt noch 1MB für den Videospeicher und etwas Platz für Systemdaten. Hier darf auf keinen Fall ein LinuX-Filesystem angelegt werden, da dieses durch das BIOS unweigerlich überschrieben wird und eine Neuinstallation nach sich zieht. So sieht die Ausgabe von fdisk für meine Festplatte nun aus:
| root@libretto:/root> fdisk /dev/hda | ||||||||
| Disk /dev/hda: 3253 MB, 3253469184 bytes | ||||||||
| 128 heads, 63 sectors/track, 788 cylinders | ||||||||
| Units = cylinders of 8064 * 512 = 4128768 bytes | ||||||||
| Device | Boot | Start | End | Blocks | Id | System | Hinweise | |
| /dev/hda1 | * | 1 | 3 | 12064 | + | 83 | Linux | Das wird das Bootverzeichnis /boot |
| /dev/hda2 | 4 | 20 | 68544 | 82 | Linux swap | Der SWAP-Bereich 64MB (doppelter RAM) | ||
| /dev/hda3 | * | 21 | 505 | 1955520 | 83 | Linux | Das wird das Rootverzeichnis / | |
| /dev/hda4 | 506 | 778 | 1100736 | 83 | Linux | Das wird das Home-Verzeichnis /home | ||
Die restlichen 10 Zylinder (41MByte) bleiben für das BIOS übrig.
Nach der Partitionierung der Platte kann die Installation starten. In der Slackware gibt es dazu das Kommando setup. Auf die Auswahl der Pakete möchte ich hier nicht weiter eingehen. Wichtig ist für das weitere Vorgehen die Installation der Pakete d (Development) und k (Kernelsourcen), der Rest bleibt im wesentlichen dem persönlichen Geschmack vorbehalten. Wer das X-Windows-System verwenden möchte, sollte einen kleinen und schnellen Window-Manager installieren. Gnome und KDE scheiden wegen der Performance aus. fvwm ist sehr gewöhnungsbedürftig in der XFce auf der Slackware 8.1 funktionierte einwandfrei, die neue Version in der Slackware 9.1 macht nur Scherereien. Ich verwende blackbox. Der ist schnell, man hat sich ruck-zuck eingearbeitet und er läuft stabil.
Gemeinsam mit der Installation des Floppy-Laufwerkes werden wir ein Update auf das PCMCIA-Paket Version 3.2.8 vornehmen. Dazu können hier die erforderlichen Pakete heruntergeladen werden. Das PCMCIA-Paket ist ein Original von Sourceforge, der floppy_cs-Patch wurde von mir speziell für den Kernel 2.4.22 angepasst. Dazu habe ich den Patch floppy_cs.2.02 entsprechend verändert.
Diese beiden tar-Archive werden nach /usr/src/ kopiert und wie folgt entpackt:
Das zuletzt gestartete Skript INSTALL.floppy_cs-2.4.22 nimmt automatisch das Patchen des Kernels vor und startet darauf hin die Neukompilierung des Kernels.
Es erscheinen eine Reihe von Ausgaben auf der Konsole und als nächstes startet die Kernelkonfiguration. Ich gehe hier nur auf die Einbindung des Floppy-Treibers ein, es bleibt jedem natürlich selbst überlassen, weitere andere Optionen zu wählen.
Wichtig ist natürlich, dass die PCMCIA-Unterstützung im Kernel nicht!!! abgeschaltet wird :-).
Im Konfigurationsmenü navigiert man mit den Cursortasten.
Auswahlen werden durch <ENTER> bestätigt und Einträge mit <SPACE> geändert.
Jetzt wird die Kernelkonfiguration folgendermassen geändert.
Nach einer ganzen Weile (kann auf einem 300MHz Rechner 2 Stunden dauern) erscheinen ein paar Fragen zur Installation des PCMCIA-Paketes auf der Konsole, die wir noch beantworten müssen.
Linux kernel source directory [/usr/src/linux]: mit <ENTER> bestätigen.
Build "trusting" versions of card utilities (y/n) [n]: mit <ENTER> bestätigen.
Include 32-bit (Cardbus) card support (y/n) [y]: mit <ENTER> bestätigen, die Cardbus Unterstützung kann mit n <ENTER> abgeschaltet werden.
Das macht jedoch nur Sinn, wenn die Platte nur im Libretto laufen soll.
Damit das PCMCIA-System auch mit modernen Laptops zusammenarbeitet, lasse ich diese Option eingeschaltet.
Include PnP BIOS resource checking (y/n) [n]: mit <ENTER> bestätigen.
How would you like to set kernel-specific options?
1 - Read from the currently running kernel
2 - Read from the Linux source tree
Enter option (1-2) [1]: mit 2 <ENTER> bestätigen.
Module install directory [/lib/modules/2.4.22]:_ mit <ENTER> bestätigen.
Dann müsste das Skript durchgelaufen sein und wenn bis hier alles gut gegangen ist, dann ist es fast geschafft.
Das Ziel ist nahe!
Im Verzeichnis /boot befindet sich nun der neue Kernel mit der Bezeichnung vmlinuz.floppy_cs.
Da nun die notwendigen Module existieren, müsste das PCMCIA-Floppy auch mit den Standard-Kerneln zusammenarbeiten.
Ein Versuch lohnt sich auf jeden Fall.
Also einfach mal testen, Rechner neu starten
shutdown -r now oder <CTRL><ALT><DEL>
und das Floppy mit Diskette in den PCMCIA-Schacht einschieben.
Wenn zwei hohe Piepstöne zu hören sind, dürfte das Laufwerk auch zu mounten sein, also
mount /dev/fd0 /mnt
ls -al /mnt
Wenn das geklappt hat, ist es nicht notwendig, den neuen Kernel zu installieren, ansonsten müssen wir noch an den Bootmanager ran.
Dieser neue Kernel muss nun noch in den Bootmanager aufgenommen werden.
Ich benutze lilo als Bootmanager und habe den Floppy-Kernel zuerst einmal an zweiter Stelle in das Bootmenü aufgenommen.
Wenn der Kernel sich als stabil erweist, kann er dann als default-Kernel konfiguriert werden.
Die Anpassung des Bootmanagers müssen Sie selbst vornehmen.
Ich gebe hier meine angepasste Datei /etc/lilo.conf als Hilfestellung wieder.
# LILO configuration file # generated by 'liloconfig' # # Start LILO global section boot = /dev/hda #compact # faster, but won't work on all systems. prompt # Eintrag erzeugt einen Bootprompt zur Auswahl des neuen Kernels timeout = 50 # Normal VGA console vga = normal # VESA framebuffer console @ 1024x768x64k # vga=791 # VESA framebuffer console @ 1024x768x32k # vga=790 # VESA framebuffer console @ 1024x768x256 # vga=773 # VESA framebuffer console @ 800x600x64k # vga=788 # VESA framebuffer console @ 800x600x32k # vga=787 # VESA framebuffer console @ 800x600x256 # vga=771 # VESA framebuffer console @ 640x480x64k # vga=785 # VESA framebuffer console @ 640x480x32k # vga=784 # VESA framebuffer console @ 640x480x256 # vga=769 # ramdisk = 0 # paranoia setting # End LILO global section # Linux bootable partition config begins image = /boot/vmlinuz root = /dev/hda3 label = LinuX read-only # Non-UMSDOS filesystems should be mounted read-only for checking #Die folgenden vier Zeilen müssen in die Datei /etc/lilo.conf eingefügt werden. #image = gibt den Namen und die Position des neuen Kernels an #root = gibt die Festplattenpartition mit dem root-Filesystem an #label = gibt einen beliebigen Bezeichner an, der im Bootmenü angezeigt wird image = /boot/vmlinuz-floppy_cs root = /dev/hda3 label = LinuXF_CS read-only # Non-UMSDOS filesystems should be mounted read-only for checking # Linux bootable partition config ends |
Jetzt muss nur noch der Bootmanager neu geschrieben werden, also das Kommando
lilo
und lilo meldet zurück, welche Kernel verfügbar sind.
Jetzt ist es Zeit für einen Neustart des Systems.
shutdown -r now oder <CTRL><ALT><DEL>
Bei erscheinen des Bootmenüs muss nun der neue Kernel (LinuXF_CS) ausgewählt werden.
Sollte das System sauber hochfahren, so kann das PCMCIA-Floppy (mit Diskette) eingesteckt werden.
Im Normalfall müssten zwei hohe Pieptöne hintereinander ertönen.
Das bedeutet, das Floppy ist erkannt und das Modul fehlerfrei geladen.
Also versuchen wir gleich, das Laufwerk zu mounten:
mount /dev/fd0 /mnt
Sollte das Mounten ohne Fehler ablaufen, schauen wir ins directory:
ls -al /mnt
Es klappt?? Du kannst dich nun beruhigt zurücklehnen, es ist geschafft!!!.
Generell empfiehlt sich für die Verwendung von Wechselmedien der komfortable Automounter.
Die Toshiba Utilities bieten die Möglichkeit, einige BIOS-Funktionen von der Konsole und dem X-Windows aus zu steuern.
Dazu müssen wir zuerst die Sourcen toshutils-2.0.1.tar.gz downloaden und nach /usr/src kopieren.
Dort verfahren wir dann wie folgt:
cd /usr/src
tar -xzf toshutils-2.0.1.tar.gz
cd toshutils-2.0.1
./configure
make depend
make all
make install
fertig.
Damit stehen uns die Tools fan, svpw, hotkey, tpasswd, alarm, tdocked, dispwitch, tbacklight, ownerstring, thotswap, wmtuxtime, tuxtime-conf zur Verfügung, die jedoch nicht alle vom Libretto unterstützt werden.
Besonders wmtuxtime ist für X-Windows Anwender interessant, da eine Reihe von BIOS-Optionen in einem grafischen Menü eingestellt werden können.
Die Unterstützung für diese Laufwerke ist als Modul verfügbar.
Das Laufwerk muss dabei an der parallelen Schnittstelle angeschlossen und eingeschaltet sein.
Die notwendigen Module sind
modprobe parport
modprobe paride
modprobe epat
(Modul für das übertragene Protokoll, hängt vom Chip im Laufwerk ab)
modprobe pd
Mit dem Kommando
dmesg
kann kontrolliert werden, welche Geräte der Kernel zum mounten nun zur Verfügung stellt.
So könnte nun das Gerät pcd0 als CDROM verfügbar sein, so dass es gemountet werden kann.
mount /dev/pcd0 /mnt
ls -al /mnt
Für das Einbinden und Entladen der Module habe ich ein Startscript geschrieben, das auch automatisch testen kann, welches Protokollmodul passend ist.
Es ist natürlich auch möglich, eine Festplatte in das Laufwerksgehäuse einzubauen.
Dann zeigt das Kommando dmesg die verfügbaren Partitionen z.B. pda1, pda2, pda3 der Festplatte an.
Diese können dann wieder einzeln gemountet werden.
Generell empfiehlt sich für die Verwendung von Wechselmedien der komfortable Automounter.
Eher durch Zufall kam ich in den Besitz eines Zip-Laufwerkes.
Es handelt sich um ein externes ZIP100 Laufwerk für den Anschluss an die parallele Schnittstelle.
Was lag also näher, als auch dieses Laufwerk einzubinden.
Die notwendigen Module sind parport und ppa.
Für das Modul ppa muss die SCSI Unterstützung im Kernel aktiviert sein und der ppa-Support als Modul eingetragen werden.
Im Standardkernel sind diese Optionen bereits aktiviert, also bei selbst kompilierten Kerneln beachten.
Natürlich habe ich auch dafür ein Startscript geschrieben.
Dieses tut nichts weiter, als das Modul zu laden oder zu entladen.
Wer solch ein Laufwerk öfter nutzt, kann das Modul auch in die Datei /etc/rc.d/rc.modules eintragen und permanent laden.
Dazu muss nur die Zeile
modprobe ppa
eingetragen werden.
Als Reader für SmartMedia-Karten ist mir der FS-B53 von RICOH in die Hände gefallen. Das Gerät macht keinerlei Schwierigkeiten. Sowie eine Karte eingeschoben wird, springt das pcmcia-System an und es wird eine ide-cs platte hdc erkannt. Alles was noch zu tun war, ist ein entsprechender Eintrag in den Automounter.

Im Systemchip des Libretto 50CT ist ein USB-Controller (usb-uhci) integriert, der sich auch initialisieren lässt. Interessant wäre jetzt natürlich, ob der USB-Port am Libretto auch zugäglich ist, evtl. über den Expansionsport an der Unterseite.
Der Systemstart
Zuerst möchte ich den Systemstart der Slackware kurz umreißen.
Dadurch wird das Zusammenspiel und die Bedeuting der einzelnen Scripte deutlich.
Der Rechner startet, ähnlich wie bei anderen Betriebssystemen auch, durch den Aufruf eines Bootmanagers (lilo).
Der Bootmanager startet den ausgewählten Kernel.
Welche Kernel zur Auswahl stehen, wird in der Datei /etc/lilo.conf festgelegt(z.B. /boot/vmlinuz).
Die letzte Aktion des Kernels ist der Start des init-Prozesses.
Dieser ist Urprozess mit der Prozessnummer PID=1.
Alle anderen auf dem System gestarteten Prozesse sind damit Kindprozesse von init.
Das kann man sehr schön mit dem Kommando pstree überprüfen.
Mit diesem Kommando wird die Baumstruktur aller laufenden Prozesse, mit init als Wurzel, angezeigt.
Init ruft also auch die Scripte zur Konfiguration des Systems auf.
Das Verhalten von init wird in der Datei /etc/inittab gesteuert.
Dort sind die einzelnen Scripte für den Systemstart eingetragen.
Jede einzelne Zeile der Datei /etc/inittab legt dabei eine Systemreaktion fest.
Die Einträge in einer Zeile sind durch Doppelpunkte voneinander getrennt.
Der erste Eintrag ist eine eindeutige Kennung (im Prinzip frei wählbar, 2-4 Zeichen, siehe man inittab).
Danach folgt die Angabe der Runlevel, in denen die Aktion ausgelöst werden soll, gefolgt vom Namen der Aktion.
Der letzte Eintrag ist der Verweis auf das Script, das ausgeführt werden soll.
Diese Scripte befinden sich der Übersicht halber alle im Verzeichnis /etc/rc.d/ .
Ich benutze den Default-Runlevel 3, dh. Multiuserbetrieb ohne X-Window (grafische Oberfläche), da ich dieses selten benötige und bei Bedarf von Hand starte.
Die Shellscripte sind alle Textdateien, die von Hand geändert werden können.
Dazu sind nur ;-) Kenntnisse in der Shell-Programmierung notwendig.
Die Shell ist ein Kommandointerpreter, vergleichbar mit der COMMAND.COM unter DOS/Windows.
Der Funktionsumfang ist jedoch beträchtlich größer und man hat in LinuX verschiedene Shells zur Auswahl ( sh, bash, tsh, zsh ....)
Eine recht gute on-board Hilfe findet man unter LinuX immer in den man-Pages, die durch das Kommando man Kommandoname aufgerufen werden können.
Eine kurze Übersicht zu den Shell-Kommandos erhält man also durch den Aufruf man sh oder man bash.
Um tiefer in die Materie einzudringen kommt man um ein gutes Buch wohl nicht herum.
Fehlerhafte Einträge in der Datei /etc/inittab können fatale Fehler zur Folge haben, da das System dann gar nicht oder falsch gestartet wird. Also besser vor dem Neustert alles genau kontrollieren und Rettungs-CD bereitlegen!
Hier nun ein Auszug aus der Datei /etc/inittab mit kurzen Erläuterungen zur Bedeutung der einzelnen Zeilen.
Festlegung des Runlevels 3
Das Script /etc/rc.d/rc.S wird für die Initialisierung des Systems beim booten aufgerufen
Startscript für den Singleuser-Betrieb (Runlevel 1)
Startscript für den Multiuser-Betrieb (Runlevel 2345)
Verhalten bei CTRL-ALT-DEL, hier Herunterfahren des Systems. Das Kommando shutdown löst das Herunterfahren aus.
Script, das das Herunterfahren bis zum Anhalten des Systems steuert (Runlevel 0).
Script, das das Herunterfahren mit anschließendem Neustart steuert (Runlevel 6).
Start einer Konsole tty1. Von dieser Zeile sind mehrere enthalten, um mehrere Text-Konsolen (Rechnerzugänge) zu erhalten. Diese Konsolen sind jeweile mit den Tastenkombinationen ALT-F1, ALT-F2, ALT-F3 ... erreichbar. Aus der grafischen Oberfläche gelagt man über CTRL-ALT-F1 ... dort hin.
Startscript für den Runlevel 4, Multiuserbetrieb mit grafischer Oberfläche.
Es befinden sich noch weitere Zeilen in dieser Datei, mit denen z.B. Modemzugänge oder serielle Terminals eingerichtet werden können oder Reaktionen auf die Signale einer USV festgelegt werden und und und.
Der init-Daemon wird also beim Systemboot die Scripte /etc/rc.d/rc.S und /etc/rc.d/rc.M ausführen, und die Konsolen einrichten und der User erhält eine Login-Meldung, mit der Aufforderung, seinen Benutzernamen und das Passwort einzugeben.
Das System ist bereit.
Das Script /etc/rc.d/rc.S übernimmt grundlegende Initialisierungsaufgaben, wie z.B.
Damit ist eine grundlegende Funktionalität des Systems gegeben. Mit dem Script /etc/rc.d/rc.M werden nun spezielle Komponenten aktiviert. Dabei werden meist weitere Scripte, vergleichbar mit Unterprogrammen, aufgerufen, die jeweils für bestimmte funktionale Einheiten verantwortlich sind (z.B. /etc/rc.d/rd.pcmcia zum starten des PCMCIA-Systems). Diese Vorgehensweise hat den Vorteil, dass das System sehr flexibel ist und auch ohne Neukompilierung verändert werden kann. Besonders interessant ist das gerade für die Fehlersuche und Konfiguration.
| slackware Startstruktur | |||||
| LILO | Bootmanager | ||||
![]() |
|||||
| Kernel | |||||
![]() | |||||
| init | ![]() |
/etc/rc.d/rc.S | ![]() |
fsck | Dateisystemcheck |
![]() |
swapon | SWAP-Partition aktivieren | |||
![]() |
mount | Dateisysteme mounten (einbinden) | |||
![]() |
rm | temporäre Dateien löschen | |||
![]() |
hwclock | Systemuhr stellen | |||
![]() |
/etc/rc.d/rc.module | Kernelmodule laden | |||
![]() |
/etc/rc.d/rc.serial | serielle Schnittstellen initialisieren | |||
![]() |
/etc/rc.d/rc.M | ![]() |
hostname | Rechnername festlegen | |
![]() |
/etc/rc.d/rc.pcmcia start | PCMCIA starten | |||
![]() |
/etc/rc.inet2 | Netzwerk und Server starten | |||
![]() |
syslog | Systemlogger starten | |||
![]() |
/etc/rc.d/rc.lpd start | Drucksystem starten | |||
![]() |
/etc/rc.d/rc.sendmail start | Sendmail starten | |||
![]() |
/etc/rc.d/apmd | APM starten | |||
![]() |
/etc/rc.d/sound start | Sound starten | |||
![]() |
/sbin/agetty Konsolenstart |
![]() |
login | User-Login | |
In den verschiedenen Distributionen sind schon eine Vielzahl solcher Scripte integriert.
Leider haben die Scripte der Slackware-Distributionen noch nicht durchgängig eine start/stop-Funktionalität.
Damit wä es möglich jeden Systemdienst mit dem selben Script zu starten und zu stoppen.
Das funktioniert einigermassen gut z.B. mit dem PCMCIA-System.
Durch Eingabe folgender Kommandos kann die PCMCIA-Unterstützung des System ein und wieder ausgeschaltet werden.
/etc/rc.d/rc.pcmcia start PCMCIA einschalten
/etc/rc.d/rc.pcmcia stop PCMCIA ausschalten
Ein solches Verhalten hat für die Fehlersuche und Konfiguration wesentliche Vorteile.
Es können natürlich noch mehr Parameter festgelegt werden, z.B. check, info, eject, resume usw..
Alle von mir geschriebenen Scripte besitzen diese Funktionen und geben bei fehlenden Parametern einen kurzen Hilfstext aus.
Diese Scripte können über Links heruntergeladen werden.
Diese Veränderung des Scriptverhaltens erfordert natürlich auch eine Anpassung der aufrufenden Scripte /etc/rc.d/rc.S und /etc/rc.d/rc.M.
Die Konfiguration
/etc/rc.d/rc.module
In diesem Script werden alle Kernelmodule aufgerufen, die von grundlegender Bedeutung sind und die nicht durch andere Startscripte gestartet werden.
Für den libretto bleibt da nicht viel übrig, da die meisten Module aus dieser Datei mit gutem Gewissen entfernt werden können.
Deshalb habe ich die auf dem System vorgefertigte Datei durch die folgende abgelöst.
| Inhalt der Datei rc.modules |
|---|
#!/bin/sh
# rc.modules 3.1 Thu Aug 28 14:01:35 PDT 2003 pjv <volkerdi@slackware.com>
# /etc/rc.d/rc.modules
# F. Schlaefendorf <frank@schlaefendorf.de>
# erstellt am 16.02.2005
# letzte Aenderung am 18.02.2005
### Update module dependencies ###
RELEASE=`uname -r`
if [ -x /usr/bin/find -a -e /lib/modules/$RELEASE/modules.dep \
-a /lib/modules/$RELEASE/modules.dep -nt /etc/modules.conf ]; then
NEWMODS="`/usr/bin/find /lib/modules/$RELEASE -type f -newer /lib/modules/$RELEASE/modules.dep`"
if [ ! "" = "$NEWMODS" ]; then
echo "Es wurden folgende neue Kernelmodule in /lib/modules/$RELEASE/ gefunden."
echo "$NEWMODS"
echo "Es wird ein Update der Abhaengigkeiten durchgefuehrt"
/sbin/depmod -a
else
echo "Keine neuen Module gefunden."
fi
else
echo "Es wird ein Update der Modulabhaengigkeiten durchgefuehrt"
/sbin/depmod -A
fi
case $1 in
start|'')
#### APM support ###
/sbin/modprobe apm
#### PC parallel port support ###
/sbin/modprobe parport_pc io=0x378 irq=7
;;
stop)
/sbin/rmmod parport_pc
/sbin/rmmod apm
;;
*)
echo "Benutze /etc/rc.d/rc.module start|stop"
;;
esac
|
| >>>Download rc.modules |
Mit diesem Script wird im ersten Teil getestet, ob neue Module im System aufgetaucht sind, um ein depmod durchzuführen.
Dann werden die Module apm und parport_pc für die Unterstützung der APM-BIOS-Funktionen und der parallelen Schnittstelle geladen (start) oder entladen (stop).
Das ist schon alles.
Im System laufen zwei Uhren getrennt voneinander. Die eine Uhr ist die BIOS-Uhr, die durch die BIOS-Batterie versorgt wird und auch bei abgeschaltetem System weiterläuft, solange die Batterie noch Saft hat :-).
Die zweite Uhr ist die Systemuhr von Linux.
Das Problem besteht nun darin, beide Uhren synchron zu halten und wenn das nicht der Fall ist zu entscheiden, welche Uhr denn nun richtig läuft.
In den Standardscripten der Slackware wird beim Hochfahren des Systems die Linux-Uhr mit den Angaben aus der BIOS-Uhr geladen ( in /etc/rc.d/rc.S mit hwclock), da sie in diesem Moment das einzig verfügbare Zeitnormal ist.
Wird das System nun irgendwann wieder heruntergefahren, so wird die BIOS-Uhr mit dem Inhalt der Systemuhr nachgestellt (in /etc/rc.d/rc.0 ebenfalls mit hwclock).
Das macht auch Sinn, denn die Systemuhr könnte zwischenzeitlich von Hand oder durch einen Zeitserver (ntp) auf eine exakte (Welt)Zeit eingestellt worden sein.
Damit dieser Zustand bis zum nächsten Systemstart weiterhin erhalten bleibt, muss diese Information in die BIOS-Uhr geschrieben werden.
Nun haben wir im Libretto jedoch den Hibernations-Modus, bei dem sich das System über unbestimmte Zeit schlafen legt und die Systemuhr natührlich ebenfalls stoppt.
Nach dem Erwachen wird der alte RAM-Inhalt wieder restauriert und die Systemuhr läuft natürlich mit einer völlig falschen Zeit weiter, die beim shutdown oder reboot auch noch in die BIOS-Uhr geschrieben wird.
Die Uhr zeigt also letztendlich völligen Unsinn an.
Um Abhilfe zu schaffen, habe ich ein spezielles Startscript zur Behandlung der Systemzeiten geschrieben.
Dieses Script übernimmt das stellen der BIOS und Systemuhr und die Synchronisation mit Zeitservern.
Dieses Script sorgt nun in Zusammenarbeit mit dem apmd dafür, dass die Uhren auch nach dem Hibernations-Modus mit der richtigen Zeit laufen.
| Inhalt der Datei rc.systemzeit |
|---|
#!/bin/sh
# Frank Schlaefendorf <frank@schlaefendorf.de>
# erstellt am 14.02.2005
# letzte Aenderung am 18.02.2005
# welcher zeitserver soll genutzt werden?
# ntp|html|all|none
USE_TIMESERVER="all"
NTPSERVER1=""
NTPSERVER2=""
HTMLSERVER="http://www.schlaefendorf.de/datum.php4"
# funktionsdefinitionen
LOGGER="/usr/bin/logger -i -t systemzeit "
biossetsystem(){
if [ -x /sbin/hwclock ]; then
if grep "^UTC" /etc/hardwareclock 1> /dev/null 2> /dev/null ; then
echo "Setze die Systemuhr mit der BIOS-Zeit (UTC)."
$LOGGER " BIOS->System(UTC) "
/sbin/hwclock --utc --hctosys --directisa
else
echo "Setze die Systemuhr mit der BIOS-Zeit (localtime)."
$LOGGER " BIOS->System(localtime) "
/sbin/hwclock --localtime --hctosys --directisa
fi
fi
}
systemsetbios(){
if [ -x /sbin/hwclock ]; then
if grep "^UTC" /etc/hardwareclock 1> /dev/null 2> /dev/null ; then
echo "Sichere die Systemzeit in der BIOS-Uhr (UTC)."
$LOGGER " System->BIOS(UTC) "
/sbin/hwclock --utc --systohc --directisa
else
echo "Sichere die Systemzeit in der BIOS-Uhr (localtime)."
$LOGGER " System->BIOS(localtime) "
/sbin/hwclock --localtime --systohc --directisa
fi
fi
}
ntpsetsystem(){
FEHLER=0
case ${USE_TIMESERVER} in
ntp|all)
NTPSERVER="${NTPSERVER1} ${NTPSERVER2}"
if [ "${NTPSERVER}" != "" ]; then
ntpdate -s ${NTPSERVER}
FEHLER=$?
if [ "$FEHLER" != "0" ]; then
echo "Der Zeitabgleich ueber den NTP-Server $NTPSERVER ist fehlgeschlagen"
$LOGGER " NTP->System "
fi
fi
;;
*)
echo "Die Systemzeit darf nicht ueber einen NTPSERVER aktualisiert werden"
FEHLER=2
;;
esac
return $FEHLER
}
htmlsetsystem(){
FEHLER=0
case ${USE_TIMESERVER} in
html|all)
if [ -e /etc/HTTP-PROXY ]; then
http_proxy=$( cat /etc/HTTP-PROXY )
export http_proxy
fi
TIME=$( lynx -source ${HTMLSERVER} 2> /dev/null )
if [ "$?" == "0" ]; then
date -u ${TIME}
$LOGGER " HTML->System "
FEHLER=$?
else
echo "Der Kontakt zum HTTP-Zeitserver ${HTMLSERVER} war fehlerhaft"
FEHLER=3
fi
date
;;
*)
echo "Die Systemzeit darf nicht ueber einen HTMLSERVER aktualisiert werden"
FEHLER=2
;;
esac
return $FEHLER
}
allsetsystem(){
ntpsetsystem
if [ "$?" != "0" ]; then
htmlsetsystem
fi
if [ "$?" != "0" ]; then
echo "Die aktuelle Zeit konnte nicht ermittelt werden"
fi
}
settime(){
if [ "$1" != "" ]; then
date $1
if [ "$?" != "0" ]; then
echo "Die Zeitangabe $1 ist fehlerhaft!"
echo "Um die Uhr auf 23.15 Uhr am 12.02.2005 einzustellen geben Sie bitte ein"
echo "/etc/rc.d/rc.systemzeit set 021223152005"
fi
fi
}
case $1 in
start) biossetsystem ;;
stopp) systemsetbios ;;
biossetsystem) biossetsystem ;;
systemsetbios) systemsetbios ;;
ntpsetsystem) ntpsetsystem ;;
htmlsetsystem) htmlsetsystem ;;
serversetsystem) allsetsystem ;;
set) settime $2 ;;
*)
echo "Benutze start|stop|biossetsystem|systemsetbios|ntpsetsystem|htmlsetsystem|set"
;;
esac
|
| >>>Download rc.systemzeit |
Mit diesem Script führt der Rechner alle Funktionen des Zeitabgleiches durch. Dazu kann das Script mit verschiedenen Parametern aufgerufen werden.
Das Script wird in die Scripte rc.S, rc.0 und in das APMD-Proxy-Script eingebunden.
Der gpm-Maus-Server dient der Mausunterstützung sowohl auf der Konsole als auch im X-Windows. Im Startscript habe ich die Aktivierung des PS/2-Mousepoints und einer seriellen Maus an COM1 vorgesehen. Dazu kann das Script mit unterschiedlichen Parametern aufgerufen werden.
Der gpm-Server wird in allen Fällen mit der Option -R msc gestartet. Dadurch wird gpm veranlasst, ein Device /dev/gpmdata zu erzeugen, das die Schnittstelle zum X-Server darstellt. Durch die entsprechenden Einstellungen in der Konfiguration des X-Servers wird erreicht, dass dieser nicht direkt auf die Maus-Schnittstelle zugreift, sondern die Daten von gpm benutzt. Dadurch kann durch einen entsprechenden Aufruf des Scripts /etc/rc.d/rc.gpm die Maus während des Betriebs gewechselt werden.
| Inhalt der Datei rc.gpm |
|---|
#!/bin/sh
# Start des gpm Mouse-Servers
# Frank Schlaefendorf <frank@schlaefendorf.de>
# erstellt am 14.02.2005
# letzte Aenderung am 18.02.2005
#
# der gpm-server wird mit der option -R msc gestartet. dadurch erzeugt er ein
# spezielles device /dev/gpmdata auf das der X-Server zugreifen kann.
# damit kann man waehrend des betriebes die maus wechseln, ohne den X-Server
# neu zu konfigurieren oder starten zu muessen
# in die Datei /etc/X11/XF86Config ist die Mausunterstuetzung durch
#Section "Pointer"
# Protocol "MouseSystems"
# Device "/dev/gpmdata"
# zu ersetzen.
kill_gpm(){
if [ -e /var/run/gpm.pid ]; then
/usr/sbin/gpm -k
sleep 1
fi
}
case $1 in
start|ps2)
echo "Starte gpm mit PS/2-Maus"
kill_gpm
/usr/sbin/gpm -R msc -m /dev/psaux -t ps2
;;
serial)
echo "Starte gpm mit serieller Maus an COM1"
kill_gpm
/usr/sbin/gpm -R msc -m /dev/ttyS0 -t bare
;;
stop)
echo "Stoppe gpm-Maus-Server"
kill_gpm
;;
*)
echo "Benutze /etc/rc.d/rc.gpm start|ps2|serial|stop "
;;
esac
|
| >>>Download rc.gpm |
Das Startscript /etc/rc.d/rc.pcmcia habe ich unverändert gelassen. Man könnte zwar die Erkennung des Controllers ausbauen, da der Libretto über den i82365sl verfügt, aber da ich die Platte gelegentlich in einen Laptop mit Cardbus/yenta_socket einbaue, habe ich alles so gelassen.
| Inhalt der Datei rc.pcmcia |
|---|
##!/bin/sh
#
# rc.pcmcia 1.23 1998/07/18 18:49:26 (David Hinds)
# Modified for Slackware Sun Aug 25 22:29:14 PDT 2002 (pjv)
#
# This is designed to work in BSD as well as SysV init setups. See
# the HOWTO for customization instructions.
usage(){
echo "Usage: $0 {start|stop|restart}"
}
cleanup(){
while read SN CLASS MOD INST DEV EXTRA ; do
if [ "$SN" != "Socket" ] ; then
/etc/pcmcia/$CLASS stop $DEV 2> /dev/null
fi
done
}
# Allow environment variables to override all options
if [ "$PCMCIA" ] ; then readonly PCMCIA ; fi
if [ "$PCIC" ] ; then readonly PCIC ; fi
if [ "$CORE_OPTS" ] ; then readonly CORE_OPTS ; fi
if [ "$CARDMGR_OPTS" ] ; then readonly CARDMGR_OPTS ; fi
if [ "$SCHEME" ] ; then readonly SCHEME ; fi
# Source PCMCIA configuration, if available
if [ -f /etc/pcmcia.conf ] ; then
. /etc/pcmcia.conf
elif [ -f /etc/sysconfig/pcmcia ] ; then
. /etc/sysconfig/pcmcia
if [ "$PCMCIA" != "yes" ] ; then exit 0 ; fi
else
PCIC=i82365
PCICOPTS=" wakeup=100 async_clock=1"
# PCICOPTS=" cs_irq=10 wakeup=100 async_clock=1"
# Put pcmcia_core options here
CORE_OPTS=" cis_speed=500 "
# Put cardmgr options here
CARDMGR_OPTS=
# To set the PCMCIA scheme at startup...
SCHEME=default
fi
EXITCODE=1
for x in "1" ; do
if [ "$PCIC" = "" ] ; then
echo "PCIC not defined in rc.pcmcia!"
break
fi
if [ $# -lt 1 ] ; then usage ; break ; fi
action=$1
case "$action" in
'start')
echo "Starting PCMCIA services:"
SC=/var/run/pcmcia-scheme
if [ -L $SC -o ! -O $SC ] ; then rm -f $SC ; fi
if [ ! -f $SC ] ; then umask 022 ; echo > $SC ; fi
if [ "$SCHEME" ] ; then umask 022 ; echo $SCHEME > $SC ; fi
fgrep -q pcmcia /proc/devices
if [ $? -ne 0 ] ; then
if [ -d "/lib/modules/`uname -r`/pcmcia" ]; then
PC="/lib/modules/`uname -r`/pcmcia"
elif [ -d "/lib/modules/`uname -r`/kernel/drivers/pcmcia" ]; then
PC="/lib/modules/`uname -r`/kernel/drivers/pcmcia"
fi
if [ -d $PC ] ; then
/sbin/modprobe pcmcia_core $CORE_OPTS 2> /dev/null
if [ "$PCIC" = "probe" ]; then # attempt to load both
echo " <Probing for PCIC: edit /etc/rc.d/rc.pcmcia>"
/sbin/modprobe i82365 wakeup=1 2> /dev/null
if [ ! $? = 0 ]; then # try tcic
/sbin/modprobe tcic 2> /dev/null
fi
if [ ! $? = 0 ]; then # try yenta_socket
/sbin/modprobe yenta_socket 2> /dev/null
fi
else # PCIC has been selected manually
/sbin/modprobe $PCIC $PCICOPTS 2> /dev/null
fi
/sbin/modprobe ds 2> /dev/null
else
echo "No PCMCIA kernel modules for `uname -r` found."
break
fi
fi
if [ -s /var/run/cardmgr.pid ] && \
kill -0 `cat /var/run/cardmgr.pid` 2>/dev/null ; then
echo " cardmgr is already running."
else
if [ -r /var/run/stab ] ; then
cat /var/run/stab | cleanup
fi
/sbin/cardmgr $CARDMGR_OPTS
fi
if [ -d /var/lock/subsys ] ; then
touch /var/lock/subsys/pcmcia
fi
;;
'stop')
if [ -r /var/run/cardmgr.pid ]; then
echo -n "Shutting down PCMCIA services:"
PID=`cat /var/run/cardmgr.pid`
kill $PID
echo -n " cardmgr"
# Give cardmgr a few seconds to handle the signal
kill -0 $PID 2>/dev/null && sleep 2 && \
kill -0 $PID 2>/dev/null && sleep 2 && \
kill -0 $PID 2>/dev/null && sleep 2 && \
kill -0 $PID 2>/dev/null
if fgrep -q "ds " /proc/modules ; then
echo -n " modules"
/sbin/modprobe -r ds
if [ "$PCIC" = "probe" ]; then
if grep i82365 /proc/modules 1> /dev/null 2> /dev/null ; then
/sbin/modprobe -r i82365
elif grep yenta_socket /proc/modules 1> /dev/null 2> /dev/null ; then
/sbin/modprobe -r yenta_socket
elif grep tcic /proc/modules 1> /dev/null 2> /dev/null ; then
/sbin/modprobe -r tcic
fi
else
/sbin/modprobe -r $PCIC
fi
/sbin/modprobe -r pcmcia_core
fi
echo "."
rm -f /var/lock/subsys/pcmcia
fi
EXITCODE=0
;;
'restart')
$0 stop
$0 start
EXITCODE=0
;;
*)
usage
;;
esac
done
# Only exit if we're in our own subshell
if [ "${0##*/}" = "rc.pcmcia" ] ; then
exit $EXITCODE
fi
|
| >>>Download rc.pcmcia |
Das Startscript startet letztendlich den cardmgr (PCMCIA Kartenmanager). Die Konfigurationsscripte liegen im Verzeichnis /etc/pcmcia.
Im Managerscript network habe ich eine Anpassung vorgenommen. Dieses testet im Original eine Reihe von Abhängigkeiten (z.B. pump und netboot) ab, die im Libretto nicht nötig sind. Die Konfiguration ist recht unübersichtlich und Ethernet und Wlan sind aus meiner Sicht ungünstig und unübersichtlich miteinander verquickt. Deshalb habe ich das Script so verändert, dass es nur noch als Verteiler auftritt und die eigentliche Arbeit zur Konfiguration der Netzwerkkarten an spezielle Scripte weitergibt. Dazu habe ich ein Script /etc/rc.d/rc.ethernet zur Steuerung der Ethernetkarten und ein Script /etc/rc.d/rc.wireless für die WLAN-Karten geschrieben. Das Managerscript network testet nun einfach an der MAC-Hardwarenummer, um was für eine Karte es sich handelt und startet das entsprechende Script. Dabei werden die Parameter ACTION=(start|stop|restart|resume|suspend|check usw) DEVICE=(eth0...) und SCHEME mit dem PCMCIA-Scheme-Name übergeben.
| Inhalt der Datei network |
|---|
#! /bin/sh # /etc/pcmcia/network # # Version:0.1 # Frank Schlaefendorf <frank@schlaefendorf.de> # erstellt am 04.02.2005 # letzte Aenderung 29.03.2005 # if [ -f /var/lib/pcmcia/scheme ]; then SCHEME=`cat /var/lib/pcmcia/scheme` elif [ -f /var/run/pcmcia-scheme ]; then SCHEME=`cat /var/run/pcmcia-scheme` fi if [ -z $SCHEME ]; then SCHEME=default fi ACTION=$1 DEVICE=$2 HWADDR=`/sbin/ifconfig $DEVICE | sed -ne 's/.*\(..:..:..:..:..:..\).*/\1/p'` ADDRESS="$SCHEME,$SOCKET,$INSTANCE,$HWADDR" logger $ADDRESS case "$ADDRESS" in *,*,*,00:05:5D:25:47:1B) /etc/rc.d/rc.wireless $ACTION $DEVICE $SCHEME ;; *,*,*,*) /etc/rc.d/rc.ethernet $ACTION $DEVICE $SCHEME exit $? ;; esac exit 0 |
| >>>Download network |
Was sonst zu tun bleibt erledigen die entsprechenden Scripte.
Die entsprechende Konfiguration für die einzelnen PCMCIA-SCHEME werden in der Datei /etc/rc.d/PCMCIA_SCHEME vorgehalten.
Die Startscripte greifen auf diese Datei zu und lesen die Einstellungen zum gerade aktuellen SCHEME aus.
Es sind somit verschiedene SCHEME denkbar, z.B. für zu Hause oder bei verschiedenen Kunden.
| Inhalt der Datei PCMCIA_SCHEME |
|---|
#!/bin/sh
# scheme-file fuer PCMCIA
# Frank Schlaefendorf <frank@schlaefendorf.de>
# erstellt am 23.03.2005
# letzte Aenderung 09.04.2005
#
if [ "$SCHEME" == "" ]; then
SCHEME=default
fi
default_scheme(){
USE_DHCP=yes
DHCP_HOSTNAME="libretto"
IPADDR=192.168.0.9
NETMASK=255.255.255.0
BROADCAST=192.168.0.255
GATEWAY=""
SUCHE_PROXY="yes"
SETZE_ZEIT="yes"
# ESSID="BenQ"
ESSID="Any"
MODE="Managed"
NICKNAME="libretto"
NWID=""
FREQ=""
SENS=1
RATE=11M
KEY="XXXX-XXXX-XX"
RTS=500
FRAG=off
POWER=off
}
# laden des PCMCIA-SCHEME
case $SCHEME in
default|0) default_scheme ;;
*) default_scheme ;;
esac
|
| >>>Download PCMCIA_SCHEME |
Das Startscript für die PCMCIA-Ethernetkarten habe ich aus dem Managerscript /etc/pcmcia/network herausgelöst, um die Konfiguration transparenter zu machen und die Karte auch unabhängig vom Cardcontroller zu konfigurieren.
Das Script erwartet als Parameter ACTION=(start|stop|restart|resume|suspend|check usw) DEVICE=(eth0...) und SCHEME den aktuellen PCMCIA-Scheme-Name.
Zuerst wird getestet, ob die Datei /etc/rc.d/PCMCIA_SCHEME existiert, aus der die notwendige Netzwerkeinstellungen für das aktuelle PCMCIA-Scheme entnommen werden kann.
Sollte diese Datei nich existieren, so werden default-Einstellungen vorgenommen.
Danach wird zwischen den verschiedenen Aktionen unterschieden und die Karte initialisiert oder abgeschaltet.
Bei der Initialisierung kann zwischen dhcp oder einer festen IP gewählt werden.
Sollte der dhcp-Kontakt fehlschlagen, wird in jedem Fall eine feste IP vergeben.
Zum Schluss besteht noch die Möglichkeit das Proxy-Suchscript zu starten, um einen verfügbaren HTTP-Proxy suchen zu lassen.
Die Aktionen resume und suspend sind mit start und stop identisch, da nicht alle 16-bit-Karten diese Funktionen sicher unterstützen.
Der Vorteil besteht auch darin, dass nach einem erwecken des Libretto (aufklappen des Displays) das Netz neu gescannt wird und ein aktueller HTTP-Proxy eingetragen wird.
| Inhalt der Datei rc.ethernet |
|---|
#! /bin/sh
# /etc/rc.d/rc.ethernet
#
# Version:0.1
# Frank Schlaefendorf <frank@schlaefendorf.de>
# erstellt am 16.02.2005
# letzte Aenderung 09.04.2005
ACTION=$1
DEVICE=$2
SCHEME=$3
if [ "$SCHEME" == "" ]; then
SCHEME=default
fi
if [ -e /etc/rc.d/PCMCIA_SCHEME ]; then
. /etc/rc.d/PCMCIA_SCHEME
else
# Editiere die Angaben
DEVICE=eth0
# feste (Notfall)IP Konfiguration
IPADDR="192.168.0.9"
NETMASK="255.255.255.0"
# soll die IP ueber DHCP bezogen werden? yes/no
USE_DHCP=yes
#DHCP_HOSTNAME=`/bin/hostname`
GATEWAY=""
fi
dhcp_start(){
/sbin/ifconfig $DEVICE down
/sbin/dhcpcd -k $DEVICE 2>&1 > /dev/null
sleep 2
echo "Konfiguration von $DEVICE ueber DHCP..."
# Add the -h option to the DHCP hostname:
if [ ! "$DHCP_HOSTNAME" = "" ]; then
DHCP_HOSTNAME="-h $DHCP_HOSTNAME"
fi
/sbin/dhcpcd -t 10 ${DHCP_HOSTNAME} -d $DEVICE
if [ $? -ne 0 ]; then
echo "Es ist kein DHCP-Server erreichbar, statische IP $IPADDR wird konfiguriert "
staticip_start
return $?
else
return 0
fi
}
staticip_start(){
# set up IP statically:
# Determine broadcast and network addresses from the IP address and netmask:
BROADCAST=`/bin/ipmask $NETMASK $IPADDR | cut -f 1 -d ' '`
NETWORK=`/bin/ipmask $NETMASK $IPADDR | cut -f 2 -d ' '`
# Set up the ethernet card:
echo "Konfiguriere $DEVICE:"
echo "ifconfig $DEVICE ${IPADDR} broadcast ${BROADCAST} netmask ${NETMASK}"
/sbin/ifconfig $DEVICE down 2>&1 > /dev/null
/sbin/ifconfig $DEVICE ${IPADDR} broadcast ${BROADCAST} netmask ${NETMASK}
# ist ein fehler aufgetreten
if [ ! $? = 0 ]; then
echo "$DEVICE wurde nicht konfiguriert."
echo "Das kann folgende Ursachen haben:"
echo "1. Der Kernel unterstützt die Netzwerkkarte nicht, oder die"
echo " Hardware der Karte wurde falsch konfiguriert."
echo "2. Der Rechner besitzt keine Netzwerkkarte."
echo "3. Die Netzwerkkarte ist defekt...."
return 1
else
return 0
fi
}
if [ -z "`ifconfig $DEVICE 2>&1 | grep 'Device not found'`" ]; then
case $ACTION in
"start")
if [ "$USE_DHCP" = "yes" ]; then
dhcp_start
else
staticip_start
fi
if [ "$?" == "0" ]; then
# Setze den gateway:
if [ ! "$GATEWAY" == "127.0.0.1" -a ! "$GATEWAY" == "" ]; then
/sbin/route add default gw ${GATEWAY} metric 1
fi
if [ "$SUCHE_PROXY" == "yes" ]; then
/etc/rc.d/rc.proxy_suche $DEVICE
if [ "$?" == "0" -a "$SETZE_ZEIT" == "yes" ]; then
http_proxy=`cat /etc/HTTP-PROXY`
export http_proxy
/etc/rc.d/rc.systemzeit serversetsystem
fi
fi
fi
;;
"stop")
/sbin/ifconfig $DEVICE down
if [ "$USE_DHCP" = "yes" ]; then
/sbin/dhcpcd -k $DEVICE 2>&1 > /dev/null
fi
;;
"restart")
/etc/rc.d/rc.ethernet stop $DEVICE $SCHEME
sleep 1
/etc/rc.d/rc.ethernet start $DEVICE $SCHEME
;;
"status"|"check")
/sbin/ifconfig $DEVICE
;;
"suspend")
/etc/rc.d/rc.ethernet stop $DEVICE $SCHEME
;;
"resume")
/etc/rc.d/rc.ethernet start $DEVICE $SCHEME
;;
*)
echo "Benutze /etc/rc.ethernet start|stop|restart|status device"
;;
esac
exit 0
else
echo " $DEVICE existiert nicht "
exit 1
fi
# End of /etc/rc.d/rc.ethernet
|
| >>>Download rc.ethernet |
Die Konfiguration der Wireless Karten bereitete mir einiges Kopfzerbrechen, da einige Adapter, die in einem Vergleichsgerät (16bit-Slot, aber PCI-to-PCMCIA Bridge yenta-socket) unter LinuX ohne Probleme liefen nicht zur Zusammenarbeit mit dem Libretto zu bewegen waren. Die Erlösung kam mit der DLINK DWL-660. Sie funktioniert problemlos und das System bleibt stabil. Die Karte hat außerdem den Vorteil, dass eine externe Antenne angeschlossen werden kann und man so größere Distanzen überbrücken kann. Das entsprechende Script /etc/rc.d/rc.wireless nimmt nun die Wireless-Konfiguration vor und gibt die Arbeit dann an das Ethernet-Script /etc/rc.d/rc.ethernet ab, um das Ethernet-Device der Karte zu konfigurieren. Die notwendigen Einstellungen werden wieder in der Datei /etc/rc.d/PCMCIA_SCHEME gesucht und in die Karte eingetragen. Sollte diese Datei nich gefunden werden, so werden default-Einstellungen vorgenommen.
| Inhalt der Datei rc.wireless |
|---|
#! /bin/sh
# /etc/rc.d/rc.wireless
#
# Version:0.1
# Frank Schlaefendorf <frank@schlaefendorf.de>
# erstellt am 04.03.2005
# letzte Aenderung 09.04.2005
ACTION=$1
DEVICE=$2
SCHEME=$3
FEHLER=0
if [ -e /etc/rc.d/PCMCIA_SCHEME ]; then
. /etc/rc.d/PCMCIA_SCHEME
else
ESSID="BenQ"
MODE="Managed"
NICKNAME="libretto"
NWID=""
FREQ=""
SENS=1
RATE=11M
KEY="XXXX-XXXX-XX"
RTS=500
FRAG=off
POWER=off
fi
iwconf(){
case $MODE in
Managed|Ad-hoc|Master|Repeater|Secondary|Monitor|Auto)
iwconfig $1 mode $MODE
;;
*)
echo "Unbekannter Mode $MODE"
FEHLER=1
exit 1
;;
esac
if [ "$NICKNAME" != "" ]; then
iwconfig $1 nick "${NICKNAME}"
fi
if [ "$NWID" != "" ]; then
iwconfig $1 nwid "${NWID}"
fi
case $FREQ in
2.422G)
iwconfig $1 freq $FREQ
;;
esac
if [ "$SENS" != "" ]; then
iwconfig $1 sens $SENS
fi
case $RATE in
11M)
iwconfig $1 rate 11M
;;
esac
if [ "$KEY" != "" ]; then
iwconfig $1 key "${KEY}"
fi
if [ "$RTS" != "" ]; then
iwconfig $1 rts $RTS
else
iwconfig $1 rts 500
fi
if [ "$FRAG" != "" ]; then
iwconfig $1 frag $FRAG
else
iwconfig $1 frag off
fi
if [ "$POWER" != "" ]; then
iwconfig $1 power $POWER
else
iwconfig $1 power off
fi
if [ "$ESSID" != "" ]; then
iwconfig $1 essid "${ESSID}"
else
echo "Sie haben keine ESSID im SCHEME $SCHEME angegeben!"
FEHLER=10
exit 1
fi
# logger ` iwconfig $DEVICE `
}
if [ -z "`ifconfig $DEVICE 2>&1 | grep 'Device not found'`" ]; then
case $ACTION in
"start")
iwconf $DEVICE
if [ "$?" != "0" ]; then
exit 1
fi
/etc/rc.d/rc.ethernet start $DEVICE $SCHEME
;;
"stop")
/etc/rc.d/rc.ethernet stop $DEVICE $SCHEME
;;
"restart")
/etc/rc.d/rc.wireless stop $DEVICE $SCHEME
sleep 1
/etc/rc.d/rc.wireless start $DEVICE $SCHEME
;;
"status"|"check")
/usr/sbin/iwconfig $DEVICE
/sbin/ifconfig $DEVICE
;;
"suspend")
/etc/rc.d/rc.wireless stop $DEVICE $SCHEME
;;
"resume")
/etc/rc.d/rc.wireless start $DEVICE $SCHEME
;;
*)
echo "Benutze /etc/rc.wireless start|stop|restart|suspend|resume|status device"
;;
esac
# Setze den gateway:
if [ ! "$GATEWAY" = "127.0.0.1" -a ! "$GATEWAY" = "" ]; then
/sbin/route add default gw ${GATEWAY} metric 1
fi
exit 0
else
echo " $DEVICE existiert nicht "
exit 1
fi
# End of /etc/rc.d/rc.wireless
|
| >>>Download rc.wireless |
Für die Einbindung des externen CD-ROM habe ich ein kleines Startscript geschrieben. Mit diesem Script kann man es sehr einfach testen, welches Protokoll-Modul eingesetzt werden muss.
| Inhalt der Datei rc.parcdrom |
|---|
#!/bin/sh
#
# Frank Schlaefendorf <frank@schlaefendorf.de>
# erstellt am 21.02.2005
# letzte Aenderung am 21.02.2005
#
# Die verfuegbaren Protokoll-Module fuer paride. Welches Module das
# richtige ist, haengt vom Chipsatz im Parallellaufwerk ab.
# Ausprobieren!!!!
#
# aten ATEN EH-100 (HK)
# bpck Microsolutions backpack (US)
# comm DataStor (old-type) "commuter" adapter (TW)
# dstr DataStor EP-2000 (TW)
# epat Shuttle EPAT (UK)
# epia Shuttle EPIA (UK)
# fit2 FIT TD-2000 (US)
# fit3 FIT TD-3000 (US)
# friq Freecom IQ cable (DE)
# frpw Freecom Power (DE)
# kbic KingByte KBIC-951A and KBIC-971A (TW)
# ktti KT Technology PHd adapter (SG)
# on20 OnSpec 90c20 (US)
# on26 OnSpec 90c26 (US)
#
DRIVERS="aten bpck comm dstr epat epia fit2 fit3 friq frpw kbic ktti on20 on26"
# Tragen Sie hier Ihren Protokolltreiber ein. Sie koennen das Script mit dem
# Parameter test aufrufen und den passenden Treiber testen lassen.
# Wenn ein passender Treiber gefunden wurde, tragen sie ihn hier ein, oder
# uebergeben sie ihn als parameter z.B.
# /etc/rc.d/rc.parcdrom start epat
DRIVER=epat
is_modul(){
# teste, ob der uebergebene Name ein gueltiger Modulname ist
ERG=1
for driver in $DRIVERS
do
if [ "$driver" == "$1" ]; then
ERG=0
break
fi
done
return $ERG
}
# wurde ein zweiter Parameter mit dem Treibernamen angegeben
if [ "$2" != "" ]; then
if is_modul $2 ; then
DRIVER=$2
else
echo "Der Treiber $2 ist unbekannt"
fi
fi
test(){
echo -n "Teste "
ERG=1
for driver in $DRIVERS
do
echo -n "$driver "
modprobe $driver
modprobe pd 2&>1 > /dev/null
if [ "$?" == "0" ]; then
echo "OK"
echo "In diesem Laufwerk wird der Treiber $driver verwendet"
ERG=0
break
else
rmmod $driver
fi
done
if [ "$ERG" == "1" ]; then
echo "Es wurde leider kein passender Protokolltreiber gefunden"
fi
exit $ERG
}
case $1 in
start)
modprobe paride
if is_modul $DRIVER ; then
echo "Das Protokoll-Modul $DRIVER wird geladen"
modprobe $DRIVER
modprobe pd 2&>1 > /dev/null
if [ "$?" != "0" ]; then
echo "Das Protokoll-Modul passt nicht zur Hardware und wird wieder entfernt"
rmmod $DRIVER
rmmod paride
fi
else
test
fi
;;
test)
modprobe paride
test
;;
mount)
if [ ! -d /cdrom ]; then
mkdir /cdrom
else
fuser -k /cdrom
umount /cdrom
fi
mount /dev/pcd0 /cdrom
;;
umount)
fuser -k /cdrom
umount /cdrom
;;
stop)
fuser -k /cdrom
umount /cdrom
rmmod pcd
rmmod pd
if [ "$DRIVER" != "" ]; then
rmmod $DRIVER
else
for driver in $DRIVERS
do
rmmod $driver
done
fi
rmmod paride
;;
*)
echo "Benutze /etc/rc.d/rc.parcdrom start|stop|test"
;;
esac
|
| >>>Download rc.parcdrom |
Das Script kann mit folgenden Parametern gestartet werden
Generell empfiehlt sich für die Verwendung von Wechselmedien der komfortable Automounter.
Die Unterstützung des Zip-Laufwerkes ist recht einfach zu erreichen. Das entsprechende Startscript läd einfach nur das Modul ppa in den Kernel und fertig. Für das Modul muss die SCSI_Unterstützung im Kernel aktiviert sein.
| Inhalt der Datei rc.iomega |
|---|
#!/bin/sh case $1 in start) modprobe ppa ;; stopp) rmmod ppa ;; esac |
| >>>Download rc.iomega |
Nach dem Laden des Moduls ist das Zip-Medium als SCSI-Device mountbar.
Die Ausgabe von dmesg zeigt an, welche Geräte verfügbar sind, sodass durch z.B.
mount /dev/sda1 /mnt -t vfat
eine Zip-Diskette mit Windows-FAT32 Dateisystem gemountet werden kann.
Generell empfiehlt sich für die Verwendung von Wechselmedien der komfortable Automounter.
Die Konfiguration von APM (Advaced Power Management) bezieht sich auf zwei Dateien.
Die eine ist das Startscript /etc/rc.d/rc.apm, die andere ist das apmd-proxy-Script /etc/rc.d/rc.apmd_proxy.
Zuerst zum Startscript.
| Inhalt der Datei rc.apmd |
|---|
#!/bin/sh
# Frank Schlaefendorf <frank@schlaefendorf>
# erstellt am 12.02.2005
# letzte Aenderung am 19.02.2005
#
case $1 in
start)
# ist der apm-deamon installiert?
if [ -x /usr/sbin/apmd ] ; then
# unterstuetzt der kernel apm nicht ?
if ! cat /proc/apm 2>&1 > /dev/null ; then
# apm-Modul laden
modprobe apm
fi
# unterstuetzt der kernel apm jetzt?
if cat /proc/apm 2>&1 > /dev/null ; then
echo "APMD wird gestartet!"
/usr/sbin/apmd -w 13 -p 10 -P /etc/rc.d/rc.apmd_proxy
else
echo "Achtung! Der Kernel unterstuetzt kein APM!"
fi
else
echo "Der apmd-Daemon ist nicht installiert!"
fi
;;
stop)
echo "APMD wird gestoppt"
killall apmd
;;
suspend)
apm -s
;;
standby)
apm -S
;;
restart)
/etc/rc.d/rc.apmd stop && sleep 3 && /etc/rc.d/rc.apmd start
;;
esac
|
| >>>Download rc.apmd |
Das Startscript kann mit den Parametern start,stop oder restart aufgerufen werden.
Bei start prüft das Script, ob der Kernel apm unterstützt und läd gegebenenfalls das Modul apm.
Danach wird der apmd-Deamon gestartet
Das apmd-proxy-Script legt nun die einzelnen Reaktionen fest, die durch den apmd ausgeführt werden sollen.
Dabei handelt es sich um ein bash-Script, das ausführbar (chmod 700) sein muss.
Dieses wird bei einem registrierten apm-Ereignis durch den apmd mit zwei Parametern aufgerufen und ausgeführt.
| Scriptaufruf mit Parameternamen | Ereignis |
| apmd_proxy start | Der APM-Daemon wurde gestartet |
| apmd_proxy suspend system | Der APM-Daemon ruft den Suspend-Modus auf |
| apmd_proxy suspend user | Der User hat den Suspend-Modus aufgerufen |
| apmd_proxy suspend critical | Das APM-System ruft den critical-Suspend-Modus auf |
| apmd_proxy standby system | Das APM-System ruft den Standby-Modus auf |
| apmd_proxy standby user | Der User hat den Standby-Modus aufgerufen |
| apmd_proxy resume suspend | Das System kehrt aus dem Suspend-Modus zurück |
| apmd_proxy resume standby | Das System kehrt aus dem Standby-Modus zurück |
| apmd_proxy resume critical | Das System kehrt aus dem critical-Suspend-Modus zurück |
| apmd_proxy change battery | Das APM-System meldet "Batterie leer" |
| apmd_proxy change power | Das APM-System meldet "Wechsel der Stromversorgung" |
| apmd_proxy change time | Das APM-System wuenscht ein Zeitupdate |
| apmd_proxy change capability | Das APM System meldet eine Änderung der Hardware |
| apmd_proxy stop | Der APM-Daemon soll gestoppt werden |
Im Proxyscript werden über Variablen die wichtigsten Einstellungen vorgenommen, dann folgen die Verweise auf die benötigten Programme. Die einzelnen Reaktionen habe ich in kleine Prozeduren geschrieben, um den Hauptteil des Scriptes am Ende der Datei übersichtlicher zu halten. Dort sind in einer CASE-Anweisung alle Reaktionen auf die einzelnen Parameter des apmd festgelegt.
| Inhalt der Datei rc.apmd_proxy |
|---|
#!/bin/sh
# Frank Schlaefendorf <frank@schlaefendorf>
# erstellt am 12.02.2005
# letzte Aenderung am 26.02.2005
#
# pcmcia karten bei standby ejecten, macht bei karten, die standby nicht beherrschen sinn
APMD_PCMCIA_EJECT_ON_STANDBY="yes"
# pcmcia karten bei suspend ejecten, viele karten beherrschen suspend nicht
APMD_PCMCIA_EJECT_ON_SUSPEND="no"
# soll das system in den suspend gehen, auch wenn der pc aus einem netzteil betrieben wird?
APMD_SUSPEND_ON_AC="yes"
# soll vor suspend vom X auf eine textconsole gewechselt werden, damit das
# X stabil gesichert wird (nur waehlen, wenn noetig)
APMD_LEAVE_X_BEFORE_SUSPEND=no
# ab wieviel % batterieladezustand soll das geraet herunter gefahren werden
APMD_BATTERY_LOW_CAPACITY=10
# nach wievielen minuten soll der pc nach der warnung "batterie low" herunter gefahren werden
APMD_BATTERY_LOW_SHUTDOWN=0
# soll die hardwareuhr bei suspend gesichert und resume neu gelesen werden ?
APMD_SET_CLOCK_ON_SUSPEND_RESUME=yes
# soll die hardwareuhr bei standby gesichert und resume neu gelesen werden ?
APMD_SET_CLOCK_ON_STANDBY_RESUME=yes
# mit welchem timeout soll die festplatte laufen, wenn das Geraet ueber netzteil versorgt wird?
# TIMEOUT=$APMD_AC_DISK_TIMEOUT*5sekunden
APMD_AC_DISK_TIMEOUT=120
# mit welchem timeout soll die festplatte laufen, wenn das Geraet ueber batterie versorgt wird?
# TIMEOUT=$APMD_AC_DISK_TIMEOUT*5sekunden
APMD_BATTERY_DISK_TIMEOUT=12
#
# Rueckgabewerte des Scriptes
# 0 - normal, die events werden akzeptiert
# 1 - die events werden abgelehnt
#
# Verweise auf benoetigte Programme
CARDCTL=/sbin/cardctl
CHVT=/usr/bin/chvt
ONACPOWER=/usr/bin/on_ac_power
HDPARM=/usr/sbin/hdparm
SHUTDOWN=/sbin/shutdown
LOGGER="/usr/bin/logger -i -t apmd_proxy "
APM=/usr/bin/apm
# definierte prozeduren fuer die systemreaktionen
lichtaus(){
#LCD Backlight ausschalten
tbacklight -f
}
lichtan(){
#LCD Backlight einschalten
tbacklight -n
}
pcmcia_eject(){
# entfernen der pcmcia-karten aus dem system, wenn gewuenscht
case $1 in
bysuspend)
if [ "$APMD_PCMCIA_EJECT_ON_SUSPEND" = yes ] ; then
$CARDCTL eject
fi
;;
bystandby)
if [ "$APMD_PCMCIA_EJECT_ON_STANDBY" = yes ] ; then
$CARDCTL eject
fi
;;
esac
}
pcmcia_insert(){
# einfuegen der pcmcia-karte in das system, wenn gewuenscht
case $1 in
aftersuspend)
if [ "$APMD_PCMCIA_EJECT_ON_SUSPEND" = yes ] ; then
$CARDCTL insert
fi
;;
afterstandby)
if [ "$APMD_PCMCIA_EJECT_ON_STANDBY" = yes ] ; then
$CARDCTL insert
fi
;;
esac
}
save_X(){
# wechsel auf konsole 1, um das X zu sichern
if [ "$APMD_LEAVE_X_BEFORE_SUSPEND" = yes ] ; then
$CHVT 1
sleep 1
fi
}
restore_X(){
# wechsel auf die X-konsole
if [ "$APMD_LEAVE_X_BEFORE_SUSPEND" = yes ] ; then
$CHVT 7
sleep 1
fi
}
save_time(){
# sichern der aktuellen systemzeit in der biosuhr
case $1 in
bysuspend)
if [ "$APMD_SET_CLOCK_ON_SUSPEND_RESUME" = yes ] ; then
/etc/rc.d/rc.systemzeit systemsetbios
fi
;;
bystandby)
if [ "$APMD_SET_CLOCK_ON_STANDBY_RESUME" = yes ] ; then
/etc/rc.d/rc.systemzeit systemsetbios
fi
;;
esac
}
restore_time(){
# setzen der systemzeit durch die biosuhr
case $1 in
aftersuspend)
if [ "$APMD_SET_CLOCK_ON_SUSPEND_RESUME" = yes ] ; then
/etc/rc.d/rc.systemzeit biossetsystem
fi
;;
afterstandby)
if [ "$APMD_SET_CLOCK_ON_STANDBY_RESUME" = yes ] ; then
/etc/rc.d/rc.systemzeit biossetsystem
fi
;;
esac
}
##########-----------------------HAUPTPROGRAMM-----------------------
ACTION="$1,$2"
case $ACTION in
# ------------------------------- START ----------------------------
start,)
$LOGGER $ACTION
# Passe die festplatteneinstellung an die Stromversorgung an
/etc/rc.d/rc.apmd_proxy change power
;;
# --------------------------- SUSPEND -------------------------------
suspend,system)
$LOGGER $ACTION
pcmcia_eject bysuspend
save_time bysuspend
sync
;;
suspend,user)
$LOGGER $ACTION
pcmcia_eject bysuspend
save_time bysuspend
sync
;;
suspend,critical)
$LOGGER $ACTION
save_time bysuspend
sync # up kritischer zustand, schnell ein sync
shutdown -h now # und sofort abwaerts
;;
# --------------------------- STANDBY -------------------------------
standby,system)
$LOGGER $ACTION
pcmcia_eject bystandby
save_time bystandby
;;
standby,user)
$LOGGER $ACTION
pcmcia_eject bystandby
save_time bystandby
;;
# ------------------------------- RESUME ---------------------------
resume,suspend)
$LOGGER $ACTION
pcmcia_insert aftersuspend
restore_time aftersuspend
;;
resume,standby)
$LOGGER $ACTION
restore_time afterstandby
pcmcia_insert afterstandby
;;
resume,critical)
$LOGGER $ACTION
# nix, da shutdown ausgefuehrt wurde
;;
# ------------------------ CHANGE in STATUS ------------------------
change,power)
$LOGGER $ACTION
POWER=$( $ONACPOWER )
case $POWER in
'')
$LOGGER "NETZTEIL an"
if [ "$APMD_SUSPEND_ON_AC" == yes ]; then
apm -n
else
apm -i
fi
# festplatte nach $APMD_AC_DISK_TIMEOUT*5sekunden in standby-modus
$HDPARM -q -S$APMD_AC_DISK_TIMEOUT /dev/hda
;;
*)
$LOGGER "BATTERIE ${POWER}% LADEKAPAZITAET"
apm -n
# festplatte nach $APMD_BATTERY_DISK_TIMEOUT*5sekunden in standby-modus
$HDPARM -q -S$APMD_BATTERY_DISK_TIMEOUT /dev/hda
;;
esac
if [ "$APMD_BATTERY_LOW_SHUTDOWN" -gt 0 -a -e /var/run/shutdown.pid ] ; then
if [ -e $ONACPOWER -a "$ONACPOWER" == "" ] ; then
$SHUTDOWN -c
if [ -e /var/run/shutdown.pid ]; then
echo "Warnung: Shutdown laeuft!"
else
echo "Das Netzteil ist eingeschaltet, Shutdown gestoppt!"
fi | wall
fi &
fi
;;
change,battery)
$LOGGER $ACTION
# das BIOS hat den batteriezustand als low erkannt, im libretto 50%
POWER=$( $ONACPOWER )
if [ "$POWER" != "" ]; then
if [ $POWER -lt $APMD_BATTERY_LOW_CAPACITY ]; then
if [ "$APMD_BATTERY_LOW_SHUTDOWN" -gt 0 ] ; then
$SHUTDOWN -h +$APMD_BATTERY_LOW_SHUTDOWN &
else
$SHUTDOWN -h now &
fi
else
exit 1
fi
else
exit 1
fi
;;
change,time)
$LOGGER $ACTION
/etc/rc.d/rc.systemzeit serversetsystem
;;
change,capability)
$LOGGER $ACTION
# neue hardware erkannt (hotplugging)
;;
# ------------------------------- STOP -----------------------------
stop,)
$LOGGER $ACTION
;;
esac
exit 0
|
| >>>Download rc.apmd_proxy |
Der Automounter bietet unter Linux eine komfortable Möglichkeit mit Wechselmedien umzugehen. Dazu wird eine Mapliste erstellt, in der festgelegt wird, welches Gerät an welchen Mountpoints gemountet werden soll. Der Name dieser Mapliste ist frei wählbar und wird in das Startscript /etc/rc.d/rc.autofs in die Variable MAPDATEI eingetragen. Ich habe diese Mapliste in Anlehnung an die anderen Distributionen /etc/auto.misc genannt. Auf das Erstellen der Datei /etc/auto.master kann verzichtet werden, da ich die notwendigen Eintragungen in dem Startscript direkt vornehme. Diese Mapliste sieht nun so aus:
| Inhalt der Datei auto.misc |
|---|
# mapliste fuer den automounter # Frank Schlaefendorf <frank@schlaefendorf.de> # erstellt am 10.08.2005 # letzte Aenderung am 12.04.2006 # verzeichnisname mountoptionen geraetedatei # pcmcia-cdrom cd -fstype=iso9660,ro :/dev/hdc # parallel-cdrom pcd -fstype=iso9660,ro :/dev/pcd0 # parallel-ide-hd , 4 partitionen vorbereitet pda1 -fstype=auto :/dev/pda1 pda3 -fstype=auto :/dev/pda2 pda3 -fstype=auto :/dev/pda3 pda4 -fstype=auto :/dev/pda4 # parallel zip, 4 partitionen vorbereitet zip1 -fstype=auto,uid=frank,user,rw,exec :/dev/sda1 zip2 -fstype=auto,uid=frank,user,rw,exec :/dev/sda2 zip3 -fstype=auto,uid=frank,user,rw,exec :/dev/sda3 zip4 -fstype=auto,uid=frank,user,rw,exec :/dev/sda4 # smartcard smart1 -fstype=auto,uid=frank,user,rw,exec :/dev/hdc1 # floppy-laufwerk floppy -fstype=auto,uid=frank,user,rw,exec :/dev/fd0 # samba-freigabe frank vom server apis mp3 -fstype=smbfs,username=frank%frank ://apis/frank |
| >>>Download auto.misc |
Der Automounter wird z.B. angewiesen, das Floppy-Laufwerk /dev/fd0 an das directory floppy zu mounten.
Im Startscript /etc/rc.d/rc.autofs wird mit der Variablen MOUNTPOINT der Pfad eines zentralen Mountpoints für den Automounter übergeben.
In diesem Fall handelt es sich um das directory /auto, kann aber auch problemlos geändert werden.
Wenn das Verzeichnis noch nicht existiert, muss es vor dem Start des Automounters angelegt werden.
Schaut man sich nun nach dem Start des Automunters mit dem Kommando
/etc/rc.d/rc.autofs start
das Verzeichnis /auto mit
dir /auto
an, so wird man feststellen, das es leer ist.
Selbst Dateien, die sich vor dem Start des Automounters hier befunden haben sind nicht mehr zu finden.
Der Grund dafür liegt darin, dass der Automounter in das Verzeichnis gemountet ist (siehe Meldung des mount-Kommandos) und dort nach Bedarf virtuelle Einträge erzeugt.
Greift nun ein User auf das (noch nicht existierende) Verzeichnis /auto/floppy zu, so versucht der Automounter eine Diskette im Floppy-Laufwerk zu mounten.
Gelingt dies, so erzeugt der Automounter einen virtuellen Verzeichniseintrag floppy und gibt dieses, je nach den Zugriffsrechten an den User frei.
Schlägt der Mountversuch fehl, so meldet der Automounter zurück, dass das Verzeichnis nicht existiert.
Die Unterverzeichnisse im Pfad /auto für die einzelnen Geräte müssen vorher nicht extra angelegt werden!!
Finden auf das gemountete Gerät keine Zugriffe mehr statt, so wartet der Automounter eine vorgegebene Zeitspanne (Variable TIMEOUT in der Startdatei /etc/rc.d/rc.autofs), z.B. 10 Sekunden und umountet das Gerät dann.
Dadurch wird die Arbeit mit Wechselmedien wesentlich erleichtert, denn alle Geräte sind unter einem Pfad erreichbar und die lästige Eingabe von mount und umount entfällt vollkommen.
Ein weiterer Vorteil besteht darin, das auch Netzwerk-Dateisysteme gemountet werden können.
Damit ist es möglich, bei Bedarf z.B. NFS oder SAMBA-Filesysteme zu mounten.
Ich habe das für mein MP3 Verzeichnis auf meinem Server apis in die Mapdatei eingetragen, sodass ich auf dem Libretto bei Bedarf MP3-Musik spielen kann.
Das Startscript kann mit den Parametern start,stopp und status aufgerufen werden.
Bei start wird das Modul autofs in den Kernel geladen und der Daemon automount mit den entsprechenden Optionen gestartet..
Bei stopp wird der automounter gestoppt.
Bei status wird die PID des automount-Daemonen angezeigt, sowie eine Liste der momentan gemounteten Geräte.
| Inhalt der Datei rc.autofs |
|---|
#! /bin/bash
#
# Datei /etc/rc.d/rc.autofs
# Frank Schlaefendorf <frank@schlaefendorf.de>
# Erstellt am 10.08.2005
# letzte Aenderung am 12.08.2005
# an welchem mountpoint soll der automounter die geraete mounten?
MOUNTPOINT=/auto
# mapdatei mit den mountoptionen fuer die einzelnen geraete
MAPDATEI=/etc/auto.misc
# nach wie vielen sekunden soll ein unbenutztes geraet ge-umountet werden?
TIMEOUT=10
DAEMON=/usr/sbin/automount
PIDFILE=/var/run/automount.pid
if [ ! -x $DAEMON ]; then
echo "Automount ist nicht installiert!"
exit 1
fi
if ! lsmod | grep autofs 2>&1 > /dev/null ; then
echo "Lade das Modul autofs"
modprobe autofs
if [ $? != 0 ]; then
echo "Das Module autofs konnte nicht geladen werden!"
exit 2
fi
fi
case "$1" in
start)
# Check if the automounter is already running?
if [ ! -f ${PIDFILE} ]; then
echo 'Starte den Automounter: '
$DAEMON -p $PIDFILE -t $TIMEOUT $MOUNTPOINT file $MAPDATEI
fi
;;
stopp)
if [ -f $PIDFILE ]; then
kill -TERM $( cat $PIDFILE )
fi
;;
status)
if [ -f $PIDFILE ]; then
PID=$( cat $PIDFILE )
if ps ax | egrep -e "^[ ]{0,7}$PID.*$DAEMON.*" 2>&1 > /dev/null ; then
echo "Der Automounter ist mit PID ${PID} gestartet"
echo "Aktive Mountpoints im Pfad $MOUNTPOINT sind:"
ls -l $MOUNTPOINT
fi
else
echo "Der Automounter ist nicht gestartet"
fi
;;
restart)
/etc/rc.d/rc.autofs stopp
/etc/rc.d/rc.autofs start
;;
*)
echo "Usage: /etc/rc.d/rc.autofs {start|stopp|status}"
;;
esac
exit 0
|
| >>>Download rc.autofs |
Die Soundinstallation funktioniert häufig mit dem ALSA-SOUND-System.
Das Programm alsaconf versagt beim Libretto jedoch kläglich, da der eingebaute Chip YAMAHA YMF711 auf PCI-Soundkarten verbaut wird und durch den internen ISA-Bus des Libretto scheinbar nicht erkannt wird.
Außerdem sind für die ALSA-Unterstützung extra libs zu instellieren.
Ich nutze auf meinem Libretto den Kerneltreiber opl3sa2 zusammen mit dem esd Sound-Daemonen.
Dieser ist in der Slackware mit ALSA-Support kompiliert, sodass er für meine Zwecke unbrauchbar ist.
Ich habe mir deshalb das Paket esound-0.2.29.tar.gz heruntergeladen, nach /usr/src/ kopiert und kompiliert.
cd /usr/src
tar -xzf esound-0.2.29.tar.gz
cd esound-0.2.29
./configure
make
make install
ldconfig
Die kompilierten Programme liegen dann im Verzeichnis /usr/local/bin
Damit habe ich mir die Soundsteuerung aufgebaut, mit der Sounds auch per Fernzugriff abgespielt werden können. Das macht z.B. Sinn, wenn man einen X-Terminal auf dem Libretto betreibt.
Die Soundinstallation besteht aus zwei Schritten.
Zuerst müssen die Kernelmodule für den Soundchip geladen werden.
Dies geschieht durch das Programm /sbin/modprobe.
Die Daten für die IO-Adresse, und die IRQ und DMA-Einstellung müssen dem BIOS bei den Einstellungen zum SOUND SYSTEM entnommen werden.
Nach dem Laden der Module wird der esd-Sound-Daemon gestartet.
Damit können die Sounds unterschiedlicher Quellen (lokal auf dem Libretto oder von entfernten Rechnern) auf dem Libretto abgespielt werden.
Das geschieht mit dem Startscript /etc/rc.d/rc.sound.
Beim Stoppen wird zuerst der esd-Daemon angehalten und dann die Module entladen.
| Inhalt der Datei rc.sound |
|---|
#!/bin/sh
# Frank Schlaefendorf <frank@schlaefendorf>
# erstellt am 12.02.2005
# letzte Aenderung am 22.02.2005
#
################### ESD-Einstellungen #####################
# sollen die sounds mit 16bit tiefe abgespielt werden? (achtung performance!)
SOUND16BIT=no
# sollen die sounds mit 11k, 22k oder 44kbit abgespielt werden? (achtung performance!)
SAMPLERATE=22
# soll der sound daemon als sound-server fungieren? (achtung performance!)
SOUNDSERVER=no
# auf welchem port soll er lauschen z.B. 16001 (xmms)
SERVERPORT=5001
# soll er auch tcp-zugriffe von entfernten rechnern zulassen
REMOTESERVER=yes
################### SOUND-SYSTEM-BIOS-EINSTELLUNGEN #########
CONTROLIOADRESS=370
WSSIOADRESS=530
IRQLEVEL=5
WSSDMA=1
SBProDMA=0
#################################################################
### prozeduren
# defaultwerte
SOUNDSAM=""
SOUNDBIT=""
set_optionen(){
FEHLER=0
# einstellen der control adresse, die steht fest auf 0x370
CONTROLIOADRESS=0x370
# einstellen der wss-io-adresse, wahlweise 530,540,550,560
case $WSSIOADRESS in
530|540|550|560) WSSIOADRESS="0x${WSSIOADRESS}" ;;
*)
FEHLER=1
echo "Die WSS I/O Adresse $WSSIOADRESS ist unbekannt"
;;
esac
# einstellen des irq-level, wahlweise 5,7,9,11,15
case $IRQLEVEL in
5|7|9|11|15) IRQLEVEL=$IRQLEVEL ;;
*)
FEHLER=2
echo "Der IRQ ${IRQLEVEL} ist unbekannt"
;;
esac
case $WSSDMA in
0|1|3) WSSDMA=$WSSDMA ;;
*)
FEHLER=3
echo "Der DMA-Kanal ${WSSDMA} ist unbekannt"
;;
esac
case $SBProDMA in
0|1|3) SBProDMA=$SBProDMA ;;
*)
FEHLER=3
echo "Der DMA-Kanal ${SBProDMA} ist unbekannt"
;;
esac
if [ "$WSSDMA" == "$SBProDMA" ]; then
echo "Die DMA-Kanaele fuer SBPRO und WSS sind gleich, dadurch kann es zu konflikten kommen"
fi
if [ "$SOUND16BIT" == "yes" ]; then
SOUNDBIT=""
else
SOUNDBIT="-b"
fi
if [ "$SOUNDSERVER" == "yes" ]; then
SOUNDSERVER=" -promiscuous -tcp"
if [ "$REMOTESERVER" == "yes" ]; then
SOUNDSERVER="$SOUNDSERVER -public"
fi
if [ "$SERVERPORT" != "" ]; then
SOUNDSERVER="$SOUNDSERVER -port $SERVERPORT"
else
SOUNDSERVER="$SOUNDSERVER -port 16001"
fi
else
SOUNDSERVER=""
fi
case $SAMPLERATE in
11) SOUNDSAM=11025 ;;
22) SOUNDSAM=22050 ;;
44) SOUNDSAM=44100 ;;
*) SOUNDSAM=22050 ;;
esac
}
case $1 in
start)
if [ -x /usr/bin/esd ]; then
set_optionen
/sbin/modprobe opl3sa2 io=${CONTROLIOADRESS} mss_io=${WSSIOADRESS} irq=${IRQLEVEL} dma=${WSSDMA} dma2=${SBProDMA}
/usr/local/bin/esd ${SOUNDBIT} -r ${SOUNDSAM} ${SOUNDSERVER} 2>&1 > /dev/null &
aumix -w 95,95
fi
;;
local)
if [ -x /usr/bin/esd ]; then
set_optionen
/sbin/modprobe opl3sa2 io=${CONTROLIOADRESS} mss_io=${WSSIOADRESS} irq=${IRQLEVEL} dma=${WSSDMA} dma2=${SBProDMA}
/usr/local/bin/esd ${SOUNDBIT} -r ${SOUNDSAM} 2>&1 > /dev/null &
aumix -w 95,95
fi
;;
stop)
killall esd
sleep 1
/sbin/rmmod opl3sa2
/sbin/rmmod ad1848
/sbin/rmmod mpu401
/sbin/rmmod sound
/sbin/rmmod soundcore
;;
restart)
$0 stop && sleep 3 && $0 start
;;
*)
echo "Benutze /etc/rc.d/rc.sound start|local|stop|restart"
;;
esac
|
| >>>Download rc.sound |
|
Da die Klangqualität des eingebauten Miniaturlautsprechers als eher bescheiden zu bezeichnen ist, habe ich mir einen externen aktiven Lautsprecher zugelegt. Im Makro-Markt entdeckte ich den CD WALLET with PORTABLE SPEAKER von TDK. Es handelt sich um aktive Lautsprecher, die mit Batterie betrieben werden. Den 3,5mm Klinkenstecker habe ich durch einen 2,5mm Klinkenstecker ersetzt, damit er an die Kopfhörerbuchse des Libretto angeschlossen werden kann. Die Klangqualität ist gut und die Lautstärke reicht aus. Leider ist der Libretto ein wenig zu hoch und passt deshalb nicht ins Wallet hinein. Immerhin kann man dort ein paar CDs, Disketten, PCMCIA-Karten und das PCMCIA_Floppy unterbringen. |
![]() Der Libretto mit DLINK DWL-660 WLAN-Karte und Aktivlautsprecher spielt mit xmms MP3 Files vom Server ab |
In der Slackware 9.1 ist das XFree Paket in Version 4.3.0 integriert. Die Konfigurationsdatei liegen im Verzeichnis /etc/X11/ oder sind dort hin verlinkt. Die entscheidende Konfigurationsdatei ist /etc/X11/XF86Config. Fehlkonfigurationen verhindern den Start des X-Servers oder machen das System instabil. Ich habe in der Konfiguration eine ganze Menge Funktionen abgeschaltet, da sie im Libretto nicht benötigt oder nicht unterstützt werden. In der Section "InputDevice" habe ich den gpm-Maus-Server eingetragen. Damit greift der X-Server nicht direkt auf das Maus-Device zu, sondern benutzt die Schnittstelle /dev/gpmdata des gpm-Maus-Servers. Dadurch kann man relativ schnell und während des Betriebs die Maus wechseln (z.B. eine "richtige" Maus an die serielle Schnittstelle anschliessen).
| Inhalt der Datei XF86Config |
|---|
# # /etc/X11/XF86Config # Frank Schlaefendorf <frank@schlaefendorf.de> # erstellt am 14.02.2005 # letzte Aenderung 20.02.2005 # Section "Module" Load "dbe" # Double buffer extension SubSection "extmod" Option "omit xfree86-dga" # don't initialise the DGA extension Option "omit XVideo" Option "omit XVideo-MotionCompensation" Option "omit TOG-CUP" Option "omit MIT-SUNDRY-NONSTANDARD" Option "omit BIG-REQUESTS" Option "omit SYNC" Option "MIT-SCREEN-SAVER" Option "XC-MISC" Option "XFree86-Misc" Option "DPMS" Option "Extended-Visual-Information" Option "FontCache" EndSubSection # This loads the Type1 and FreeType font modules Load "type1" Load "speedo" # Load "freetype" # Load "xtt" EndSection Section "Files" RgbPath "/usr/X11R6/lib/X11/rgb" FontPath "/usr/X11R6/lib/X11/fonts/local/" FontPath "/usr/X11R6/lib/X11/fonts/misc/" FontPath "/usr/X11R6/lib/X11/fonts/75dpi/:unscaled" FontPath "/usr/X11R6/lib/X11/fonts/100dpi/:unscaled" FontPath "/usr/X11R6/lib/X11/fonts/Speedo/" FontPath "/usr/X11R6/lib/X11/fonts/Type1/" # FontPath "/usr/X11R6/lib/X11/fonts/TrueType/" # FontPath "/usr/X11R6/lib/X11/fonts/freefont/" FontPath "/usr/X11R6/lib/X11/fonts/75dpi/" FontPath "/usr/X11R6/lib/X11/fonts/100dpi/" # The module search path. The default path is shown here. # ModulePath "/usr/X11R6/lib/modules" EndSection Section "ServerFlags" # Uncomment this to cause a core dump at the spot where a signal is # received. This may leave the console in an unusable state, but may # provide a better stack trace in the core dump to aid in debugging # Option "NoTrapSignals" # Uncomment this to disable the <Crtl><Alt><Fn> VT switch sequence # (where n is 1 through 12). This allows clients to receive these key # events. # Option "DontVTSwitch" # Uncomment this to disable the <Crtl><Alt><BS> server abort sequence # This allows clients to receive this key event. # Option "DontZap" # Uncomment this to disable the <Crtl><Alt><KP_+>/<KP_-> mode switching # sequences. This allows clients to receive these key events. # Option "Dont Zoom" # Uncomment this to disable tuning with the xvidtune client. With # it the client can still run and fetch card and monitor attributes, # but it will not be allowed to change them. If it tries it will # receive a protocol error. Option "DisableVidModeExtension" # Uncomment this to enable the use of a non-local xvidtune client. # Option "AllowNonLocalXvidtune" # Uncomment this to disable dynamically modifying the input device # (mouse and keyboard) settings. # Option "DisableModInDev" # Uncomment this to enable the use of a non-local client to # change the keyboard or mouse settings (currently only xset). # Option "AllowNonLocalModInDev" EndSection # ********************************************************************** # Input devices # ********************************************************************** # ********************************************************************** # Core keyboard's InputDevice section # ********************************************************************** Section "InputDevice" Identifier "Keyboard1" Driver "Keyboard" Option "AutoRepeat" "500 30" Option "XkbRules" "xfree86" Option "XkbModel" "pc105" Option "XkbLayout" "de" Option "XkbVariant" "nodeadkeys" EndSection # ********************************************************************** # Core Pointer's InputDevice section # ********************************************************************** Section "InputDevice" Identifier "gpm-Mouse" Driver "mouse" Option "Protocol" "MouseSystems" Option "Device" "/dev/gpmdata" Option "Emulate3Buttons" Option "Emulate3Timeout" "50" EndSection # ********************************************************************** # Monitor section # ********************************************************************** Section "Monitor" Identifier "Libretto-LCD" HorizSync 31.5 VertRefresh 50-70 Modeline "640x480@16bpp" 25.20 640 656 752 800 480 490 492 525 -hsync -vsync EndSection # ********************************************************************** # Graphics device section # ********************************************************************** # Any number of graphics device sections may be present Section "Device" Identifier "Libretto-VGA" Driver "chips" Chipset "ct65550" Option "noaccel" Option "nolinear" Option "HWcursor" VideoRam 1024 # Insert Clocks lines here if appropriate EndSection # ********************************************************************** # Screen sections # ********************************************************************** Section "Screen" Identifier "Libretto Screen" Device "Libretto-VGA" Monitor "Libretto-LCD" DefaultDepth 16 Subsection "Display" Depth 8 Modes "640x480" ViewPort 0 0 EndSubsection Subsection "Display" Depth 16 Modes "640x480" ViewPort 0 0 EndSubsection Subsection "Display" Depth 24 Modes "640x480" ViewPort 0 0 EndSubsection EndSection # ********************************************************************** # ServerLayout sections. # ********************************************************************** Section "ServerLayout" Identifier "Libretto Layout" Screen "Libretto Screen" InputDevice "gpm-Mouse" "CorePointer" InputDevice "Keyboard1" "CoreKeyboard" EndSection |
| >>>Download XF86Config |
Nach dem Abspeichern dieser Konfiguration unter /etc/X11/XF86Config (Installation des x-Paketes vorausgesetzt) müsste sich der X-Server nun mit X :0 oder besser startx aufrufen lassen.
Bei X :0 erscheint, wenn alles klappt einfach nur ein grauer Bildschirm und auf der Konsole von der wir das Kommando aufgerufen haben sehen wir entsprechenden Ausgaben des X-Servers.
Nach dem Wechsel auf die Konsole, von der wir das Kommando gestartet haben, kann das X durch die Tastenkombination <Strg><c> beendet werden.
Sollte der Start nicht gelingen, so können wir auf der Konsole die Fehlermeldungen auswerten.
Bei startx wird nach dem X auch der (hoffentlich installierte) Window-Manager (z.B. blackbox, XFce, KDE ...) aufgerufen und man kann das System nutzen.
Natürlich laufen unsere Textkonsolen weiter und ein Wechsel ist immer möglich.
Wie ich nachher noch erkläre, sind auch mehrere X-Window-Konsolen möglich.
Der Wechsel zwischen den einzelnen Konsolen wird mit speziellen Tastenkombinationen erreicht.
Dazu eine kurze Übersicht.
Der xdm (X-Display-Manager) ist zum starten des X-Windows nicht unbedingt notwendig, denn jeder User kann (wenn er darf) von einer Konsole aus mit startx ein X-Windows starten.
Der xdm macht die Sache aber etwas komfortabler und ermöglicht den Fernzugriff über ein X-Terminal.
Das ist sehr bequem und effizient, wenn man längere (Konfigurations)Arbeiten am Libretto zu Hause vor hat.
Die kleine Tastatur und der winzige Bildschirm sind dann auf Dauer sehr ermüdend.
Auch hier haben wir wieder ein Startscript /etc/rc.d/rc.xdm und verschiedene Konfigurationsdateien im Verzeichnis /etc/X11/xdm .
Das Startscript ist sehr einfach gehalten und sorgt eigentlich nur für den Start und das Beenden des xdm.
| Inhalt der Datei rc.xdm |
|---|
#!/bin/sh
case $1 in
start)
/usr/X11/bin/xdm
;;
stop)
killall xdm
;;
restart)
$0 stop && $0 start
;;
status)
if [ -e /var/run/xdm.pid ]; then
if ps ax | grep "^`cat /var/run/xdm.pid`.*xdm$" 2>&1 > /dev/null ; then
echo "XDM laeuft mit der PID$( cat /var/run/xdm.pid)"
else
echo "XDM laeuft nicht"
rm /var/run/xdm.pid
fi
fi
;;
*)
echo "Benutze /etc/rc.d/rc.xdm start|stop|restart|status"
;;
esac
|
| >>>Download rc.xdm |
Wird der xdm nun mit /etc/rc.d/rc.xdm start gestartet, dann startet dieser den X-Windows-Server auf der 7.Konsole und erzeugt standardmäßig einen Login-Bildschirm an den man sich mit seinem Linux-Login anmelden kann.
Nun wollen wir noch den Fernzugriff auf das X-System einstellen. Dazu müssen wir zwei Dateien im Konfigurationsverzeichnis /etc/X11/xdm ändern.
Nun probieren wir das aus. Von einer Textkonsole aus starten wir den neu konfigurierten xdm mit /etc/rc.d/rc.xdm restart neu.
Das X-Windows auf dem Libretto wird geschlossen und erschein mit dem X-Login nach einiger Zeit neu.
Nun können wir den Zugriff von einem entfernten (LinuX)Rechner mit installiertem X aus probieren.
Dazu geben wir an dem entfernten Rechner (Netwerkkontakt mit dem Libretto vorausgesetzt) auf einer Textkonsole folgendes Kommando ein (als root)
X -query LibrettoIP :1
Für LibrettoIP muss natürlich die IP des Librettos eingetragen werden. Wenn alles klappt, sehen wir nach kurzer Zeit auf unserem entfernten Rechner das gleiche Login-Fenster wie auf dem Libretto.
Wir können uns damit ganz normal auf dem Libretto anmelden und arbeiten jetzt aus der Ferne direkt auf dem Libretto.
Durch das Netz werden alle Tastatur, Maus und Bildschirmaktionen übertragen.
Das :1 bedeutet, dass das X auf der 8 Konsole gestartet wird.
Damit können wir auch mehrere X-Konsolen auf einem Rechner starten, die alle entweder auf den Rechner lokal zugreifen oder unterschiedliche Rechner über Fernzugriff kontaktieren.
Ohne weitere Konfiguration können damit insgesamt 6 X-Terminals gestartet werden.
Alle X Konsolen laufen gleichzeitig und man kann zwischen ihnen wechseln. Das & am Ende des Befehls bewirkt, das das Kommando in den Hintergrund geschickt wird und die startende Textkonsole nicht blockiert wird. Es bleiben nur die Ausgaben des X Startes übrig. Wenn man auf der startenden Textkonsole einfach <Enter> drückt erscheint der Systemprompt wieder und man kann das nächste Kommando eingeben.
In Arbeit. Siehe die alte Beschreibung für die Slackware 8.1.
Hilfsscripte
Da ich den Libretto häufig in verschiedenen Netzen betreibe, besteht oft das Problem der Anpassung an die Netzwerkumgebung.
Wenn in den Netzen DHCP verfügbar ist, erhält der Rechner automatisch seine IP zugewiesen.
Ansonsten vergibt das Startscript der Ethernetkarte eine feste IP in der Hoffnung, dass alles gut geht.
Bleibt noch die Konfiguration des Internetzugangs.
Dazu habe ich mir dieses Script geschrieben, dass direkt in die Startdatei für die Ethernetkarte eingebunden wird.
Dieses Script geht nach folgender Strategie vor:
Als TESTURL verwende ich das PHP-Script zur Zeiteinstellung auf meiner Webseite. Diesem hänge ich noch einen Zufallswert als Parameter an, damit die Proxys gezwungen sind, die Testseite neu zu laden und nicht einfach den Inhalt ihres Caches wiedergeben. Damit wird die Messung der Zugriffszeit durch das Scriptes auch aussagekräftig.
| Inhalt der Datei rc.proxy_suche |
|---|
#!/bin/sh
# Frank Schlaefendorf <frank@schlaefendorf.de>
# erstellt am 12.02.2005
# letzte Aenderung am 27.02.2005
#
# nach welchen proxports soll gesucht werden?
PORTLISTE="3128,8080"
# wieviele sekunden soll maximal auf eine webseite gewartet werden?
ZEITGRENZE=15
# wo befindet sich die proxydatenbank?
PROXYDB="/etc/proxydb"
# mit welcher url soll der internettest durchgefuehrt werden?
TESTURL="http://www.schlaefendorf.de/datum.php4?zufall=$$"
# ist die dateigroesse der testseite bekannt? wenn ja, geben sie die
# groesse in bytes ein, damit die seite genau identifiziert werden kann
# und nicht faelschlicher weise statusseite des proxys als antwort
# gewertet werden.
# wenn die groesse unbekannt ist, leer lassen
# die datumantwort besteht immer aus 15 bytes
TESTURLLEN=15
# wo soll die testseite abgelegt werden
TESTSEITE="/tmp/testseite"
# systemproxy eintrag
SYSTEMPROXY="/etc/HTTP-PROXY"
#
DEVICE=$1
# vordefinierte werte
FOUNDPROXYADDR=""
FOUNDPROXYTIME=3600
IPADDR=""
BROADCAST=""
NETMASK=""
NETADDR=""
HWADDR=""
HOSTNAME=""
DOMAIN=""
NETMASK2=""
# die netzmaske wird von der schreibweise ***.***.***.***
# in die Notation /XX umgewandelt
conv_netmask(){
NETMASKE=0
for nummer in `echo $1 | tr '.' ' '`
do
for wert in 128 64 32 16 8 4 2 1
do
if [ "$nummer" -ge "$wert" ]; then
let "NETMASKE=NETMASKE+1"
let "nummer=nummer-wert"
else
break
fi
done
if [ "$nummer" -ne "0" ]; then
NETMASKE=""
break
fi
done
return $NETMASKE
}
# die proxydatenliste wird neu sortiert
proxydb_reorganisieren(){
# existiert die proxydatenbank?
if [ -e ${PROXYDB} ]; then
sort -d -u -f +0 -7 ${PROXYDB} -o ${PROXYDB}.tmp
mv ${PROXYDB}.tmp ${PROXYDB}
fi
}
# testet die erreichbarkeit der seite $2 ueber den proxy $1
url_test(){
http_proxy=$1
TESTURL=$2
TIMEFILE=${TESTSEITE}.time
# proxy in die lynx umgebungsvariable eintragen
export http_proxy
# eventuell vorhandene testseite loeschen
if [ -e ${TESTSEITE} ]; then
rm ${TESTSEITE}
fi
# eventuell vorhandenen zeitstempel loeschen
if [ -e ${TESTSEITE}.time ]; then
rm ${TESTSEITE}.time
fi
# seite laden und notwendige zeit messen
# lynx starten und in den hintergrund schicken
# die testseite steht in $TESTSEITE und die zugriffszeiten in $TIMEFILE
(time lynx -source ${TESTURL} 2> /dev/null 1> ${TESTSEITE}) 2> ${TIMEFILE} 1> /dev/null &
ZEITGEBER=$ZEITGRENZE
TIME=""
# zeitgeber bis 0 herunterzaehlen
while [ "$ZEITGEBER" -gt 0 ]
do
let "ZEITGEBER=ZEITGEBER-1"
# ist lynx fertig?
if [ -s ${TIMEFILE} ]; then
sleep 1
# zeit auslesen
TIME=`cat ${TIMEFILE}`
rm ${TIMEFILE}
break
else
sleep 1
fi
done
# hat die testseite mindestens ein zeichen und wurde eine antwortzeit gemessen?
if [ -s ${TESTSEITE} -a "$TIME" != "" ]; then
ACCEPT=1
if [ "$TESTURLLEN" != "" ]; then
if [ "$( ls -l ${TESTSEITE} | cut -c40-42 )" != " ${TESTURLLEN}" ]; then
ACCEPT=0
fi
fi
if [ "$ACCEPT" == "1" ]; then
# realzeit auslesen
TIME=`echo $TIME | egrep -o -e "real [0-9]{0,2}[h]{0,1}[0-9]{0,2}[m]{0,1}[0-9]{1,2}\.[0-9]{1,4}s" `
# die einzelnen zeitangaben auslesen und in millisekunden umrechnen
STUNDEN=`echo $TIME | egrep -o -e "[0-9]{1,2}[h]{1}"`
if [ "$STUNDEN" == "" ]; then
STUNDEN=0
else
STUNDEN=`echo $STUNDEN | cut -dh -f1`
fi
MINUTEN=`echo $TIME | egrep -o -e "[0-9]{1,2}[m]{1}"`
if [ "$MINUTEN" == "" ]; then
MINUTEN=0
else
MINUTEN=`echo $MINUTEN | cut -dm -f1`
fi
VSEKUNDEN=`echo $TIME | egrep -o -e "[0-9]{1,2}\.[0-9]{1,4}s" | cut -ds -f1`
if [ "$VSEKUNDEN" == "" ]; then
SEKUNDEN=0
MSEKUNDEN=0
else
SEKUNDEN=`echo $VSEKUNDEN | cut -d. -f1`
MSEKUNDEN=`echo $VSEKUNDEN | cut -d. -f2`
fi
# echo "${STUNDEN}h ${MINUTEN}m ${SEKUNDEN}s ${MSEKUNDEN}ms"
let "ZEIT=STUNDEN*3600+MINUTEN*60+SEKUNDEN"
if [ "$ZEIT" != "0" ]; then
ZEIT="${ZEIT}${MSEKUNDEN}"
else
ZEIT=${MSEKUNDEN}
fi
else
ZEIT=""
fi
else
# lynx hat wahrscheinlich keinen kontakt und laeuft noch
# killen des hintergrundprozesses lynx, falls dieser sich nicht beendet hat
# eventuell anderes kommando !!!!!
kill -9 %1
# zeit=="" -> kein kontakt
ZEIT=""
fi
# ZEIT enthaelt die ladezeit von lynx in millisekunden
echo $ZEIT
}
#ermittelt die netzwrkdaten des devices
scanne_device(){
DEVICE=$1
if [ "$DEVICE" != "" ]; then
IFCONFIG=`ifconfig $DEVICE 2> /dev/null `
if [ "$?" == "0" ]; then
# das device ist initialisiert
IPADDR=`echo $IFCONFIG | egrep -o -e "inet addr:[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}" | cut -d: -f2`
if [ "$IPADDR" != "" ];then
BROADCAST=`echo $IFCONFIG | egrep -o -e "Bcast:[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}" | cut -d: -f2`
NETMASK=`echo $IFCONFIG | egrep -o -e "Mask:[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}" |cut -d: -f2`
HWADDR=`echo $IFCONFIG | egrep -o -e "HWaddr [0-9a-fA-F]{2}:[0-9a-fA-F]{2}:[0-9a-fA-F]{2}:[0-9a-fA-F]{2}:[0-9a-fA-F]{2}:[0-9a-fA-F]{2}" | cut -d' ' -f2 `
NETADDR=`/bin/ipmask $NETMASK $IPADDR | cut -d ' ' -f2 `
HOSTNAME=`host -W3 ${IPADDR} | cut -d' ' -f5`
DOMAIN=`echo $HOSTNAME | cut -s -d. -f2-`
if [ "$DOMAIN" == "" ]; then
DOMAIN=none
fi
conv_netmask $NETMASK
NETMASK2=$?
return 0
else
return 1
fi
else
# das device existiert nicht
IPADDR=""
BROADCAST=""
NETMASK=""
HWADDR=""
NETADDR=""
HOSTNAME=""
DOMAIN=""
NETMASK2=""
return 1
fi
else
return 2
fi
}
# ueber das device wird ein verfuegbarer http proxy gesucht
suche_proxy(){
if [ "$IPADDR" != "" ]; then
FOUNDPROXYADDR=""
FOUNDPROXYTIME=3600
echo "Es werden am Device $DEVICE die Ports ${PORTLISTE} gescannt."
HOSTLISTE=`nmap -sS -p T:${PORTLISTE} -n -e $DEVICE ${NETADDR}/${NETMASK2} | tr ' ' '_'`
# echo $HOSTLISTE
HOST=""
PROXYLISTE=""
#einlesen der hostliste von nmap
for eintrag in $HOSTLISTE
do
# echo $eintrag
# suche nach einer zeile Interesting_ports_on_IP
HOSTIP=`echo $eintrag | egrep -o -e "Interesting_ports_on_[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}:"`
if [ "$HOSTIP" != "" ]; then
# eintragen der ip des hostes in FOUNDHOSTIP
FOUNDHOSTIP=`echo $HOSTIP | egrep -o -e "[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}:"`
echo "Der Host $FOUNDHOSTIP ist aktiv"
else
# enthaelt die folgezeile einen tcp open eintrag?
PORTZEILE=`echo $eintrag | egrep -o -e "[0-9]{1,6}/tcp_open[_]{1,5}[0-9a-zA-Z\-]{1,10}"`
if [ "$PORTZEILE" != "" ]; then
# auslesen der portnummer
PORT=`echo $PORTZEILE | cut -d/ -f1 `
# auslesen des portnamen
NAME=`echo $PORTZEILE | cut -d_ -f4 `
ZEIT=`url_test "http://${FOUNDHOSTIP}${PORT}" $TESTURL`
if [ "$ZEIT" != "" ]; then
echo " Es wird der Proxyservice $NAME mit einer Antwortzeit von ${ZEIT}ms angeboten"
# eintrag des Rechners in die proxydatenbank
echo "${HWADDR} ${DOMAIN} ${NETMASK} ${NETADDR} ${NETMASK2} ${IPADDR} ${FOUNDHOSTIP}$PORT ${NAME} ${ZEIT} " >> ${PROXYDB}
if [ "$ZEIT" -lt "$FOUNDPROXYTIME" ]; then
FOUNDPROXYADDR=${FOUNDHOSTIP}${PORT}
FOUNDPROXYTIME=$ZEIT
fi
else
echo " Es wird der Proxyservice $NAME mit zu grosser Antwortzeit angeboten"
fi
rm ${TESTSEITE}
fi
fi
done
proxydb_reorganisieren
return 0
else
return 1
fi
}
suche_proxy_in_db(){
# wurde das device schon gescannt?
if [ "$IPADDR" != "" ]; then
ZEIT=""
# verfuegbare proxylisteneintraege auslesen
if [ -e $PROXYDB ]; then
LISTE=`cat $PROXYDB | grep "${HWADDR} ${DOMAIN} ${NETMASK} ${NETADDR} " | sort +8n | tr ' ' ';'`
# echo $LISTE
for eintrag in ${LISTE}
do
# echo "eintrag=${eintrag}"
# proxyadresse heraustrennen
PROXY=`echo $eintrag | cut -d';' -f7`
# echo "proxy=${PROXY}"
# proxykontakt testen
ZEIT=`url_test "http://${PROXY}" $TESTURL 2> /dev/null`
# konnte die testurl gelesen werden?
if [ "$ZEIT" != "" ]; then
# echo "KONTAKT OK"
FOUNDPROXYADDR=$PROXY
FOUNDPROXYTIME=$ZEIT
break
fi
done
if [ "$ZEIT" != "" ]; then
# es wurde ein passender proxy in der db gefunden
return 0
else
# es wurde kein passender proxy in der db gefunden
return 2
fi
else
# es exitiert noch keine datenbank
return 3
fi
else
# das device wurde noch nicht gescannt
return 1
fi
}
# eintragen des proxys in die systemdatei
save_proxy(){
echo "${FOUNDPROXYADDR} ${FOUNDPROXYTIME}"
echo "http://${FOUNDPROXYADDR}" > ${SYSTEMPROXY}
}
echo "Scanne Device $DEVICE"
scanne_device $DEVICE
case $? in
0)
ZEIT=`url_test "$http_proxy" $TESTURL`
ZEIT=""
if [ "$ZEIT" != "" ]; then
echo "Die aktuelle Proxyeinstellung ist ausreichend."
echo "Die Testseite $TESTURL wurde in ${ZEIT}ms geladen"
else
echo "IP=${IPADDR}/${NETMASK}"
echo "IP=${IPADDR}/${NETMASK2}"
echo "BROADCAST=${BROADCAST}"
echo "NETZADRESSE=${NETADDR}"
echo "HWADRESSE=${HWADDR}"
echo "HOSTNAME=${HOSTNAME}"
echo "DOMAIN=${DOMAIN}"
echo "Suche in der Datenbank nach einem passenden Proxy"
suche_proxy_in_db
case $? in
0)
echo "Treffer"
save_proxy
exit 0
;;
1)
echo "Das Device $DEVICE ist nicht aktiv"
exit 2
;;
2)
echo "Die Datenbank enthaelt keinen passenden Eintrag"
echo "Scanne das Netz"
suche_proxy
case $? in
0)
echo -n "Treffer"
save_proxy
exit 0
;;
*)
echo "Es wurde leider kein Proxyzugang gefunden!"
exit 3
;;
esac
;;
3)
echo "Es existiert keine Proxydatenbank"
echo "Scanne das Netz"
suche_proxy
case $? in
0)
echo -n "Treffer"
save_proxy
exit 0
;;
*)
echo "Es wurde leider kein Proxyzugang gefunden!"
exit 3
;;
esac
;;
esac
fi
;;
1)
echo "Das Device $DEVICE ist nicht aktiv"
exit 1
;;
2)
echo "Sie haben kein Device angegeben"
exit 2
;;
esac
# returncodes
# 0 proxy gefunden und eingetragen
# 1 das device ist nicht aktiv
# 2 es wurde kein device angegeben
# 3 kein proxy gefunden
|
| >>>Download rc.proxy_suche |
Das Script wird aufgerufen mit /etc/rc.d/rc.proxy_such DEVICENAME, also z.B. /etc/rc.d/rc.proxy_such eth0.
SoftwareDer dillo-Browser ist ein kleiner, schlanker Browser. Er ist für den Libretto wie geschaffen, da er äußerst genügsam ist. Ab heute (02.05.2006) ist die Version 0.8.6 verfügbar. Nach dem Download des 432kByte großen tar.bz2-Sourcefiles von der dillo-Download-Seite gestaltet sich die Kompilierung als einfach. Wer will, kann für die Slackware auch ein vorkompiliertes tgz-Archiv installieren. Außerdem werden auch download-Links für Debian und NETBSD angeboten. Hier nun eine kurze Installationsbeschreibung für das Sourcenpaket auf dem Libretto:
Für die Konfiguration des dillo-Browsers sind die folgenden Dateien am wichtigsten:
Wenn der User eigene Einstellungen definieren möchte, muss er sich in seinem HOME-Verzeichnis ein entsprechendes Unterverzeichnis anlegen und die systemweite dillorc dort hineinkopieren. Das erreicht man folgendermaßen:
Hier mal ein Abzug meiner dillorc
| Inhalt der Datei dillorc |
|---|
# dillorc
# Sample dillo initialization file.
# Copy this file to ~/.dillo/dillorc and edit to your taste.
# Lines that start with a '#' are comments.
#-------------------------------------------------------------------------
# FIRST SECTION :)
#-------------------------------------------------------------------------
# Set the desired initial browser size
geometry=640x440
# Dicache is where the Decompressed Images are cached (not the original ones).
# If you have a lot of memory and a slow CPU, use YES, otherwise use NO
use_dicache=YES
#-------------------------------------------------------------------------
# RENDERING SECTION
#-------------------------------------------------------------------------
# Fontname for variable width rendering (most of the text).
# - some fonts may slow down rendering, some others not!
# - try to tune a fontname/font_factor combination.
# Ex. {helvetica, lucida, times, "new century schoolbook", utopia, ...}
vw_fontname=helvetica
# Fontname for fixed width rendering (mainly <pre> quoted text)
fw_fontname=courier
# All fontsizes are scaled by this value (default is 1.0)
#font_factor=1.2
# If you prefer oblique over italic fonts, uncoment next line
#use_oblique=YES
# Show tooltip popup for images?
# Note: We use the "title" attribute and not "alt".
# More info at: http://bugzilla.mozilla.org/show_bug.cgi?id=25537
show_tooltip=YES
# Set this to YES, if you want to limit the word wrap width to the vieport
# width (may be useful for iPAQ)
limit_text_width=NO
#-------------------------------------------------------------------------
# PARSING SECTION
#-------------------------------------------------------------------------
# If you prefer more accurate HTML bug diagnose, over better rendering
# (page authors and webmasters) set the following to "NO".
#
w3c_plus_heuristics=YES
#-------------------------------------------------------------------------
# NETWORK SECTION
#-------------------------------------------------------------------------
# Set the start page.
# Uncomment if you want to override the default start page.
#start_page="file:/home/user/custom.html"
# Set the home location
home="http://www.dillo.org/"
# Set search url to use with the search dialog.
# %s is replaced with urlencoded keywords, and %% by '%'.
search_url="http://www.google.de/search?q=%s"
#search_url="http://search.lycos.com/default.asp?query=%s"
#search_url="http://www.alltheweb.com/search?cat=web&query=%s"
# Set the proxy information for http
#http_proxy=http://localhost:8080/
http_proxy=http://192.168.1.1:3128
# if you need to provide a user/password pair for the proxy,
# set the proxy user name here and Dillo will ask for the password later.
#http_proxyuser="joe"
# When using a proxy, this sets the domains to access without proxy.
# (separated with a single space -- see examples below)
#no_proxy = ".mynet.com"
#no_proxy = ".mynet.com .other.net .foo.bar.org"
#-------------------------------------------------------------------------
# COLORS SECTION
#-------------------------------------------------------------------------
# Here we can use the HTML (standard and extended) or C syntax.
# Set the background color
# bg_color=gray
# bg_color=0xd6d6c0
bg_color=0xdcd1ba
# Set the text color
text_color=black
# Set the link color
link_color=blue
# If your eyes suffer with white backgrounds, or you have headaches after
# lengthy computer sessions, and you don't need high contrast to see sharply,
# uncomment next line (it'll use 'bg_color' instead). -- It works!
#allow_white_bg=NO
# Use the same colors with all documents?
force_my_colors=NO
# When set to YES, visited links will always have a contrasting color,
# independent of the page author's setting.
contrast_visited_color=YES
#-------------------------------------------------------------------------
# USER INTERFACE SECTION
#-------------------------------------------------------------------------
# Size of dillo panel (used to enlarge the browsing area)
# tiny : recommended for iPAQ (with small_icons)
# small : very nice! (it's "medium" without icon titles)
# medium : nice!
# large : Traditional
panel_size=tiny
small_icons=YES
# Here you can choose to hide some widgets of the dillo panel...
#show_back=NO
#show_forw=NO
#show_home=NO
#show_reload=NO
#show_save=NO
#show_stop=NO
#show_bookmarks=NO
#show_menubar=NO
#show_clear_url=NO
#show_url=NO
#show_search=NO
#show_progress_box=NO
# Start dillo windows with a hidden panel?
fullwindow_start=NO
# Enabling this will restrain OpenUrl and FindText, but may be required
# for the ION window manager.
transient_dialogs=NO
# When filling forms, our default behaviour is to submit on enterpress,
# but only when there's a single text entry (to avoid incomplete submits).
# OTOH, if you have to fill the same form lots of times, you may find
# useful to keep away from the mouse by forcing enter to submit.
enterpress_forces_submit=NO
# Some forms lack a submit button, and dillo can generate a custom one
# internally. Unfortunately there's no guarantee for it to work. :(
# (my experience is that forms that lack a submit rely on Javascript)
generate_submit=NO
#-------------------------------------------------------------------------
# DEBUG MESSAGES SECTION
#-------------------------------------------------------------------------
# Generic messsages (mainly for debugging specific parts)
# Uncomment the following line to disable them.
#show_msg=NO
# Soon we'll add the "show_debug_messages=NO" option...
#-------------------------------------------------------------------------
# HTML BUG MESSAGES SECTION
#-------------------------------------------------------------------------
# Accepted by the W3C validator but "strongly discouraged" by the SPEC.
# (As "TAB character inside <PRE>").
#show_extra_warnings=YES
# -----------------------------------------------------------------------
# dillorc ends here.
|
| >>>Download dillorc |
Bestimmte Einschränkungen muss man bei der Arbeit mit dillo leider hinnehmen. Er ist zwar schnell, klein und sehr ressourcenschonend, aber er unterstützt zB. keine Frames.

Solid-State-Disk
Vor ein paar Tagen schoss es mir plötzlich durch den Kopf, dass der IDE-Anschluss ja extrem im Aussterben begriffen ist und entsprechende Platten bald entweder überhaupt nicht mehr zu bekommen sind oder nur noch Schrottwert besitzen und wenn nicht, mit Gold aufgewogen werden.
Da ich vor langer Zeit meinen Libretto mal etwas hart aufsetzte, hatte die Festplatte seit dem einige defekte Sektoren auf der Hibernations-Partition am Ende der Platte.
Dem wollte ich nun zu Leibe rücken.
Um das Problem generell zu lösen, entschloss ich mich für eine SSD, die folgende Mindestanforderungen erfüllen sollte:
Schaut man sich auf dem Markt um, so wird das Angebot an lieferbaren 2,5"-IDE-SSDs schon sehr dünn.
Meine Wahl fiel letztendlich auf die TS4GIFD25 von Transcend mit ausreichenden 4GB Speichervolumen.
Diese SSD erfüllt alle Bedingungen ausreichend und ist von der Datenrate schneller als der interne Bus des Libretto :-).
Zur Installation habe ich die Platte in einen anderen Laptop eingehängt und mit der Installations-CD der Slackware 9.1 partitioniert und formatiert.
Ein Update auf Slackware 12.2 wollte ich nicht dürchführen, da ich sonst alle Anpassungen an die Libretto-Hardware erneut händisch durchführen müsste und dazu hatte ich weder Zeit noch Lust.
Mittels tar habe ich das Dateisystem auf dem Libretto gepackt, per Netz übertragen und auf dem anderen Laptop auf der SSD wieder abgelegt.
Fehlt nur noch Lilo. Also Laptop mit der SSD neu gebootet und von der Install-CD starten lassen.
Am boot-Prompt habe ich dann mit
bare.i root=/dev/hda3 noinitrd ro
das System auf der SSD mit dem bare-Kernel der Install-CD gestartet und lilo ausgeführt.
Nun musste die SSD nur noch in den Libretto eingebaut werden, fertig, läuft.
Den Libretto umgibt jetzt im Betrieb eine angenehme Totenstille, einfach toll.
Nebenbei verbraucht die SSD ca 600mA weniger Strom als die vorher verbaute IDE-Festplatte und so dürften die Akkus wesentlich länger halten.
Fazit
Ich nutze den Libretto nun schon viele Jahre.
Er befindet sich in meinem Service-Koffer, der alle nötigen Dinge für den Vorort-Service enthält.
Das System läuft extrem stabil und durch die Benutzung des Hibernations-Modus musste ich das Gerät auch über Jahre hinweg nicht neu booten.
Als ich die SSD eingebaut habe, musste ich den Libretto mal neu starten, vorher lief er fast 2 Jahre ohne Neuboot.
Mit der Zeit macht sich jedoch immer mehr das Fehlen eines USB-Anschlusses bemerkbar.
Für den Zugriff über die ssh oder als serielles Terminal oder das Einspielen von Updates auf anderen Rechnern ist er immer noch meine erste Wahl, da er wegen seiner geringen Größe problemlos im Koffer Platz findet.
Das schafft kein anderes Gerät.
Linkliste
Hinweis
Diese Seite ist nicht vollständig und wird es wohl auch nie werden, denn LinuX bietet viele Möglichkeiten :-).
Die vorgestellte Installationsanleitung erhebt deshalb keinen Anspruch auf Vollständigkeit sondern soll als Anregung, Hilfe und Unterstützung dienen.
Alle hier beschriebenen Schritte beziehen sich auf den Toshiba Libretto 50CT und die Slackware 9.1 (Kernel 2.4.22) und wurden von mir auf einem solchen Gerät getestet.
Trotzdem können sich natürlich Fehler eingeschlichen haben.
Sollten Sie einen solchen Fehler feststellen oder einen Verbesserungsvorschlag haben, so bitte ich um eine kurze email.
Für Beschädigungen oder Datenverluste die durch diese Installation oder die downloadbaren Scripte und Softwarepakete entstanden sind, kann keine Haftung übernommen werden.
Die Lizenzbestimmungen (GPL) der Softwarepakete sind durch den Anwender zu beachten.
Meine Scripte stelle ich zur freien Verfügung. Sie dürfen heruntergeladen, kopiert und verändert werden, wenn der Hinweis auf die ursprüngliche Urheberschaft im Dokumentenkopf erhalten bleibt.
|
Sollte jemand seine Rechte durch eine Veröffentlichung auf dieser oder einer anderen meiner Seiten verletzt sehen, bitte ich um sofortige Kontaktaufnahme.
Ich werde die entsprechenden Inhalte umgehend entfernen.
Somit sind sowohl ein anwaltlicher Rat als auch eine kostenpflichtige Abmahnung nicht erforderlich!
Weiterhin weise ich darauf hin, dass der Inhalt verlinkter Seiten nicht in meiner redaktionellen Verantwortung liegt. |
www.schlaefendorf.de 2011