Next Previous Contents

## 5. Das System

## 5.1 Konsole

Die Konsole ist die Tastatur und der Bildschirm eines Linux-Systems; in der Regel also der VGA-Monitor plus Tastatur.

Linux täuscht den Programmen mehr als eine Konsole vor und der Benutzer kann dann mittels Tastenkombination <Alt-Ctrl-F1> - <Alt-Ctrl-F8> zwischen diesen hin- und herblenden. Die vorgetäuschten Konsolen nennt man virtuelle Konsolen.

> `

>       |¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯|                             |¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯|
>       |  Escape the     |<--  setfont    loadkeys  -->|^1234567890ß  123 |
>       |  Gates of hell. |                             | qwertzuiopü+ 567 |
>       |                 |=======+             +=======| asdfghjklöä# 789 |
>       |  Use Linux.     |       |             |       | <yxcvbnm,.  0,  |
>       |                 |       |             |       |__________________|
>       |_________________|       |             |
>               MMM               |             |
>            MMMMMMMMM            |             |             +---<---< Internet
>                                 |             |             |
>                         +-------*-------------*------+      |
>                         |        \           /       |      |      X11 ------+
>                         |         \         /        |      |       |        |
>                         |  Betriebssystemkern Linux  |   telnetd  xterm      |
>       Alt+Ctrl F1F8 ----------------/ <>           |       \\   ///        |
>       als Schalter      |           /                |        \\ ///         |
>                         |     /    |          \      +-------+· · ·+-------+ |
>                         |    /     |           \     | ptyp1 |     | ptyef | |
>                         |······+······+ · · · +······+·······+ · · +·······| |
>                         | tty0 | tty1 | . . . | tty8 | ttyp1 | · · | ttyef | |
>                         +------+------+ - - - +------+-------+ - - +-------+ |
>                           |      |              ^              |             |
>                        bash      emacs          |              less          |
>                                                 |                            |
>                                                  `---------------------------'

> `

Die nachfolgend beschriebenen Einstellungen betreffen alle virtuellen Konsolen gleichzeitig. Welches die "richtige" Datei für die Kommandos ist, darüber kann nur das Handbuch der eigenen Distribution Auskunft geben. (Tip: das Configuration HOWTO kann in vielen Fällen helfen.)

Weiterführende Literatur: Keystroke-HOWTO (engl.).

Es ist unter Linux übrigens nicht notwendig, die virtuellen Bildschirme mit dem Befehl `stty pass8' in den 8-bit Modus zu schalten - das sind sie nämlich von Hause aus.

### Tastenbelegung der Textkonsolen

Für die unterschiedlichen Tastaturen der verschiedenen Länder liegen im Verzeichnis `/usr/lib/kbd/keytables' vorgefertigte Konfigurationsdateien. Mit dem Kommando `loadkeys' kann man eine solche Datei in den Linux-Kernel laden und dadurch den Tasten bestimmte Zeichen zuordnen.

Um Mißverständnissen vorzubeugen: man ordnet den Tasten keine Bedeutungen zu, sondern nur bestimmte Zeichen. Dadurch ist sichergestellt, daß die Tastatur auch beim Arbeiten mit entfernten Rechnern funktioniert, denn Zeichen kann man über jede Art von Netzwerkverbindung übertragen. Dagegen wäre eine direkte Abfrage der Tastatur-Hardware (so wie unter DOS) über ein Netzwerk nicht möglich - es ist ein Widerspruch in sich.

Die Bedeutung eines Zeichens (und damit einer Taste) kann von Programm zu Programm leicht unterschiedlich sein und die Kunst liegt in der effektiven, bzw. komfortablen Konfiguration der Bedeutung. Die länderspezifischen Aspekte werden im kommenden Kapitel behandelt.

### Deutschland

Im einfachsten Falle werden Benutzer einer deutschen Tastatur mit der Belegung `de-latin1-nodeadkeys.map' zufrieden sein:

Beispiel:

> `

>     loadkeys   de-latin1-nodeadkeys.map

> `

### Schweiz

Geeignete Tastenbelegungen für die Schweiz sind `sf-latin1.map' (swiss-french) und `sg-latin1.map' (swiss-german).

In der Deutschschweiz gibt es 2 verschiedene Tastaturlayouts, bei denen wenige Tasten verschieden beschriftet sind (eckige Klammern, @-Zeichen an verschiedenen Orten).

### Östereich

?

### Länderübergreifende Einstellungen

Die Tastaturtabellen sind Textdateien, die sich mit dem persönlichen Lieblingseditor bearbeiten lassen. Um z.B. die französischen Anführungszeichen auf <AltGr .> und <AltGr -> zu legen, ergänzt man an den entsprechenden Stellen:

> `

>     keycode 51 = comma semicolon guillemotright
>     keycode 52 = period colon guillemotleft

>     control keycode 105 = Meta_b
>     control keycode 106 = Meta_f

> `

Die letzten beiden Einträge ermöglichen wortweises Springen auf der Kommandozeile mit Strg-Cursortaste. Als Anregung für eigene Ergänzungen hier eine Tabelle mit allen (?) symbolischen Namen:

> `

>     "  quotedbl     '  apostrophe   `  grave        ~  asciitilde
>     ^  asciicircum  _  underscore   !  exclam       ?  question
>     #  numbersign   $  dollar       %  percent      &  ampersand
>     |  bar          @  at           +  plus         -  minus
>     *  asterisk     /  slash        \  backslash    .  period
>     ,  comma        :  colon        ;  semicolon    <  less
>     =  equal        >  greater      (  parenleft    )  parenright
>     [  bracketleft  ]  bracketright {  braceleft    }  braceright

>     ¡  exclamdown   ¢  cent         £  sterling     ¤  currency
>     ¥  yen          ¦  brokenbar    §  section      "  diaeresis
>     ©  copyright    ª  ordfeminine  <  guillemotleft
>     ¬  notsign        hyphen       ®  registered
>     ¯  macron       °  degree       ±  plusminus    ²  twosuperior
>     ³  threesuperior                ´  acute        µ  mu
>     ¶  paragraph    ·  periodcentered               ¸  cedilla
>     ¹  onesuperior  º  masculine    >  guillemotright
>     ¼  onequarter   ½  onehalf      ¾  threequarters
>     ¿  questiondown À  Agrave       Á  Aacute       Â  Acircumflex
>     Ã  Atilde       Ä  Adiaeresis   °A  Aring        Æ  AE
>     Ç  Ccedilla     È  Egrave       É  Eacute       ^E  Ecircumflex
>     Ë  Ediaeresis   Ì  Igrave       Í  Iacute       Î  Icircumflex
>     Ï  Idiaeresis   Ð  ETH          Ñ  Ntilde       Ò  Ograve
>     Ó  Oacute       Ô  Ocircumflex  Õ  Otilde       Ö  Odiaeresis
>     ×  multiply     Ø  Ooblique     Ù  Ugrave       Ú  Uacute
>     ^U  Ucircumflex  Ü  Udiaeresis   Ý  Yacute       |O  THORN
>     ß  ssharp       à  agrave       á  aacute       â  acircumflex
>     ã  atilde       ä  adiaeresis   å  aring        æ  ae
>     ç  ccedilla     è  egrave       é  eacute       ê  ecircumflex
>     ë  ediaeresis   ì  igrave       í  iacute       î  icircumflex
>     ï  idiaeresis   xo  eth          ñ  ntild        ò  ograve
>     ó  oacute       ô  ocircumflex  õ  otilde       ö  odiaeresis
>     ÷  division     ø  oslash       ù  ugrave       ú  uacute
>     û  ucircumflex  ü  udiaeresis   ý  yacute       |o  thorn
>     "y  ydiaeresis

>     nul     Tab     Escape  space   BackSpace
>     Insert  Remove  Home    End     PageUp
>     Down    Left    Right   Up      PageDown
>     Macro   Help    Do      Pause   Linefeed

> `

[Die Tabelle nicht ganz korrekt, da einige Zeichen vom Formatierungswerkzeug nicht verarbeitet werden. Wir arbeiten daran.]

Die keytables(5), die dumpkeys(1) und loadkeys(1) Manpages erläutern welche Symbole gültig sind, insbesondere

> `

>     dumpkeys --long-info

> `

erzeugt eine Liste aller bekannten Zeichennamen und Modifier.

### Deadkeys

Mit Deadkey wird eine Taste bezeichnet, bei deren Betätigung das Zeichen zunächst zurückgehalten wird. Das nachfolgend eingegebene Zeichen wird quasi über das zuerst eingegeben Zeichen gedruckt, falls die Kombination Sinn ergibt. Ansonsten werden beide Zeichen nacheinander ausgegeben.

Beispiel: ist die Tilde als Deadkey konfiguriert, so ergibt <~> <a> ein ã (a mit Tilde darüber).

### Compose

Alternativ zu den Deadkeys kann man auch mit der <Compose>-Taste arbeiten: sie druckt zwei nacheinander eingetippte Zeichen übereinander. So ergibt die Tastenfolge <Compose> <~> <a> ein ã, während ein <~> <a> weiterhin ~a anzeigt.

Um <Compose> auf die an vielen neuen Tastaturen vorzufindenden zusätzlichen Tasten zu legen, kann man z.B. konfigurieren:

> `

>     keycode 127 = Compose

> `

Bei mir trägt diese Taste das Symbol "Quadrat mit Pfeil in der linken oberen Ecke". Die Taste mit dem Fenster-Symbol (früher: Diamant-Symbol oder Meta) hat die Nr. 125.

### Unicode

Bei Verwendung eines Unicode-Zeichensatz sollte man auch die Tastatur in den Unicode-Modus schalten:

> `

>     kbd_mode -u

> `

## 5.2 Zeichensatz für die Textkonsolen

Damit die länderspezifischen Zeichen überhaupt auf dem Bildschirm dargestellt werden können, muß der entsprechende Zeichensatz für den Bildschirm geladen werden. Akzeptable Ergebnisse erzielt man in der Regel mit `lat1u-16.psf', einem 16-Punkt hohen UNIcode-Zeichensatz. Der zugehörige Befehl zum Laden sieht z.B. so aus:

> `

>     setfont /usr/lib/kbd/consolefonts/lat1u-16.psf

> `

Die Details sind wiederum der Dokumentation der eigenen Distribution zu entnehmen.

### Unicode

Um den Unicode-Zeichensatz für die Anwendungsprogramme freizugeben muß man die Zeichenfolge `ESC ( K` an den virtuellen Bildschirm senden. Dies kann z.B. durch die Befehlsfolge

> `

>     for i in  1 2 3 4 5 6 7 8
>     do
>         echo -n -e "\033(K" > /dev/tty$i
>     done

> `

geschehen. Diese Lösung ist allerdings aus verschiedenen Gründen sub-optimal.

## 5.3 Tastenbelegung von `XFree86'

`XFree86' ermöglicht den Betrieb von Programmen, die das `X Window System' benötigen. In Verbindung mit einem sogennanten `Windowmanager', der das Look&Feel bestimmt, stellt es die grafische Benutzeroberfläche unter Linux zur Verfügung.

Oft wird empfohlen, die Tastenbelegung des XFree86 durch die Datei `~/.Xmodmap` oder mit dem Befehl `xmodmap` zu konfigurieren. Dies ist nicht erforderlich, sondern unnötig kompliziert. Tatsächlich ist nur ein Eintrag in der Konfigurationsdatei des XFree86 notwendig, um die <AltGr> Taste zu aktivieren. Die Vorgehensweise unterscheidet sich für die verschiedenen Versionen:

### Version 2.1:

Konfigurationsdatei: `/usr/X11/lib/X11/Xconfig`

Mit Ausnahme der in der Tastaturbelegung vereinbarten Deadkeys werden die Tasten genau wie auf der Textkonsole belegt. Die Deadkeys (s.o.) sind unter Version 2.1 tatsächlich `dead' - aber leider ganz, nicht nur `halb'. Die Freigabe der Alt-Tasten muß manuell vorgenommen werden, dazu trägt man im Abschnitt Keyboard ein:

> `

>     LeftAlt     Meta
>     RightAlt    ModeShift

> `

### Version 3.1

Konfigurationsdateien: `/etc/X11/XF86Config` und `/etc/XF86Config`

Die Tastatur ist genau wie auf der Konsole belegt, auch die Deadkeys und <Compose> funktionieren (falls als solche konfiguriert).

Um allerdings in den Genuß der <Alt >- und <AltGr >-Tasten zu kommen, muß man bei der Erzeugung der Konfigurationsdatei (Programm `xf86config`) folgende Frage mit `y' (yes) beantworten:

> `

>     Do you want to enable these bindings for the Alt keys?

> `

Alternativ kann man die entsprechenden Einstellungen auch per Hand im Abschnitt `Section "Keyboard"` vornehmen:

> `

>         LeftAlt     Meta
>         RightAlt    ModeShift

> `

`RightAlt ModeShift' aktiviert die <AltGr>-Taste und `LeftAlt Meta' sorgt für eine Emulation der <Meta>-Taste (benötigen z.B. die Programme `emacs` und `bash`).

### Version 3.2 und höher:

Konfigurationsdateien: `/etc/X11/XF86Config` und `/etc/XF86Config`

Hat man eine Konfigurationsdatei der Version 3.1 oder will man es sich besonders einfach machen, dann verfährt man wie oben beschrieben und ergänzt im Abschnitt `Section "Keyboard"` lediglich

> `

>         XkbDisable

> `

Dadurch wird die unter Linux etwas kompliziert anmutende Xkbd-Technik abgeschaltet und das X liest stattdessen die Tastaturbelegung der Textkonsolen (auf diese Weise braucht man nur eine Sache zu konfigurieren). Äquivalent kann man bei der Erzeugung der Konfigurationsdatei (Programm `xf86config`) folgende Frage mit `n' (no) beantworten:

> `

>         Do you want to use XKB?

> `

Beantwortet man diese Frage mit `y' (yes), dann sind in der Konfigurationsdatei folgende Einträge zu entkommentieren (d.h. das `#'-Zeichen ist zu entfernen):

> `

>     #    XkbLayout   "de"
>     #    XkbVariant  "nodeadkeys"

> `

### Alle Versionen:

Sondermodelle fertigt man mit dem Befehl

> `

>     xmodmap -pke > ~/.Xmodmap

> `

und einem Editor nach Wahl an. Die globale Konfigurationsdatei ist `/etc/X11/Xmodmap`. Leider gibt es keine empfehlenswerte Software zur komfortableren Konfiguration der Tastatur (`xkeycaps` ist katastrophal in Sachen Benutzerführung).

Empfehlenswert für die Xmodmap sind etwa

> `

>     ! Freigabe der Compose-Taste
>     keycode 117 = Multi_key
>     ! Punkt auf das Komma des Ziffern-Blocks
>     keycode 91 = period
>     ! Was um alles in der Welt ist die Super-Taste?
>     keycode 115 = Super_L
>     ! Für diejenigen, die ^? als Backspace auf der Konsole konfiguriert haben.
>     keycode 22 = BackSpace

> `

### Unicode

?

## 5.4 Zeitzonen

Die ganze Welt ist in Zeitzonen unterteilt, innerhalb derer eine einheitliche Zeit gilt (unabhängig von der Zeit einer Sonnenuhr an dem betreffenden Ort). Bezugspunkt für die Einteilung ist die Universal Time, kurz UTC.

Zu einer Zeitzone gehören bestimmte Regeln, wie z.B. die Umstellung von Sommer- auf Winterzeit. Linux kann diese Regeln automatisch berücksichtigen.

Allerdings ist die automatische Zeitumstellung nur angebracht, wenn Linux das einzige Betriebssystem auf dem Rechner ist oder auch das andere Betriebssystem auf diese Technik beherrscht.

### DOS

Der Treiber `clock.sys` bringt DOS den Umgang mit Zeitzonen bei. Der TZ-Wert für die deutsche Zeitzone in `clock.sys` ist

> `

>     CET-1CEST,M3.5.0/2,M10.5.0/3

> `

Der Treiber `clock.sys` ist z.B. erhältlich unter der URL

> ftp://ftp.tu-chemnitz.de/pub/simtel/msdos/clock/clk360rs.zip

### Linux

Unter Linux gibt es quasi 3 Zeiten:

- Die der auf dem Motherboard installierten CMOS-Uhr,
- die Systemzeit des Linux-Kernels und
- die dem Benutzer von verschiedenen »Uhren« angezeigte Zeit.

> `

>                 »clock -u -w«               »date -u -s«
>      CMOS-Uhr  <--------------   Linux    <--------------
>     (Mainboard)                Systemzeit                 Benutzer-Uhr
>                -------------->   (UTC)    -------------->
>                 »clock -u -s«             »date«, »xclock«

> `

Die Programme `clock` und `date` übersetzen zwischen diesen Uhrzeiten.

Zwar liest der Kernel schon beim Booten die CMOS-Uhr aus und interpretiert sie als UTC. Aber um systematische Fehler der CMOS-Uhr zu korrigieren, wird die Uhrzeit vom Skript `/etc/init.d/boot` (oder vergleichbar) ein weiteres Mal gelesen. Dort wird dann der `clock`-Befehl ausgeführt und ist daher für die weiteren Betrachtungen ebenfalls relevant.

Für die Umstellung von Sommer- auf Winterzeit gibt es zwei Möglichkeiten: manuell oder automatisch.

> `

>     Umstellung              manuell          automatisch
>     ----------------------------------------------------
>     CMOS-Uhr                Ortzeit          UTC
>     Option für clock        -keine-          -u

> `

Die Zeitzone der CMOS-Uhr setzt man am sichersten während des Bootens im BIOS Setup. "UTC" ist die Universal Time: im Winter eine, im Sommer zwei Stunden weniger.

Welches Skript den Befehl `clock` ausführt (und demnach die Option '-u' enthalten kann) muß man dem Handbuch der eigenen Distribution entnehmen.

Die eigentliche Zeitzone wird unabhängig von den obigen Einstellungen durch den Link `/usr/lib/zoneinfo/localtime` festgelegt. In der Regel zeigt dieser Link auf die Hauptstadt des eigenen Landes:

> `

>     Land           Zeitzonen-Datei
>                                      |- Zeitzone -|
>     -----------------------------------------------
>     Deutschland    /usr/lib/zoneinfo/Europe/Berlin
>     Östereich      /usr/lib/zoneinfo/Europe/Vienna
>     Schweiz        /usr/lib/zoneinfo/Europe/Zurich

> `

Um den Link anzulegen kann man das Kommando `ln` verwenden, im Falle von Deutschland lautet die komplette Befehlszeile dann:

> `

>     ln -sf /usr/lib/zoneinfo/Europe/Berlin  /usr/lib/zoneinfo/localtime

> `

Die eingestellte Zeitzone kann mit der Umgebungsvariable `TZ` überschrieben werden:

> `

>     export TZ=Asia/Hong_Kong; xclock & export TZ=Africa/Dakar; xclock &

> `

Das früher gebräuchliche "MET" sollte unter keinen Umständen weiterverwendet werden. Markus Kuhn schrieb mir:

> Die Datei /usr/lib/zoneinfo/MET existiert nur zwecks Rückwärtskompatibilität. Die Autoren der Zeitzonentabellen (Olson/Eggert/et al.) wollen eigentlich, daß deutsche Benutzer statt MET die Datei Europe/Berlin verwenden. Dann stimmen sogar die historischen Sommerzeiten vor 1945, die Linux auch alle kennt. Außerdem wird dann in der neuesten Version der Zeitzonentabelle "Mitteleuropäische Zeit (MEZ)" endlich korrekt ins Englische mit "Central European Time (CET)" übersetzt, denn "MET" ist ein Übersetzungsfehler (siehe z.B. Langenscheid Englisch; ich habe deswegen sogar beim Physikalisch-Technischen Bundesamt nachgefragt, die für die deutsche Zeit verantwortlich sind). "CEST" ist dann entsprechend "Central European Summer Time" ("MET DST", wie es noch in vielen Linux-Installationen benutzt wird, war eine falsche Uebersetzung von MESZ).

Next Previous Contents