私たちはSSHを介してテキストベースのプログラムを使用します。セッションは、いくつかの設定を実行し、シェルなしでプログラムを起動するログインスクリプトで始まります。パテではうまくいきます。モバイルSSHクライアントで使用しようとしています。テミウス。
問題は、xHarbourプログラムが画面の回転やキーボードのクローズなどの端末の変更を認識することです。したがって、端末のサイズを変更すると、xHarbourプログラムはコンソールのサイズを認識して変更します。
i ではstty x rows y columns
初期端末サイズを設定できます。
プログラムが始まる前にこれらのコマンドをinitスクリプトに入れようとしましたが、クライアントの画面サイズが変わると(キーボードオフ、画面回転)、自動的に値が変更され、出力がめちゃくちゃになります。また、shopt -u checkwinsize
シェルに影響を与え、端末が固定サイズを持つように見えますが、xHarbourプログラムには影響しません。
SSHセッションがその帯域内コマンドを受信しないようにする方法はありますか?ここ?私が知っている限り、termiusでは端末のサイズを設定できません。これを許可するAndroid(またはiOS)クライアントがありますか?
ターゲットシステムはCentos 6,7です。
答え1
LinuxおよびBSDシステムでは、端末のサイズが変更されると、端末に接続されている1つ以上のプロセスが信号を受信しますSIGWINCH
。デフォルトの動作はこの信号を無視することですが、画面ペインティング(ncursesを使用するプログラムを含む)を実行するプロセスはこの信号をキャプチャして調整します。それに従って表示。
SSHを介して送信されたメッセージは端末のサイズを変更し、プロセスはSIGWINCHを受信します。 OpenSSHは、すべての機能を備えた端末エミュレーションの一部であるため、これを制御する方法を提供せず、人々が実行したい端末の部分を選択して選択できるため、プログラム環境が非常に困難になります。ただし、プロセスに端末があることを望まない場合は、オプションを使用してSSHを介して呼び出すことはできますが、-T
そうではありません。また、端末や端末タイプが設定されていないため、画面を再描画できません。ただし、これはあなたが探している動作かもしれません。
画面が再描画されたくない場合は、これを無視してみてくださいSIGWINCH
。一部のncursesバージョンはそれを尊重しているようです。プロセスを1つにラップし、独自のptyを提供し、元の端末に渡すこともできます。しかし、それは非常に複雑です。
しかし、全体的に、これは一般的に望ましい動作ではないようです。プログラムは通常、理想的な標準のUnix動作と見なされる端末に応答する必要があります。正しく機能させると、レンダリングが大幅に損なわれ、通常は結果が不十分になります。