Як виправити PuTTY із відображенням скажених символів?


76

Під час підключення з ПК Windows 7 через SSH до сервера Ubuntu за допомогою PuTTY , я отримую деякі екранні помилки:

введіть тут опис зображення

Тобто це:

  • "Подвійний розіграш" виділення всередині Midnight Commander (MC).
  • Інші символи, як елементи рядка, малюються як неправильні символи (наприклад, "â" замість "|").

Я підключився до того ж сервера Ubuntu з терміналом і SHH від Mac OS X і не отримую цих екранів (тобто все виглядає і працює правильно). Я вже намагався грати з налаштуваннями шрифту всередині PuTTY, змінюючи його з Courier New на Consolas, але без удачі.

Моє питання, таким чином:

Як налаштувати PuTTY на правильне відображення спеціальних символів, а не на подвійне малювання / перезапис ліній екрана?


1
За допомогою SecureCRT: Виберіть Опції -> Параметри сеансу -> Термінал -> Зовнішній вигляд -> Кодування символів -> Виберіть: UTF-8. Сподіваюся, допоможіть іншим, як я!
Vunb

Відповіді:


72

Ви майже напевно встановили неправильний набір символів у своїх налаштуваннях PuTTY .

Перевірте набір символів у віддаленій системі, запустивши команду:

locale

Це має повернути щось на кшталт:

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=

Тому перевірте свої налаштування PuTTY в розділі Переклад і переконайтеся, що ви UTF-8встановили як набір символів.

Конфігурація PuTTY

Можливо, вам знадобиться також змінити налаштування малюнка лінії, але це, мабуть, малоймовірно.


14
Цього недостатньо у всіх випадках. Також слід експортувати у своє оточення таку змінну: NCURSES_NO_UTF8_ACS=1 [детальніше ]
Piotr Jurkiewicz

2
у випадку localeповернення у POSIXвас, ймовірно, вимкнено usePAM в налаштуваннях sshd
user2693017

4
Якщо локаль повертає щось на зразок POSIX, надрукуйтеupdate-locale LANG=en_US.utf8 у командному рядку - дивіться thomas-krenn.com/de/wiki/Locales_unter_Ubuntu_konfigurieren
koppor

@ Майкл-Хамптон, моя система налаштована на використання en_US.UTF-8. Я бачу, що різні місця говорять про різні речі про місцевість. У деяких місцях згадується, що я повинен використовувати en_US, а в інших місцях - я повинен використовувати de_DE. Я бачив, перш ніж grep та інші основні утиліти використовують locale для встановлення набору символів, я вважаю. У чому полягає зміна цього?
alpha_989

@koppor, ви згадали про зміну мови на en_US, тоді як michael згадав про зміну мови на de_DE. Який з них правильний?
alpha_989

34

У мене виникла проблема з aptitudeпрограмою Debian, навіть якщо я мав UTF-8 як набір своїх персонажів. Що для мене працювало - встановити 'Connection> Data>' Terminal type string 'на' putty 'замість' xterm '- мабуть, Putty ігнорує послідовність символів для переходу в режим малювання: http: //www.chiark.greenend .org.uk / ~ sgtatham / putty / список бажань / utf8-plus-vt100.html

введіть тут опис зображення


2
Відмінно. Легко і це працює. (Принаймні, це стосується Debian / Ubuntu.)
Нейт

1
Це добре працює (на PuTTY), але потім вводиться ще одна (більш незначна) проблема: зміна заголовка вікна з дистанційним керуванням більше не працює.
ADTC

Відмінно. Вирішено проблему для ncmpc на Ubuntu Artful.
weberjn


8

Два основні фактори - це вікно / переклад UTF-8 у налаштуваннях шпаклівки та локалізації в Linux, як тут прописано та багатьох інших місцях.

Крім того, це може допомогти в шпаклівці встановити рядок Connection / Data / Terminal на шпаклівку та / або в Linux для export NCURSES_NO_UTF8_ACS=1. Ці два також згадуються в декількох місцях.

Але: ви все одно можете отримати блоки для певних символів, оскільки шрифти за замовчуванням, як Courier та Lucida Console, не мають усіх символів Unicode. Завантажте та встановіть http://dejavu-fonts.org/wiki/Download та встановіть шпаклівку для його використання.

Цей останній трюк був мені необхідний, щоб я noping(рекомендував!) Показати всі графічні символи.


2
export NCURSES_NO_UTF8_ACS=1працював найкраще для мене. Мені просто потрібно пам’ятати, щоб використовувати цю -Eопцію, sudoколи я бігаю, iftopщоб зберегти цю настройку середовища. sudo -E iftop
HeatfanJohn

5

У моєму випадку (Ubuntu 14.04) проблема була викликана відсутністю

UsePAM yes    

запис у / etc / ssh / sshd_config як /etc/pam.d/sshd конфігурація pam відповідає за замовчуванням за завантаження / etc / default / locale у середовище користувачів.


Це зафіксувало це для мене.
Мартін

5

Для всіх вас, бідних старих хлопців VMS, які закінчуються тут:

PuTTY → Вікно → Переклад → Віддалений набір символів → DEC-MCS

працював на мене.


4

Я шукав багато рішень для цього під час використання Docker-машини (як локальної, так і на машинах, створених системним адміністратором). У моїй Putty все було добре (у мене було UTF-8), я використовував також інший клієнт SSH і мав абсолютно таку ж проблему.

Запуск:

mc -ac

вирішував проблему (але не повністю), і я шукав повного рішення.

Прочитавши багато пропозицій, я нарешті знайшов той, який вирішив моє питання.

У терміналі під час запуску:

locale

перевірте, яку локаль ви встановили. Я за замовчуванням мав Cлокаль.

Щоб перевірити всі встановлені локалі, запустіть locale -a

У мене є, наприклад:

C
C.UTF-8
POSIX

за замовчуванням.

Рішення експортує LANGзмінну з C.UTF-8локальним на зразок:

export LANG="C.UTF-8"

Ви, очевидно, можете додати його .bashrcдо автоматичного встановлення у вашому профілі.


Які побічні ефекти від зміни змінної LANG? Якщо у вас вже був C.UTF-8 як LANG, навіщо його експортувати знову?
alpha_989

2

Ще одна причина, пов’язана з пам’яттю, яка може вплинути на хостів, які мають powerbroker / pbis /, також автентифікацію.

grep /etc/pam.d для події "lsass":

grep -r lsass /etc/pam.d

якщо ви бачите у висновку щось на кшталт:

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

то це, мабуть, першопричина проблеми. Швидке виправлення полягає в заміні "достатнього" на "необов'язково" поруч із модулем pam_lsass, щоб воно виглядало так:

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

/etc/pam.d/common-session (або інший файл із подібним записом - їх може бути небагато), ймовірно, включений /etc/pam.d/sshd до завантаження pam_env, тому якщо обробка пам модулів закінчена до того, як перейти до pam_env, / etc / default / locale не завантажується в середовищі користувача, і у вас є символи зі скребками.


2

Через 15 років я знову роздратувався і знову покрутився, знайшов це, вибрав

змінити налаштування → вікно → переклад → віддалений набір символів → "використовувати кодування шрифту"

і це зафіксувало.


2

Мені довелося встановити на сторінці ВікноПереклад набір символів:

ISO-8859-1: 1998 (Латинська-1, Західна Європа)

Тоді, і лише тоді, чи правильно відображалися символи лінійних малюнків.


1

Запуск mc таким чином (встановити локаль на en) працює для мене:

$ LC_ALL=en mc

1

для мене працювало "З'єднання, Дані, Термінальний рядок = ansi" плюс "Вікно, Переклад, Віддалений набір символів = Використовувати кодування шрифту", а потім set TERM=ansiна стороні Unix.

PS. Не забудьте вимкнути розумні цитати, якщо вас змушують використовувати MS-Word.


1
Слід також зазначити, що ви підключаєтесь не до сучасної системи LInux, а до більш старої системи, яка не є Linux.
Майкл Хемптон

1

Моєю проблемою було те, що шпаклівка налаштована як UTF-8, але віддаленою системою є ISO-8859-1

Західна Європа, тож я змінив це на шпаклівці і будь-чому.

Скріншот шпаклівки

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.