2017-08-19 5 views
0

ここで問題を言い換えると、xterm.js + ws + ssh2端末のサイズ変更信号(SIGWINCH)をsshサーバに送信しない

私は、 'xterm.js'、 'ws'、および 'ssh2'ノードモジュールを使用しているweb-appを持っています。すべて素晴らしいです。 1つのことを除いて:

SIGWINCHウィンドウサイズ変更信号は、sshdサーバーまたはssh2ストリームには適用されません。他のsigs、esc、ansiはうまく動作します。 Esc [8]は消えます。

実際のxtermでは、echo -e "\e[8;30;120t"は両端のターミナルのサイズを変更します。ここにはない。 sock.send("\u001b[8;30;120t")は何もしません。

私のノードのアプリケーションサーバー上のConsole.logがEscape [8(または\ e、\ u001b、または\ x1b)がそれをしないことを示しています。

私はクライアント上でterm.resize(x、y)を実行できますが、現在はサーバー上でsttyを使用する必要があります。 Ssh2のptyはログイン時にのみ設定します。 SIGWINCHをどのように伝播させるのですか?それはどこに閉じ込められていますか?

答えて

0

したがって、この質問に対する私自身の答え:ブラウザでは、term.resize(cols、rows)を使ってローカル端末のサイズを変更します。 websocket上のansiエスケープシーケンスを介してcolと行を送信します。次に、ノードサーバーアプリケーションのssh2クライアントで、Regexpを使用してサイズ変更エスケープシーケンスと一致させ、2番目と3番目の数字を抽出します。これは、列と行の数です( '8'はサイズ変更のコードです)。抽出されたcolsと行(ssh2 psuedoterminalにsshサーバにsigwinchとcols/rowsを送るように指示する)とssh2クライアントのサイズ変更機能を使用してください。理想的ではありませんが、私が見つけた方が良い方法があることはわかっていますが、ブラウザーで関数を作成してウィンドウリサイズのイベントリスナーに追加すると美しく動作します。これで、ブラウザウィンドウのサイズを変更したとき、またはソフトキーボードがポップアップしたりモバイルに隠れたりしたときに、クライアントとサーバーの両方で端末セッションのサイズが適切に変更されるようになりました。

関連する問題