Locales unter Linux/Unix (Zielsystem)
Locales bieten unter Unix/Linux eine Möglichkeit, die Sprache der Anwendungen, die verwendeten
Zeichentabellen und diverses Programmverhalten auszuwählen.
Hinweis für Nutzer mit Account-Erstellung vor dem 12. Dezember 2007
Alle vor dem 12. Dezember 2007 angelegten Fachbereichs-Accounts haben als Standard-Shell die C-Shell,
in deren Konfigurationsdatei
.cshrc
die Locale auf
C
gesetzt wird. Dies führt auf den Linux-Poolrechnern
zu einer falschen Zeichenkodierung. Bitte entfernen Sie daher ggf. mit einem Text-Editor
die folgende Zeile aus Ihrer
~/.cshrc
(nahe am Anfang) [oder kommentieren Sie diese Zeile aus]:
setenv LANG C
Der Rechnerbetrieb empfiehlt Benutzern, die nicht auf eigenen Wunsch
eine C-shell (csh oder tcsh) verwenden, auf die bash umzustellen. Für
die Umstellung reicht eine einfache Mail an staff@mixxNOSPAMxx.fu-berlin.de mit dem Subject
"Bitte Benutzer xyz auf bash umstellen" aus.
Welche Shell sie gerade verwenden, erfahren Sie z.b. mittels des
Kommandos ps -p $$
.
Worauf wirken locales?
Locales wirken auf fast alle Anwendungen; sie werden auf alle Anwendungen
vererbt, die z.B. aus der Shell, aus KDE oder aus Gnome gestartet werden.
Wie erfahre ich, welche Einstellungen ich verwende?
Durch die Eingabe von
locale
auf der Shell werden diese angezeigt.
Die verwendete Zeichentabelle erfährt man mittels
locale charmap
Eine Liste aller auf dem System installierten Locales erhält man mittels
locale -a
Locales auswählen
Die gewünschte Locale ist am einfachsten direkt im verwendeten Desktop
(egal ob KDE, Gnome oder CDE) in dessen Einstellungen bzw. dem
Login-Manager auszuwählen.
In der Shell können diese Einstellungen durch Setzen und Exportieren einiger
Umgebungsvariablen verändert werden (hier eine Auswahl der wichtigsten dieser Variablen):
-
LANG
Standardsprache
-
LC_CTYPE
Zeichensatz
-
LC_COLLATE
Sortierreihenfolge (wird manchmal anders als LANG gebraucht)
-
LC_TIME
Datum und Uhrzeit
-
LC_MONETARY
Währung und Zahlenformate für Geldbeträge
-
LC_MESSAGES
(Fehler-)Meldungen
-
LC_MEASUREMENT
Maßeinheiten
-
LC_ALL
setzt alle anderen Locale-Einstellungen außer Kraft.
Die wichtigsten Locales sind
-
C
oder POSIX
Englisch, 7-bit (veralteter Default, keine Umlaute)
-
de_DE.UTF-8
Deutsch mit Unicode als Zeichensatz (empfohlener Default)
-
de_DE.ISO-8859-1
Deutsch mit iso-8859-1 als Zeichensatz. (veralteter Default)
-
en_US.UTF-8
Englisch mit Unicode als Zeichensatz (unterstützt Umlaute).
-
en_US.ISO-8859-1
Deutsch mit iso-8859-1 als Zeichensatz (unterstützt Umlaute).
-
en_DK
als LC_TIME
für das ISO 8601-Datumsformat ("dänisches Englisch").
Wenn man einzelne der Locale-Einstellungen verändern will, empfielt es sich (falls eine
bash oder
zsh als Shell verwendet wird)
in die jeweilige Shell-Konfigurationsdatei
.bashrc
oder
.zshrc
etwas der Art zu schreiben:
#locale stuff
eval $(locale)
unset LC_ALL
unset LC_CTYPE
LANG=C
LC_MESSAGES=C
LC_TIME=en_DK.UTF-8
export LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT LC_IDENTIFICATION

Diese Einstellungen wirken ggf. nur auf die aus der Shell (Kommandozeile) gestarteten Programme. Wenn das "darunterliegende" Terminalfenster noch mit einer anderen locale gestartet worden ist, werden daher UTF-8 Zeichen nicht korrekt dargestellt. Als Abhilfe von der Shell aus kann fuer den kurzfristigen Test ein neues Terminal (xterm, etc) gestartet werden, in dem diese Einstellung dann wirksam ist.
Welche locales funktionieren nicht?
Seit neuestem zeigt sich das von uns verwendete CUPS Drucksystem
besonders "zickig" bei der Akzeptanz von Jobs, die mit einem anderen
Charset als UTF-8 vom Client eingeliefert werden. (Ältere Versionen waren da toleranter.)
Diese Jobs werden entweder bereits pauschal mit der Fehlermeldung
client-error-bad-request
abgelehnt (dies betrifft insbesondere unter
der Debian-Distribution "sarge" laufende Systeme, sowie unter Solaris
laufende Systeme), oder spaetestens mit =Unsupported character set
"iso-8859-15"= oder
Unsupported character set "iso-8859-1"
abgewiesen.
Die letzteren beiden Charsets waren in der Vergangenheit gerne empfohlen
worden um Umlaute verwenden zu koennen, und werden daher vor allem in
den C-Shell setups am Fachbereich oft explizit gesetzt.
Leider gibt es auch einige Java-Applikationen, die mit nicht-englischen
locales beim öffnen ihres Fensters abstürzen. Meistens hilft es dann,
auf dem Terminal(Fenster) die Spracheinstellung auf 'POSIX' festzulegen
Welche locales funktionieren?
Jede locale, die als Charset UTF-8 definiert, sollte von CUPS akzeptiert werden. (Zur Kontrolle: Ausgabe von
locale charmap
)
Kritisch ist dies insbesondere auf Systemen, die unter Sarge laufen. Unter Etch
laufende Systeme und die neueren Systeme unter Lenny und Squeeze verhalten sich
an dieser Stelle toleranter, und akzeptieren teilweise abweichende
Einstellungen, solange diese nicht die Umlautkodierungen betreffen.
Insbesondere kann ab Etch auch die Locale
C
oder
POSIX
selektiert
werden; unter Sarge wird dies umgehend mit der Verweigerung des Drucksystems
"bestraft".
locales per SSH "mitnehmen"
Alle Linux-Poolrechner sind so eingestellt, dass die die Locale-Einstellung per
SSH mit übertragen und übernommen werden. Um dies auf eigenen LINUX-Rechnern
genauso machen zu können, sind möglicherweise folgende Config-Änderungen nötig:
- (vorausgesetzt, man verwendet ein ssh-Paket, dass diese Settings kennt!)
- SSH-Server:
AcceptEnv LANG LC_*
in der sshd_config
- SSH-Server:
SendEnv LANG LC_*
in der ssh_config
oder in ~/.ssh/options
Falls mal irgendwer Zeit hat, fehlt hier die Erklärung,
wie man mit Win*-basierten Terminals SO auf LINUX einloggt,
dass die oben stehenden Probleme gleich ausgelassen werden.
OK,er also ein paar Hinweise zum Ausprobieren in Windows:
Das einfachste ssh-Verbindungs-Programm ist 'putty', mit dem man
sich relativ schnell eine 'Sitzung' fest voreinstellen kann, die
man dann problemlos direkt starten kann. Das Programm ist SEHR klein,
sodass man es auch hervorragend auf einem USB-Stick mitnehmen kann.
- Herunterladen von: http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html
- Installieren (je nach heruntergeladenem 'installer', 'zipfile' oder 'exefile')
- Putty aufrufen
- Sitzung konfigurieren
- Host z.B. andorra.imp.fu-berlin.de
- Protkoll ssh 2 (port 22)
- unter 'Window->Translation' UTF-8 auswählen
- unter 'Connection->Data' bei 'Environment variables'
- Variable 'LANG'
- Value 'de_DE.utf8' oder 'en_US.utf8'
- eintragen und mit 'Add' quittieren.
- Sitzung unter 'Session->Saved sessions' einen Namen geben und mit 'Save' Speichern.
- ERST NACH ABSPEICHERN ÖFFNEN.
Da unsere UNIX-ssh-server die Angabe 'LANG' zu übernehmen erlauben,
sollte damit sofort die Sitzung mit UTF8-Zeichenrepraesentation arbeiten.
In einem 'Shortcut' auf das Programm 'Putty' kann man dann die Parameter
'-load' und '"sessionname"' hinzufügen, um eine bestimmte Session direkt
aufzurufen.
Falls es auf der UNIX-Seite Probleme gibt, mit Aufruf 'locale' prüfen,
ob der Wert übernommen wurde, und sicherheitshalber die TTY-Einstellung
mit 'stty cs8 -parenb iutf8' korrigieren (d.h. 8bit/byte-ohne-Parität und
Eingabe(i) im utf8-Format (also "mehr als ein Byte pro Zeichen" erlauben).
--
ChristophVonStuckrad - 2010-08-07