Назад | Перейти на главную страницу

Как мне восстановить упаковку (xterm | gnome-terminal) после того, как telnet на оборудование HP испортило ее?

Я подключаюсь к коммутатору HP по telnet с моего (xterm | gnome-terminal). Выйдите из Telnet. Это нарушает поведение терминала. (Если у вас нет коммутатора HP для telnet, можно cat этот файл вместо этого в терминале).

Теперь введите очень длинную команду (более одной строки, и вы увидите, что вторая строка не переносится на следующую строку, а «остается в текущей строке». Это делает невозможным редактирование предыдущих команд или использование терминала для что-нибудь длиннее одной строки.

Видеть, что cat filewithlonglines.txt или git log -p показывает только первые 80 символов строки длиннее 80 символов.

reset не работает. stty -g > stty.works, запустите telnet, stty $(stty.works) восстанавливает изменено stty настройки, но поведение по-прежнему нарушено.

Мне нужно закрыть терминал и запустить новый. :-(

Что я могу делать кроме reset и stty сохранить / восстановить, чтобы исправить мои сломанные терминалы после telnet?

РЕДАКТИРОВАТЬ: Я обнаружил, что если я использую screen как в одной из этих команд:

screen bash -c "cat hptelnet.escape ; bash"

или

screen telnet hpswitch

Тогда мой терминал по-прежнему работает нормально, когда экран выходит. Так что обходной путь - поставить экран перед командой, которая портит мой терминал, но я все же хотел бы знать, как восстановить терминал, который уже был испорчен ...

В конкретном случае проблемы, вызванной переключателями HP, я обнаружил (с помощью script, который записывает каждый байт, отправленный на терминал), что режим автоматического переноса терминала был отключен с помощью кода VT100 "<ESC>[?7l"и никогда больше не включается.

Код VT100 для повторного включения автоматического обтекания: "<ESC>[?7h", которую вы можете отправить в терминал с помощью этой команды:

printf "\033[?7h"

Однако это предполагает, что ваш терминал совместим с VT100, что, хотя и является хорошей ставкой, не является достоверным. Более правильный способ сделать это - полагаться на настройки terminfo и запускать эту команду:

tput smam

который генерирует тот же результат, что и выше printf команда, предполагая терминал в стиле VT100. Возможностью terminfo "smam" является "Режим установки: автоматические поля". Его партнером является «rmam»: «Режим сброса: автоматические поля».

Кстати очень желаю ssh имел параметр конфигурации «LocalEndCommand» (аналогичный «LocalCommand»), так что я мог просто автоматически запускать этот un-fucker в конце каждого ssh-соединения коммутатора HP.


† Thanks, HP!

‡ Как вы думаете, HP сделала такую ​​ставку или нет? Я предполагаю, что они это сделали, и всегда присылают коды VT100. В этом случае, если ваш терминал несовместим с VT100, у вас не будет этой проблемы с самого начала.

Кроме reset Есть еще несколько вещей, которые я всегда пробую. И иногда это помогает восстановить работоспособность терминала:

  1. resize (в некоторых системах его нет в $ PATH, обычно это что-то вроде / usr / X11 / bin /)
  2. echo "^v^o" (Нажмите CTRL+V а потом CTRL+O, это старый трюк Unix, который очень часто помогал мне после того, как я случайно сделал cat в двоичном файле.)
  3. stty sane

Дополнительно попробуйте:

# https://gist.github.com/raw/1294767/a1ea19be2f70b092057a5232c2d05a0ee9bf145b/hptelnet.escape
cat hptelnet.escape

tput reset

# each of the following commands may work as well
tput smcup   # string to start programs using cup
tput is2     # initialization string; init_2string


# ... and as a last resort try ...
# cf. "The Alternate Character Set", 
# http://www.in-ulm.de/~mascheck/various/alternate_charset/

# added \033c to clear screen
alias vtn='echo "X[mX(BX)0OX[?5lX7X[rX8Xc" | tr "XO" "\033\017"'   
vtn