Copyright © 1997, 1998, 1999, 2002 by Slaven Rezic
$Date: 2002/10/09 14:16:20 $
Dies ist eine kurze Beschreibung für die Benutzung von (deutschen) Umlauten unter FreeBSD. Es werden Aspekte wie Ein- und Ausgabe behandelt, sowohl auf Betriebssystemebene als auch Programmebene.
Mit deutschen Umlauten sind im folgenden Text die Zeichen ä, ö, ü, Ä, Ö, Ü und ß gemeint (obwohl ß genaugenommen kein Umlaut ist). An einigen Stellen wird auch auf das Euro-Symbol eingegangen.
Dieses Dokument gibt es in den Formaten HTML, PostScript und Text.
Grundsätzlich hat man die Wahl zwischen dem standardisierten ISO-8859-1-Zeichensatz (auch ISO Latin 1 genannt) und dem cp437- oder cp850-Zeichensatz von IBM. Während letzterer normalerweise bei PCs unter DOS verwendet wird und auch in den Grafikkarten kodiert ist, ist der ISO-Zeichensatz mittlerweile wirklich ein Standard geworden und wird unter X11, Windows, in HTML-Dokumenten und in internationalen Mails verwendet. Deshalb ist die Verwendung von ISO-8859-1 empfehlenswert, soweit dies auch möglich ist.
Falls der Einsatz des Euro-Symbols erwünscht ist, sollte der ISO-8859-15-Zeichensatz verwendet werden. Mehr Informationen zum Thema Euro findet man im folgenden Artikel.
Für die folgenden Abschnitte wird angenommen, dass eine gewöhnliche PC-AT-Tastatur mit deutschem Layout verwendet wird.
Mit kbdcontrol kann die Tastaturbelegung geändert werden. Die zugehörigen Keymaps befinden sich im Verzeichnis /usr/share/syscons/keymaps/. Für eine normale deutsche Tastaturbelegung gibt man kbdcontrol -l german.iso ein. Dieser Zeichensatz funktioniert sowohl mit ISO-8859-1 als auch mit ISO-8859-15. Zum einmaligen Einstellen kann auch das interaktive Tool kbdmap verwendet werden.
Für eine dauerhafte Einstellung der Tastaturbelegung muss in der Datei /etc/rc.conf (bis FreeBSD-2.2.2: /etc/sysconfig) die Zeile
keymap=german.isoeingegeben werden.
Alternativ kann die Tastaturbelegung schon im Kernel eingebunden werden. Das hat den Vorteil, dass bereits im Single-User-Mode mit der richtigen Tastaturbelegung gearbeitet werden kann. Dazu muss der Kernel neu compiliert und installiert werden, nachdem in der Kernel-Config-Datei die Zeilen
options ATKBD_DFLT_KEYMAP # specify the built-in keymap makeoptions ATKBD_DFLT_KEYMAP="german.iso"eingefügt wurden (siehe Handbuch "Configuring the FreeBSD Kernel" und /sys/i386/conf/LINT).
Die folgenden Informationen zu pcvt können veraltet sein.
Mit kcon -m de kann man die deutsche Tastaturbelegung für ISO-8859-1 auswählen (die im übrigen schon voreingestellt ist). Für weitere (exotische) Tastaturbelegungen siehe /usr/share/misc/keycap.pcvt.
Christian Weisgerber <naddy@mips.rhein-neckar.de> hat in de.comp.os.unix.bsd geschrieben:
Für Leute, die lieber gerne ISO Latin 1 statt das per Default eingestellte DEC Supplemental (alias DEC Multinational) verwenden möchten:
Auf EGA/VGA-Karte die Fonts unter (FreeBSD) /usr/share/misc/pcvtfonts/ laden.
printf '\e.A' auf jedem Terminal. Das lädt ISO Latin 1 in den G2-Zeichensatz, der wiederum per Default nach GR (0xA0..0xFF) gemappt wird.
Am einfachsten ist die Konfiguration mit dem grafischen Tool XF86Setup. Im Abschnitt "Keyboard" sollte bei einer gewöhnlichen AT-Tastatur für Model "Generic 105-key (Intl) PC" ausgewählt werden, bei älteren Tastaturen ohne Windows-Tasten "Generic 102-key (Intl) PC". Als Layout gibt man "German" an. Die restlichen Optionen können nach persönlichem Geschmack eingestellt werden.
Die Einstellungen werden in die Datei /etc/XF86Config unter Section "Keyboard" geschrieben. Bei mir sieht der Abschnitt so aus:
Section "Keyboard" Protocol "Standard" AutoRepeat 500 5 LeftAlt Meta RightAlt ModeShift ScrollLock Compose RightCtl Compose XkbKeycodes "xfree86" XkbTypes "default" XkbCompat "default" XkbSymbols "us(pc101)" XkbGeometry "pc" XkbRules "xfree86" XkbModel "pc102" XkbLayout "de" EndSection
Natürlich kann man diese Eintragung direkt ohne Verwendung von XF86Setup in die Konfigurationsdatei schreiben.
Bei älteren X-Servern ohne XKB Extension übernimmt X11 die Tastaturbelegung von syscons. Dabei werden allerdings die Umlaute nicht richtig umgesetzt. Mit xmodmap kann man die Tastaturbelegung korrigieren. In der Startdatei .xsession kann das Kommando mit xmodmap ${HOME}/.xmodmaprc gestartet werden. Die Datei .xmodmaprc sieht wie folgt aus:
keycode 11 = 2 quotedbl twosuperior keycode 12 = 3 section threesuperior keycode 20 = ssharp question backslash keycode 34 = udiaeresis Udiaeresis bracketleft braceleft keycode 47 = odiaeresis Odiaeresis keycode 48 = adiaeresis Adiaeresis keycode 49 = asciicircum degree backslash bar keycode 58 = m M mu keycode 94 = less greater bar brokenbar
Alternativ kann der Start von .xmodmap auch in den globalen Startdateien /usr/X11R6/lib/X11/xdm/Xstartup oder /usr/X11R6/lib/X11/xinit/xinitrc erfolgen.
Umlaute und andere Akzentzeichen kann man auch mit dead keys eingeben. Dazu muss man in der XFree86-Konfigurationsdatei /etc/XF86Config im Abschnitt Keyboard die Compose-Taste definieren. In meiner Konfigurationsdatei sieht das so aus:
LeftAlt Meta RightAlt ModeShift RightCtl Compose
Damit wird die rechte Strg-Taste zur Compose-Taste. Um ein ä einzugeben, müssen die Tasten Strg " a nacheinander eingetippt werden (fast wie bei LaTeX), ein ß wird mit Strg s s eingegeben. Die komplette Tabelle mit allen Kombinationsmöglichkeiten findet man in /usr/X11R6/lib/X11/locale/iso8859-1/Compose.
Nicht alle Anwendungen akzeptieren diese Eingabemöglichkeit. Bei GNU Emacs 19.34, xterm und Netscape 4 funktioniert es, bei Netscape 3 und xfig 3.2 hingegen nicht.
Beim xterm ist es empfehlenswert, die Voreinstellung eightBitInput auszuschalten. Bei diesem Eingabemodus werden die Umlaute direkt an die Anwendung gesendet, während die Zeichen mit der Meta-Taste als Escape-Sequenz gesendet werden. Damit ist es möglich, in Shells wie tcsh und bash sowohl Umlaute einzugeben als auch die Emacs-Tastenbelegung mit der Meta-Taste zu verwenden. Für diesen Modus fügt man folgende Zeile in sein .Xdefaults ein:
XTerm*eightBitInput: false
Auch beim rxvt [1] kann man in den eightBitInput-Modus umschalten. Der Resource-Eintrag lautet hier:
Rxvt.meta8: false
Mit vidcontrol kann man einen neuen Zeichensatz auswählen. Für den Standard-ISO-8859-1-Zeichensatz lautet der vollständige Befehl vidcontrol -f 8x16 iso-8x16, für ISO-8859-15 lautet der Befehl vidcontrol -f 8x16 iso15-8x16. Weiterhin gibt es noch Zeichensätze für die Größen 8x8 und 8x14. Mit dem Programm vidfont kann man den Zeichensatz interaktiv auswählen.
Für eine dauerhafte Einstellung des Zeichensatzes muss in der Datei /etc/rc.conf (bis FreeBSD-2.2.2: /etc/sysconfig) die Zeile font8x16=iso-8x16 eingegeben werden. Wenn man auch die kleineren Zeichensätze verwendet (z.B. für andere Bildschirmauflösungen), kann man noch font8x14=iso-8x14 und font8x8=iso-8x8 hinzufügen.
Weiterhin muss die TERM-Einstellung in /etc/ttys geändert werden. Für alle virtuellen Terminals ttyv* muss statt cons25 der Eintrag cons25l1 stehen. [2] Dieser Eintrag sorgt dafür, dass Blockgrafik mit dem ISO-8859-1- bzw. ISO-8859-15-Zeichensatz sinnvoll dargestellt wird.
Die Zeichensatzumschaltung funktioniert nicht mit Uralt-Grafikkarten wie Hercules-Mono-Karten. Hier hat man die Möglichkeit, screen mapping einzuschalten. Also entweder in /etc/rc.conf die Zeile scrnmap="iso-8859-1_to_cp437" eintragen oder manuell in der Shell mit vidcontrol -l iso-8859-1_to_cp437 aktivieren.
Auch bei der Anzeige kann der Zeichensatz dauerhaft in einen Kernel eincompiliert werden. Dazu müssen die Zeilen
options SC_DFLT_FONT # compile font in makeoptions SC_DFLT_FONT=isoin die Kernel-Config-Datei eingefügt werden. Bei älteren FreeBSD-Versionen lautet der Eintrag:
options "STD8X16FONT" # Compile font in makeoptions "STD8X16FONT"="iso"
Die meisten X11-Zeichensätze sind ISO-8859-1-Zeichensätze (Ausnahmen: Schumacher-Fonts, orientalische Zeichensätze), so dass hier keine weiteren Einstellungen notwendig sind.
Die Liste von ISO-8859-15-Zeichensätzen kann man mit dem Befehl:
xlsfonts | grep 'iso8859-15$'ausgeben lassen. Um einen dieser Zeichensätze in allen X11-Anwendungen zu verwenden, muss man in der Datei .Xdefaults beispielsweise den folgenden Eintrag machen:
*font: -misc-fixed-bold-r-normal--13-120-75-75-c-70-iso8859-15
Die meisten Nadeldrucker verwenden den IBM-Zeichensatz cp437. Um Umlaute des ISO-8859-1-Zeichensatzes richtig zu drucken, kann man Umwandlungsprogramme wie a2ps und enscript verwenden, die den Text nach Postscript umwandeln, und dann mit ghostscript zu drucken. [3] Mit weniger Aufwand kann man auch das Umwandlungsprogramm recode [4] verwenden, um den ISO-8859-1-Zeichensatz in einen IBM-Zeichensatz umzuwandeln. [5] Der Vorteil hierbei ist, dass man den umgewandelten Text im (schnelleren) Textmodus ausdrucken lassen kann.
Ich habe mein /etc/printcap so erweitert, dass ich mit lpr -Ptext textdatei ISO-8859-1-Dateien direkt ausdrucken kann. Der Printcap-Eintrag sieht wie folgt aus:
text|iso|iso1|latin1|necp6-text|NEC P6 with ISO-Filter:\ :lp=/dev/lpt0:sd=/var/spool/lpd:lf=/var/log/lpd-errs:\ :af=/tmp/account:pw=#80:px=#2880:py=#3960:sf:sh:\ :if=/usr/local/libexec/necp6-iso-filter:
Dazu habe ich ein Shell-Skript /usr/local/libexec/necp6-iso-filter mit folgendem Inhalt angelegt:
#!/bin/sh /usr/local/bin/recode latin1..ibmpc
Ältere Versionen von a2ps brauchen die Option -8 zum Drucken von Zeichen mit gesetzten 8. Bit, also auch für die deutschen Umlaute.
enscript braucht keine zusätzlichen Optionen.
Die meisten Programme bei FreeBSD sind lokalisiert, d.h. sie rufen setlocale(3) auf. setlocale(3) wertet die Einstellung der Environment-Variablen LC_ALL, LANG, LC_CTYPE, LC_COLLATE und LC_TIME aus.
Die Environment-Variablen haben folgende Bedeutungen:
Setzen aller folgenden Environment-Variablen.
Wird synonym für LC_ALL verwendet.
Definieren der großen und kleinen Buchstaben, Sonderzeichen, Ziffern usw.
Definieren der Sortierreihenfolge.
Ändert die Sprache für Ausgabetexte.
Ändert währungsspezifische Formatierung, z.B. das Gruppieren von Tausendern, das landesspezifische Währungssymbol etc.
Formatierung von Fließkommazahlen. Bei deutschsprachigen Locales wird insbesondere statt eines Dezimalpunktes das Dezimalkomma verwendet, was bei einigen Anwendungen zu Problemem führen kann.
Ausgabe von Datum und Zeit.
Für Deutschland sollte man LC_ALL auf den Wert de_DE.ISO8859-1 oder de_DE.ISO8859-15 (Variante mit Euro-Symbol) setzen. Je nach persönlichen Geschmack kann man auf die eine oder andere LC_*-Einstellung verzichten. LC_TIME definiert z.B. die Ausgabe des Datums, so dass ls -l
22 Märstatt
Mar 22anzeigt. Das ist gewöhnungsbedürftig und kann bei manchen Programmen sogar falsche Resultate erzeugen (z.B. arbeitet dired von emacs-19.34 nicht mit der deutschen Zeit-Einstellung).
Bei einer csh oder tcsh setzt man die Environment-Variable entweder für die laufende Session in der Kommandozeile oder permanent in der Datei ~/.cshrc:
setenv LC_ALL de_DE.ISO8859-1Bei einer sh, bash oder zsh setzt man Environent-Variablen mit einer anderen Syntax:
LC_ALL=de_DE.ISO8859-1; export LC_ALL
Mit LC_COLLATE kann man deutschsprachige Texte korrekt sortieren, d.h. mit korrekt eingereihten Umlauten. Auch hier kann es bei spezialisierten Skripten und Programmen zu Problemen kommen. Man kann die locale-Einstellungen jederzeit mit env LC_ALL=C program args (tcsh, csh) oder LC_ALL=C program args (bash, sh) ausschalten.
Noch eine Anmerkung zum Wert de_DE.ISO8859-1: Bei früheren FreeBSD-Versionen wurde die Schreibweise de_DE.ISO_8859-1 verwendet. Diese Schreibweise kann noch immer verwendet werden, falls symbolische Links in /usr/share/locale/ existieren. Leider ist das genaue Format der Locale-Einstellung nicht genormt, so dass es bei unterschiedlichen Betriebssystemen und Anwendungen zig Darstellungsmöglichkeiten gibt: de, de_DE, de_DE.88591, de_DE.ISO8859-1 oder de_DE.ISO_8859-1. Ältere FreeBSD-Versionen verwenden standardmäßig die letztere Darstellungsform, XFree86 kennt diese aber nicht. Damit beim Starten von Netscape und Emacs die Fehlermeldung "Warning: locale not supported by Xlib, locale set to C" nicht erscheint, sollte die Datei /usr/X11R6/lib/X11/locale/locale.alias um den Eintrag de_DE.ISO_8859-1 de_DE.ISO8859-1 ergänzt werden.
Verwendet man die tcsh hauptsächlich mit xterm oder rxvt und hat dort den eightBitInput-Modus eingeschaltet, so gibt es hier keine Probleme.
Anders sieht es bei der Benutzung des syscons' aus. Bei der tcsh hat man zwei Möglichkeiten: entweder man möchte Umlaute eingeben können oder man möchte die Meta-Taste für Emacs-ähnliche Tastaturkommandos verwenden. Da beide Methoden das 8. Bit benötigen, können sie nicht gleichzeitg angewendet werden. Da die Eingabe von deutschen Sonderzeichen auf Kommandozeilenebene nicht gerade häufig vorkommt, sollte man sich für die Meta-Taste entscheiden. Mit CTRL-V kann man dann noch immer Sonderzeichen eingeben.
Wenn LANG oder LC_ALL gesetzt sind, werden bei der tcsh die Zeichen von 0200 bis 0377 automatisch auf die Sonderzeichen umgebunden. Wenn man das verhindern will (weil man die Meta-Taste verwenden will) muss entweder in .cshrc oder .tcshrc die Zeile
setenv NOREBINDstehen, die das Umbinden verhindert.
Mit Setzen von LANG auf de_DE.ISO8859-1 geben vi und tcsh ihre Meldungen auf deutsch aus. Gebrochene Pfeifen oder nicht gefundene Streichhölzer, wie es in einer Mailingliste behauptet wurde, habe ich aber noch nicht erlebt :-)
Wenn alles nicht hilft, kann man mit dem Einfügen der folgenden Zeilen in ~/.cshrc oder ~/.tcshrc erzwingen, dass Umlaute auch als Umlaute erkannt werden:
foreach _key (\\304 \\326 \\334 \\337 \\344 \\366 \\374 \\244) bindkey $_key self-insert-command end
Die bash verlangt das Setzen von LANG auf ein deutschsprachiges locale, z.B. de_DE.ISO8859-1, entweder in ~/.bashrc oder systemweit durch einen Eintrag
lang=de_DE.ISO8859-1in /etc/login.conf (siehe Manpage).
Für ältere Versionen des Emacs waren folgende Zeilen in einer der Initialisierungsdateien (.emacs, /usr/local/share/emacs/site-lisp.el oder /usr/local/share/emacs/default.el) notwendig:
(standard-display-european t) (require 'iso-syntax)
Neuere Versionen (z.B. 19.34) beachten die Einstellung von LC_ALL oder LANG. Hier sind für die Darstellung keine weiteren Konfigurationen notwendig. Allerdings sollte man für LC_ALL eine Form wählen, die die Zeichenkette 8859-1 enthält. Die ansonsten manchmal gültigen Einstellungen de_DE und de funktionieren nicht (Hinweis: /usr/local/share/emacs/19.34/lisp/startup.el, Konstante iso-8859-1-locale-regexp bzw. /usr/local/share/emacs/20.2/lisp/startup.el und iso-8859-n-locale-regexp).
Wird Emacs in der syscons-Console verwendet, so stellt sich das gleiche Problem wie bei der tcsh: die Belegung der Meta-Taste kollidiert mit den Umlauten. Standardmäßig wird der Meta-Taste der Vorzug gegeben. Soll dagegen die Eingabe von Umlauten erlaubt werden, müssen die folgenden Zeilen in .emacs oder den anderen Konfigurationsdateien stehen:
(if (not window-system) (progn (apply 'set-input-mode t (list (nth 1 (current-input-mode))) 0 (list (nth 3 (current-input-mode)))) ) )
Die ``0'' schaltet die Meta-Taste ab. Wird die ``0'' durch ein ``t'' ersetzt, erhält man die ursprüngliche Bedeutung wieder. Oder, als weitere Alternative, kann man die Umlaut-Tasten gesondert umdefinieren, so dass man alle anderen Meta-Zeichen verwenden kann:
(global-set-key "\M-d" 'my-insert-ae) (global-set-key "\M-D" 'my-insert-Ae) (global-set-key "\M-v" 'my-insert-oe) (global-set-key "\M-V" 'my-insert-Oe) (global-set-key "\M-|" 'my-insert-ue) (global-set-key "\M-\\" 'my-insert-Ue) (global-set-key "\M-_" 'my-insert-ss) (defun my-insert-ae () (interactive) (insert "ä")) (defun my-insert-Ae () (interactive) (insert "Ä")) (defun my-insert-oe () (interactive) (insert "ö")) (defun my-insert-Oe () (interactive) (insert "Ö")) (defun my-insert-ue () (interactive) (insert "ü")) (defun my-insert-Ue () (interactive) (insert "Ü")) (defun my-insert-ss () (interactive) (insert "ß"))
Wie man sieht, hat man hier nicht mehr die Möglichkeit, z.B. kill-word (M-d) oder scroll-down (M-v) zu verwenden. Wie bei der tcsh hat man auch beim Emacs die Möglichkeit des Quotens, allerdings ist hier die Quote-Taste CTRL-Q.
dired hat beim emacs-19.34 Probleme, wenn LANG auf de_DE.ISO8859-1 gesetzt ist. LC_ALL wird dagegen korrekt erkannt.
Für latex2e-Dokumente (latex2e ist beispielweise im Port print/teTeX enthalten), verwende ich folgenden Header:
\documentclass{article}
\usepackage{isolatin1}
\usepackage{german}
\usepackage{a4}Mit isolatin1 können Umlaute direkt über die Tastatur eingegeben werden. Diese Vorgehensweise hat allerdings den Nachteil, dass sie nicht so portabel wie die alte Methode ("a für ä, "s für ß etc.) ist.
Umlaute können bei xfig einfach mit der Tastatur eingegeben werden. xfig unterstützt auch die Compose-Taste, allerdings wird leider nicht die selbe Kombinationstabelle wie bei anderen X11-Programmen verwendet. Die Kombinationstabelle findet man in der Datei /usr/X11R6/lib/X11/xfig/CompKeyDB bzw. bei älteren Versionen von xfig in der xfig-Manpage unter "DRAWING MODE PANEL COMMAND DESCRIPTIONS", "TEXT".
Einige Versionen von xfig speichern falsche Dateien ab, wenn LANG oder ähnliche Variablen gesetzt sind (Fließkommazahlen werden mit "," statt mit "." abgespeichert). In diesem Fall sollte xfig unter der C-locale laufen: env LANG=C LC_ALL=C LC_NUMERIC=C xfig.
Der Internet-Standard für die Übertragung von Mail- und News-Daten, die über einfache 7-Bit-Übertragung hinaus geht, ist in MIME (RFC 2045 ff.) definiert. Da der ISO-8859-1-Zeichensatz 8 Bits benötigt, müssen entsprechende Texte auch per MIME übertragen werden.
Für pine [6] sollte der Zeichensatz auf ISO-8859-1 eingestellt sein. Die Einstellung erfolgt unter (S)ETUP, (C)ONFIG, character-set. Dort mit (A)dd Value den Wert ISO-8859-1 eintragen.
Die Mail-Funktion des Emacs, das über C-x m aufgerufen wird, ist recht einfach und kennt kein MIME. Für die Verwendung von MIME kann mime.el von Masanobu UMEDA verwendet werden. Hiermit können Bilder und Dateien per Mail verschickt werden. Texte werden auf das Auftreten von 8-Bit-Zeichen untersucht und entsprechend wird der MIME-Header erweitert. Für die Verwendung von mime.el muss in .emacs die Zeile
(autoload 'mime-mode "mime" "Minor mode for editing MIME message." t)
eingefügt werden.
In ~/.tin/tinrc müssen folgende Zeilen eingefügt werden:
mm_charset=ISO-8859-1 post_mime_encoding=8bit mail_mime_encoding=8bit post_8bit_header=OFF mail_8bit_header=OFF display_mime_header_asis=OFF display_mime_allheader_asis=ON
Weitergehende Literatur:
gepostet in die Newsgruppen de.comp.standards und de.answers
| [1] | Ports-Unterverzeichnis x11 |
| [2] | Für andere Bildschirmgrößen gibt es die entsprechenden Einträge cons30l1, cons43l1 usw., siehe /etc/termcap. |
| [3] | Ports für diese Programme befinden sich im Unterverzeichnis print. |
| [4] | Ports-Unterverzeichnis converters |
| [5] | Es können allerdings nicht alle Zeichen aus dem ISO-8859-1-Zeichensatz umgewandelt werden. Die deutschen Umlaute betrifft das nicht. |
| [6] | überprüft für Version 3.91 |