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

ALERT! 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.

Locale CharsetSorted ascending
de_DE ISO-8859-1
de_DE@euro ISO-8859-15

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".

Locale Charset
de_DE.UTF-8 UTF-8
en_US.UTF-8 UTF-8

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

Comments

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

 
Topic revision: r9 - 07 Aug 2010, ChristophVonStuckrad
 
  • Printable version of this topic (p) Printable version of this topic (p)