[linux-l] unterschiedliche "xterm" wie richtig verwenden?

Lutz Willek lutz.willek at belug.de
Mi Sep 5 10:36:53 CEST 2012


Am 04.09.2012 15:23, schrieb Steffen Dettmer:
> Hi,

Moin,

> ich kriege Farben und UTF8 Support in verschiedenen
> xterm-Terminals nicht richtig und allgemeingültig konfiguriert.

Zu den Farben kann ich nix sagen, ich kürze das daher mal raus.

> - verschiedene XFree xterms (mit 8, 16 oder 256 Farben, mit/ohne UTF-8)
> - cygwin xterm (der port scheint recht ähnlich zu normalem xterm zu sein)
> - putty (wohl immer 256 Farben, mit/ohne UTF8)

Ich muss auch öfter Putty nutzen. Meines Wissens ist der UTF-8 Support 
ein internes Putty-Problem: Ich meine mich auch an Schriftarten zu 
erinnern, die nicht gut zusammen mit UTF-8 in Putty funktionieren, finde 
dazu aber gerade keinen Link mehr, ärgert mich gerade etwas.

Allgemein hilfreich zum Thema finde ich folgenden Link:

http://www.michael-schummel.de/2007/10/22/putty-und-utf-8/

Inzwischen bin ich jedoch fast vollständig weg von Putty, hin zu 
mobaxterm. Dies ist im Endeffekt eine cygwin bash mit X-Server und 
hübscher Oberfläche, lässt sich auch leichter über mehrere Rechner 
hinweg synchron halten und hat eine lesbare (lies: bearbeitbare) 
Konfiguration. Dank "richtiger" shell habe ich seither auch weniger 
Zeichnsatzprobleme.
http://mobaxterm.mobatek.net/support/documentation.html

Wo das nicht nicht einsetzbar ist nutze ich (aus verschiedensten 
Gründen) nicht putty, sondern kitty: http://kitty.9bis.com/

Aber das nur am Rande, da nicht die Fragestellung.

> Wenn ich bei Putty "translation" auf UTF-8 stelle, muss ich auf
> einem Server "export LC_CTYPE=de_DE.UTF-8" oder etwas in der Art
> machen, damit vim richtig funktioniert, weil sonst steht locale
> auf "de_DE at euro".

Ich löse das für mich zufriedenstellend mit folgender Einstellung in 
Putty für alle Verbindungen:
-->Windows-->Translation-->Remote character set: UTF-8
-->Windows-->Translation--> "Adjust line drawing characters"
    * [x] Use Unicode line drawing code points
-->Connection-->Data-->"Terminal details": Terminal-type string: "linux"
-->Connection-->Data-->"Environment variables":
   * die drei Variablen LANG, LC_ALL *und* zusätzlich LC_CTYPE
     auf "de_DE.utf8"

Das gleiche (und mehr) erreiche ich in meinen ~/.ssh/config Einstellungen:
> # This enables sending locale enviroment variables LC_* LANG, see ssh_config(5).
> SendEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES
> SendEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT
> SendEnv LC_IDENTIFICATION LC_ALL
> SendEnv http_proxy EDITOR CONCURRENCY_LEVEL HISTCONTROL GREP_OPTIONS no_proxy DEBFULLNAME COLORTERM GREP_COLOR

Achtung!
Der ssh Server des Zielsystems (/etc/ssh/sshd_config) muss unter 
Umständen konfiguriert werden, damit die Variablen auch durch gereicht 
werden: "AcceptEnv", siehe http://linux.die.net/man/5/sshd_config

Standardmäßig lasse ich einige Variablen zu. Die Anmerkung der Manpage 
dazu sollte man unbedingt lesen und idealerweise auch verstehen.

> Für lokale xterms und Consolen könnte man sich das vielleicht
> noch via /etc/profile hinbiegen, aber ich hab hier ja oft
> auch ein remote xterm, was ein SSH gemacht hat und ein ganz
> anderes xterm sein kann, als das lokale.

Siehe oben, Konfiguration des ssh-servers.

> Ich hab schon viel gegoogelt, aber nicht herrausgefunden, wie das
> Terminal-Encoding nun automatisch herausgefunden werden soll.

Gar nicht! Terminalencoding ist Sache des Nutzers, Du _musst_ es für 
Dich passend einstellen. Das beherrschen alle mir bekannten seit Jahren 
ohne größere Schwierigkeiten.

Das eigentliche Problem dabei ist, dass:
a.) die Gegenseite Deine Umgebung auch bereitstellen kann
b.) die Variablen auch über ssh weiter gegeben werden können

Im a.)-Fall kann ich mir mit hostspezifischen Einträgen in meiner 
privaten ssh-config helfen, die das eben passend umkonfigurieren.

Im b.)-Fall hilft nur eine Anfrage an die Administration des Systems, 
als User kannst Du da nichts machen.

imho: Eine freundliche Mail an den Admin des Servers hilft jedoch 
erstaunlich oft, in beiden Fällen ;)

> Kann ja nicht sein, dass ich immer wissen muss, was mein xterm
> macht und dann per Hand LC_CTYPE setzen muss. Ich hatte mal
> probiert, dass mit putty ins Environment eintragen zu lassen, hat
> aber keinen sichtbaren Effekt[...]
> Wie macht man das richtig?

siehe oben: per default reicht der sshd die Variablen nicht durch.

> Die ganzen UTF-8 HOWTOs, die ich fand, gehen scheinbar von der
> irrigen Annahme aus, man würde immer, überall, auf allen Systemen
> und unbedingt UTF8 machen, was ja wohl kaum der Normalfall sein
> dürfte.

Ha! Ich sag mal so: Der Idealzustand ist seit längerem: "immer und 
überall UTF-8". Und leider leben wir halt nicht in einer perfekten Welt.

Und wenn dann einige Leute, sei es aus Unwissenheit oder Bequemlichkeit, 
lieber tagelang alles verschlimmbesser fummeln, als Ihre Systeme mal 
vernünftig einzustellen... Tja, dann kann man nicht sehr viel mehr 
machen als da herum zu arbeiten: Von daher ist Dein Ansatz eines 
Workarounds vielleicht nicht unbedingt der schlechteste.

> Ich synchronisiere meine ~/.rc files mit GIT, möchte also
> systemspzifische hardkodierte Defaults vermeiden (wobei das ja eh
> nicht hilft, weil es ja vom Terminal abhängt).

Leider korrekt: Daher sorge ich lieber dafür die Systeme anzugleichen.
Wo das nicht geht kommt man um spezifische Hacks leider nicht herum.

> oki,
>
> Steffen

Hoffe die Mail hilft Dir etwas, lg

Freundliche Grüße / Best Regards

         Lutz Willek



Mehr Informationen über die Mailingliste linux-l