web-dev-qa-db-ja.com

HP機器へのtelnetが混乱した後、(xterm | gnome-terminal)ラッピングを復元するにはどうすればよいですか?

(xterm | gnome-terminal)からHPスイッチにtelnetで接続します。 telnetを終了します。それは端末の動作を壊します。 (telnetへのHPスイッチがない場合は、代わりにターミナルでcatこのファイル を使用できます)。

ここで、非常に長いコマンドを入力します(複数行、2行目は次の行に折り返されませんが、「現在の行にとどまります」。これにより、前のコマンドを編集したり、次の端末を使用したりできなくなります。 1行より長いもの。

_cat filewithlonglines.txt_または_git log -p_は、80文字より長い行の最初の80文字のみを表示することを確認してください。

resetは機能しません。 _stty -g > stty.works_、telnetを実行し、stty $(stty.works)は変更されたstty設定を復元しますが、動作はまだ壊れています。

ターミナルを閉じて、新しいターミナルを起動する必要があります。 :-(

resetsttyの保存/復元以外に、telnetの後で壊れた端末を修正するために何ができますか?

EDIT:次のいずれかのコマンドのようにscreenを使用すると、次のことがわかりました。

_screen bash -c "cat hptelnet.escape ; bash"
_

または

_screen telnet hpswitch
_

その後、画面が終了しても端末は正常に動作します。したがって、回避策は、端末を台無しにするコマンドの前に画面を配置することですが、すでに台無しになっている端末を回復する方法を知りたいのです。 ..

4
Peter V. Mørch

HPスイッチによって引き起こされた問題の特定のケースでは、(端末に送信されたすべてのバイトを記録するscriptを使用して)、端末のオートラップモードがVT100コードを介してオフになっていることがわかりました。 <ESC>[?7l "その後、再びオンになることはありません。 

自動ラップをオンに戻すVT100コードは「<ESC>[?7h "、このコマンドで端末に送信できます:

printf "\033[?7h"

ただし、これは、端末がVT100に準拠していることを前提としています。これは、良い賭けではありますが、確実ではありません。 これを行うためのより正しい方法は、terminfo設定に依存して、次のコマンドを実行することです。

tput smam

これは、VT100スタイルの端末を想定して、上記のprintfコマンドとまったく同じ出力を生成します。 terminfo機能「smam」は「SetMode:AutomaticMargins」です。そのパートナーは「rmam」:「リセットモード:自動マージン」です。

ちなみに、sshに「LocalEndCommand」構成オプション(「LocalCommand」と同様)があり、すべてのHPスイッチssh接続の最後にこのアンファッカーを自動的に実行できるようにしたいと思います。


‡HPがその賭けをしたと思いますか?私は彼らがそうしたと思います、そして常にVT100コードを送ります。その場合、端末がVT100互換でない場合は、そもそもこの問題は発生しません。

4
wfaulk

resetの他に、私がいつも試していることがいくつかあります。そして時々それはターミナルの正気を回復するのを助けます:

  1. resize(一部のシステムでは、$ PATHになく、通常は/ usr/X11/bin /のようなものにあります)
  2. echo "^v^o" (押す CTRL+Vそしてその後CTRL+O、これは古いUnixのトリックであり、バイナリファイルに対して誤ってcatを実行した後、非常に頻繁に役立ちました。)
  3. stty sane
1
Paidhi

さらに試してみてください:

# 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
0
markc