Terminal

telnet 到 HP 設備搞砸後,如何恢復 (xterm|gnome-terminal) 包裝?

  • August 12, 2014

我從我的 (xterm|gnome-terminal) 遠端登錄到 HP 交換機。退出遠端登錄。這破壞了終端的行為。(如果您沒有 HP 切換到遠端登錄,則可以在終端中cat 將此文件改為)。

現在輸入一個很長的命令(多於一行,並看到第二行沒有換行到下一行,而是“停留在目前行”。這使得無法編輯先前的命令或使用終端任何超過一行的東西。

看到cat filewithlonglines.txtgit log -p只顯示比 80 個字元長的行的前 80 個字元。

reset不起作用。stty -g > stty.works,執行 telnet,stty $(stty.works)恢復更改stty的設置,但行為仍然不正常。

我必須關閉終端並開始一個新的。:-(

resettelnet 後,除了stty保存/恢復來修復損壞的終端,我還能做什麼?

**編輯:**我發現如果我screen在這些命令之一中使用 like :

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”),這樣我就可以讓它在每個 HP switch ssh 連接結束時自動執行這個 un-fucker。


† 謝謝,惠普!

‡ 您認為惠普是否下注?我猜他們做到了,並且總是發送 VT100 程式碼。在這種情況下,如果您的終端不兼容 VT100,那麼您一開始就不會遇到這個問題。

引用自:https://serverfault.com/questions/322445