Wie behebt man PuTTY, wenn verstümmelte Zeichen angezeigt werden?

76

Bei der Verbindung von einem Windows 7-PC über SSH mit einem Ubuntu-Server unter Verwendung von PuTTY erhalte ich einige Bildschirmfehler:

Bildbeschreibung hier eingeben

Also:

  • "Doppeltes Zeichnen" der Auswahl in Midnight Commander (MC).
  • Andere Zeichen wie Linienelemente werden als falsche Zeichen dargestellt (z. B. "-" anstelle von "|").

Ich habe mit einem Terminal und SHH von einem Mac OS X aus eine Verbindung zum selben Ubuntu-Server hergestellt und bekomme diese Bildstörungen nicht (dh alles sieht aus und funktioniert ordnungsgemäß). Ich habe bereits versucht, mit den Schriftarteinstellungen in PuTTY zu spielen, indem ich sie von Courier New zu Consolas geändert habe, aber ohne Glück.

Meine Frage lautet daher:

Wie konfiguriere ich PuTTY so, dass Sonderzeichen korrekt angezeigt werden und Bildschirmzeilen nicht doppelt gezeichnet / überschrieben werden?

Uwe Keim
quelle
1
Mit SecureCRT: Wählen Sie Optionen -> Sitzungsoptionen -> Terminal -> Darstellung -> Zeichencodierung -> Wählen Sie: UTF-8. Hoffe hilf anderen wie mir!
Vunb

Antworten:

72

Sie haben mit ziemlicher Sicherheit in Ihren PuTTY-Einstellungen den falschen Zeichensatz eingestellt .

Überprüfen Sie den Zeichensatz auf dem fernen System, indem Sie den folgenden Befehl ausführen:

locale

Dies sollte ungefähr so ​​aussehen:

LANG=de_DE.UTF-8
LC_CTYPE="de_DE.UTF-8"
LC_NUMERIC="de_DE.UTF-8"
LC_TIME="de_DE.UTF-8"
LC_COLLATE="de_DE.UTF-8"
LC_MONETARY="de_DE.UTF-8"
LC_MESSAGES="de_DE.UTF-8"
LC_PAPER="de_DE.UTF-8"
LC_NAME="de_DE.UTF-8"
LC_ADDRESS="de_DE.UTF-8"
LC_TELEPHONE="de_DE.UTF-8"
LC_MEASUREMENT="de_DE.UTF-8"
LC_IDENTIFICATION="de_DE.UTF-8"
LC_ALL=

Überprüfen Sie daher Ihre PuTTY-Einstellungen unter Übersetzung und stellen Sie sicher, dass Sie UTF-8als Zeichensatz festgelegt haben.

PuTTY Neukonfiguration

Möglicherweise müssen Sie auch die Strichzeichnungseinstellung anpassen, dies ist jedoch wahrscheinlich nicht der Fall.

Michael Hampton
quelle
14
Dies ist nicht in allen Fällen ausreichend. Sie sollten auch die folgende Variable in Ihre Umgebung exportieren: NCURSES_NO_UTF8_ACS=1 [Weitere Informationen ]
Piotr Jurkiewicz
2
für den fall, dass sie localezurückkehren POSIX, haben sie usePAM wahrscheinlich in der sshd config
deaktiviert
4
Wenn das Gebietsschema so etwas zurückgibt POSIX, geben Sie es update-locale LANG=en_US.utf8in der Befehlszeile ein - siehe thomas-krenn.com/de/wiki/Locales_unter_Ubuntu_konfigurieren
koppor
@ michael-hampton, mein System ist für die Verwendung von en_US.UTF-8 konfiguriert. Ich sehe, dass verschiedene Orte verschiedene Dinge über das Gebietsschema aussagen. Einige Stellen erwähnen, dass ich en_US verwenden sollte, während andere Stellen erwähnen, dass ich de_DE verwenden sollte. Ich habe gesehen, bevor grep und andere Kern-Utils das Gebietsschema verwenden, um den Zeichensatz festzulegen, glaube ich. Was sind die Implikationen, um dies zu ändern?
alpha_989
@koppor, Sie erwähnten das Ändern des Gebietsschemas in en_US, während Michael das Ändern des Gebietsschemas in de_DE erwähnte. Welches ist richtig?
Alpha_989
34

Ich hatte ein Problem mit Debians aptitudeProgramm, obwohl ich UTF-8 als Zeichensatz hatte. Für mich funktionierte es, die Zeichenfolge "Verbindung> Daten> Zeichenfolge vom Terminaltyp" auf "Kitt" anstatt auf "xterm" zu setzen. Anscheinend ignoriert Putty die Zeichenfolge, um in den Zeichenmodus zu wechseln: http: //www.chiark.greenend .org.uk / ~ sgtatham / putty / wishlist / utf8-plus-vt100.html

Bildbeschreibung hier eingeben

Daniel Sokolowski
quelle
2
Ausgezeichnet. Einfach und es funktioniert. (Zumindest unter Debian / Ubuntu.)
Nate
1
Dies funktioniert gut (unter PuTTY), führt aber zu einem weiteren (geringfügigeren) Problem: Die ferngesteuerte Änderung des Fenstertitels funktioniert nicht mehr.
ADTC
Ausgezeichnet. Das Problem für ncmpc unter Ubuntu Artful wurde behoben.
weberjn
8

Die beiden Grundfaktoren sind Window / Translation UTF-8 in Kitt- und Gebietsschemaeinstellungen unter Linux, wie hier und an vielen anderen Stellen beschrieben.

Außerdem kann es hilfreich sein, in putty die Zeichenfolge Connection / Data / Terminal auf putty und / oder in Linux auf zu setzen export NCURSES_NO_UTF8_ACS=1. Diese beiden werden auch mehrfach erwähnt.

Aber: Möglicherweise erhalten Sie weiterhin Blöcke für bestimmte Zeichen, da die Standardschriftarten wie Courier und Lucida Console nicht alle Unicode-Zeichen enthalten. Laden Sie http://dejavu-fonts.org/wiki/Download herunter und installieren Sie es.

Dieser letzte Trick war notwendig, damit noping(empfohlen!) Alle Grafikzeichen angezeigt werden.

GauteLund
quelle
2
export NCURSES_NO_UTF8_ACS=1funktionierte am besten für mich. Ich muss nur daran denken, die -EOption sudobeim Ausführen iftopzu aktivieren, um diese Umgebungseinstellung beizubehalten. sudo -E iftop
HeatfanJohn
5

In meinem Fall (Ubuntu 14.04) wurde das Problem durch fehlende verursacht

UsePAM yes    

Der Eintrag in / etc / ssh / sshd_config als /etc/pam.d/sshd pam configuration ist standardmäßig dafür verantwortlich, / etc / default / locale in die Benutzerumgebung zu laden.

fakej Gazeta.pl
quelle
Das hat es für mich behoben.
Martin
5

Für alle armen alten VMS-Leute, die hier landen:

PuTTY → Fenster → Übersetzung → Remote-Zeichensatz → DEC-MCS

arbeitete für mich.

David Rabahy
quelle
4

Bei der Verwendung des Docker-Computers (sowohl auf dem Gebietsschema als auch auf Computern, die vom Systemadministrator eingerichtet wurden) habe ich nach vielen Lösungen gesucht. In meinem Putty war alles in Ordnung (ich hatte UTF-8), ich benutzte auch einen anderen SSH-Client und hatte genau das gleiche Problem.

Laufen:

mc -ac

löste das Problem (aber nicht vollständig) und ich suchte nach einer vollständigen Lösung.

Nachdem ich viele Vorschläge gelesen hatte, fand ich endlich den, der mein Problem löste.

Im Terminal, wenn Sie ausführen:

locale

Überprüfen Sie, welches Gebietsschema Sie festgelegt haben. Ich hatte standardmäßig CGebietsschema.

Um alle installierten Ländereinstellungen zu überprüfen, führen Sie den Befehl aus locale -a

Ich habe zum Beispiel:

C
C.UTF-8
POSIX

standardmäßig.

Die Lösung exportiert LANGVariablen mit dem folgenden C.UTF-8Gebietsschema:

export LANG="C.UTF-8"

Sie können es natürlich hinzufügen .bashrc, damit es automatisch in Ihrem Profil festgelegt wird.

Marcin Nabiałek
quelle
Was sind die Nebenwirkungen einer Änderung der LANG-Variablen? Wenn Sie C.UTF-8 bereits als LANG hatten, warum sollten Sie es dann erneut exportieren?
alpha_989
2

Ein weiterer Grund hängt irgendwie mit pam zusammen, der Hosts mit powerbroker / pbis / ebenfalls Authentifizierung betreffen kann.

grep /etc/pam.d für das "lsass" Vorkommen:

grep -r lsass /etc/pam.d

Wenn Sie in der Ausgabe etwas sehen wie:

/etc/pam.d/common-session:session       sufficient        pam_lsass.so

dann ist es wahrscheinlich die Ursache des Problems. Die schnelle Lösung besteht darin, "ausreichend" durch "optional" neben dem Modul "pam_lsass" zu ersetzen, damit es so aussieht:

/etc/pam.d/common-session:session       optional        pam_lsass.so

/etc/pam.d/common-session (oder eine andere Datei mit ähnlichem Eintrag - es gibt möglicherweise nur wenige) wird wahrscheinlich von /etc/pam.d/sshd eingeschlossen, bevor pam_env geladen wird, wenn die Verarbeitung von pam-Modulen abgeschlossen ist Bevor es zu pam_env kommt, wird die Datei / etc / default / locale nicht in die Benutzerumgebung geladen und Sie haben verstümmelte Zeichen.

fakej Gazeta.pl
quelle
2

Nach 15 Jahren wurde ich wieder genervt und googelte wieder herum, fand dies, wählte

Einstellungen ändern → Fenster → Übersetzung → Remote-Zeichensatz → "Schriftkodierung verwenden"

und das hat es behoben.

Jason
quelle
2

Ich musste auf der Seite FensterÜbersetzung den Zeichensatz einstellen auf:

ISO-8859-1: 1998 (Latin-1, Westeuropa)

Erst dann wurden die Strichzeichnungen korrekt angezeigt.

Zootal
quelle
1

Das Ausführen von mc auf diese Weise (setze das Gebietsschema auf en) funktioniert für mich:

$ LC_ALL=en mc
Marioosh
quelle
1

bei mir funktionierte "Verbindung, Daten, Terminal-Typ string = ansi" plus "Fenster, Übersetzung, Remote-Zeichensatz = Schriftkodierung verwenden" dann set TERM=ansiauf der Unix-Seite.

PS. Denken Sie daran, intelligente Anführungszeichen auszuschalten, wenn Sie gezwungen sind, MS-Word zu verwenden.

TRM
quelle
1
Sie sollten auch erwähnen, dass Sie keine Verbindung zu einem modernen LInux-System herstellen, sondern zu einem älteren Nicht-Linux-System.
Michael Hampton
1

Mein Problem war, dass Kitt als UTF-8 konfiguriert ist, aber das Remote-System ist ein ISO-8859-1

Westeuropa, also habe ich das auf Kitt geändert und alles hat gut funktioniert.

Putty-Screenshot

Velteyn
quelle