Jak naprawić PuTTY pokazujący zniekształcone znaki?

76

Łącząc się z komputera z systemem Windows 7 za pośrednictwem SSH do serwera Ubuntu za pomocą PuTTY , pojawia się kilka błędów ekranu:

wprowadź opis zdjęcia tutaj

To znaczy:

  • „Podwójne losowanie” wybór w Midnight Commander (MC).
  • Inne znaki, takie jak elementy linii, są rysowane jako niewłaściwe znaki (np. „” zamiast „|”).

Połączyłem się z tym samym serwerem Ubuntu z terminalem i SHH z systemu Mac OS X i nie powoduję zakłóceń na ekranie (tzn. Wszystko wygląda i działa poprawnie). Próbowałem już grać z ustawieniami czcionek w PuTTY, zmieniając go z Courier New na Consolas, ale bez powodzenia.

Moje pytanie brzmi zatem:

Jak skonfigurować PuTTY do poprawnego wyświetlania znaków specjalnych, a nie podwójnego rysowania / zastępowania linii ekranu?

Uwe Keim
źródło
1
Z SecureCRT: Wybierz Opcje -> Opcje sesji -> Terminal -> Wygląd -> Kodowanie znaków -> wybierz: UTF-8. Mam nadzieję, że pomogą innym takim jak ja!
Vunb

Odpowiedzi:

72

Prawie na pewno ustawiłeś niewłaściwy zestaw znaków w ustawieniach PuTTY .

Sprawdź zestaw znaków w systemie zdalnym, uruchamiając polecenie:

locale

Powinno to zwrócić coś takiego:

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=

Sprawdź więc ustawienia PuTTY w sekcji Tłumaczenie i upewnij się, że UTF-8ustawiłeś zestaw znaków.

Ponowna konfiguracja PuTTY

Konieczne może być również dostosowanie ustawienia rysowania linii, ale prawdopodobnie nie jest to prawdopodobne.

Michael Hampton
źródło
14
To nie jest wystarczające we wszystkich przypadkach. Powinieneś także wyeksportować następującą zmienną do swojego środowiska: NCURSES_NO_UTF8_ACS=1 [więcej informacji ]
Piotr Jurkiewicz,
2
w przypadku localezwrotów POSIXprawdopodobnie używasz usePAM w konfiguracji sshd
user2693017
4
Jeśli ustawienia regionalne zwracają coś podobnego POSIX, wydaj update-locale LANG=en_US.utf8polecenie w wierszu polecenia - patrz thomas-krenn.com/de/wiki/Locales_unter_Ubuntu_konfigurieren
koppor
@ michael-hampton, mój system jest skonfigurowany do używania en_US.UTF-8. Widzę, że różne miejsca mówią różne rzeczy o lokalizacji. Niektóre miejsca wspominają, że powinienem używać en_US, podczas gdy inne miejsca wspominają, że powinienem używać de_DE. Wiedziałem, że widziałem, zanim grep i inne podstawowe narzędzia używają ustawień regionalnych do ustawienia zestawu znaków. Jakie są implikacje zmiany tego?
alpha_989
@koppor, wspomniałeś o zmianie ustawień regionalnych na en_US, a Michael wspomniał o zmianie ustawień regionalnych na de_DE. Który jest prawidłowy?
alpha_989,
34

Miałem problem z aptitudeprogramem Debiana, mimo że miałem UTF-8 jako zestaw moich znaków. Dla mnie zadziałało ustawienie „Połączenie> Dane>” Ciąg terminala ”na„ kit ”zamiast„ xterm ”- najwyraźniej Putty ignoruje sekwencję znaków, aby przejść do trybu rysowania: http: //www.chiark.greenend .org.uk / ~ sgtatham / putty / wishlist / utf8-plus-vt100.html

wprowadź opis zdjęcia tutaj

Daniel Sokołowski
źródło
2
Doskonały. Łatwe i działa. (Przynajmniej działa na Debianie / Ubuntu.)
Nate
1
Działa to dobrze (na PuTTY), ale wprowadza kolejny (mniejszy) problem: zmiana tytułu okna zdalnie sterowanego nie działa.
ADTC
Doskonały. Rozwiązano problem z ncmpc na Ubuntu Artful.
weberjn
8

Dwa podstawowe czynniki to Window / Translation UTF-8 w putty i ustawienia regionalne w Linuksie, zgodnie z instrukcją tutaj i wieloma innymi miejscami.

Ponadto w putty może pomóc ustawić ciąg typu Connection / Data / Terminal na putty i / lub w Linuksie na export NCURSES_NO_UTF8_ACS=1. Te dwa są również wymienione wiele miejsc.

Ale: nadal możesz otrzymywać bloki dla niektórych znaków, ponieważ domyślne czcionki, takie jak Courier i Lucida Console, nie mają wszystkich znaków Unicode. Pobierz i zainstaluj http://dejavu-fonts.org/wiki/Download i ustaw kit, aby go używał.

Ta ostatnia sztuczka była mi niezbędna, aby uzyskać noping(zalecane!) Wyświetlanie wszystkich znaków graficznych.

GauteLund
źródło
2
export NCURSES_NO_UTF8_ACS=1działało najlepiej dla mnie. Muszę tylko pamiętać o włączeniu tej -Eopcji sudopodczas uruchamiania, iftopaby zachować to ustawienie środowiska. sudo -E iftop
HeatfanJohn
5

W moim przypadku (Ubuntu 14.04) problem został spowodowany brakiem

UsePAM yes    

wpis w / etc / ssh / sshd_config jako /etc/pam.d/sshd pam konfiguracja jest domyślnie odpowiedzialna za ładowanie / etc / default / locale do środowiska użytkownika.

fakej Gazeta.pl
źródło
Naprawiłem to dla mnie.
Martin
5

Dla wszystkich biednych starych facetów z VMS, którzy tu kończą:

PuTTY → Okno → Tłumaczenie → Zdalny zestaw znaków → DEC-MCS

pracował dla mnie.

David Rabahy
źródło
4

Szukałem wielu rozwiązań w tym zakresie, używając komputera Docker (zarówno na poziomie lokalnym, jak i na komputerach skonfigurowanych przez administratora systemu). W moim Kit wszystko było w porządku (miałem UTF-8), korzystałem z innego klienta SSH i miałem dokładnie ten sam problem.

Bieganie:

mc -ac

rozwiązałem problem (ale nie do końca) i szukałem kompletnego rozwiązania.

Po przeczytaniu wielu sugestii w końcu znalazłem tę, która rozwiązała mój problem.

W terminalu po uruchomieniu:

locale

sprawdź ustawienia regionalne, które ustawiłeś. Miałem domyślnie Custawienia regionalne.

Aby zweryfikować wszystkie zainstalowane ustawienia regionalne, uruchom locale -a

Mam na przykład:

C
C.UTF-8
POSIX

domyślnie.

Rozwiązaniem jest eksportowanie LANGzmiennych o C.UTF-8takich ustawieniach regionalnych, jak:

export LANG="C.UTF-8"

Możesz oczywiście dodać go, .bashrcaby automatycznie ustawiał się w swoim profilu.

Marcin Nabiałek
źródło
Jakie są skutki uboczne zmiany zmiennej LANG? Jeśli miałeś już C.UTF-8 jako LANG, po co eksportować go ponownie?
alpha_989
2

Kolejny powód w jakiś sposób związany z pam, który może wpływać na hosty z uwierzytelnianiem powerbroker / pbis / podobnie.

grep /etc/pam.d dla wystąpienia „lsass”:

grep -r lsass /etc/pam.d

jeśli zobaczysz w danych wyjściowych coś takiego:

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

to prawdopodobnie jest to podstawowa przyczyna problemu. Szybka poprawka polega na zamianie „wystarczającej” na „opcjonalną” obok modułu pam_lsass, aby wyglądało to tak:

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

/etc/pam.d/common-session (lub inny plik z podobnym wpisem - może być ich kilka) jest prawdopodobnie dołączony przez /etc/pam.d/sshd przed załadowaniem pam_env, więc jeśli przetwarzanie modułów pam zostanie zakończone zanim dojdzie do pam_env, / etc / default / locale nie jest ładowany do środowiska użytkownika i masz zniekształcone znaki.

fakej Gazeta.pl
źródło
2

Po 15 latach znów się zirytowałem i ponownie zacząłem szukać w Google, znalazłem to, wybrałem

zmień ustawienia → okno → tłumaczenie → zdalny zestaw znaków → „użyj kodowania czcionek”

i to naprawiło.

Jason
źródło
2

Musiałem ustawić na stronie OknoTłumaczenie zestaw znaków na:

ISO-8859-1: 1998 (Latin-1, Europa Zachodnia)

Wtedy, i tylko wtedy, znaki kreskowania pojawiły się poprawnie.

zootal
źródło
1

Uruchamianie mc w ten sposób (ustaw locale na en) działa dla mnie:

$ LC_ALL=en mc
marioosh
źródło
1

działało dla mnie „Połączenie, dane, ciąg terminala = ansi” plus „Okno, tłumaczenie, zdalny zestaw znaków = Użyj kodowania czcionek”, a następnie set TERM=ansipo stronie Uniksa.

PS. Pamiętaj, aby wyłączyć inteligentne cytaty, jeśli jesteś zmuszony używać MS-Word.

TRM
źródło
1
Powinieneś także wspomnieć, że nie łączysz się z nowoczesnym systemem LInux, ale starszym systemem innym niż Linux.
Michael Hampton
1

Mój problem polegał na tym, że kit jest skonfigurowany jako UTF-8, ale zdalny system to ISO-8859-1

zachodnia Europa, więc zmieniłem to na kit i wszystko działało dobrze.

Zrzut ekranu Putty

velteyn
źródło