ssh
を使用して、リモートコンピューターのコマンドラインでいくつかのMATLABスクリプトを実行しています。これらのスクリプトは5 xterms
を起動し、sshを介して転送されます(-X
オプションを使用)。現時点ではコードをデバッグしているので、時々スクリプトを再起動しています。数回の実行ではすべてが正常に機能しますが、N回目(Nは乱数)の後で、次のエラーメッセージが表示されます。
xterm Xt error: Can't open display: localhost:10.0
xterm Xt error: Can't open display: localhost:10.0
xterm Xt error: Can't open display: localhost:10.0
xterm Xt error: Can't open display: localhost:10.0
xterm Xt error: Can't open display: localhost:10.0
この後、GUI関連の起動以外はsshを使い続けることができます。つまり、xterms
をリモートで起動できなくなります。私の唯一の回避策は、ssh接続を再起動することです。これで二度と気にならないようにこれを修正できますか?
システム
SSHは、デフォルトのセットアップで20分後に新しいX11接続をブロックします。これを回避するには、ssh -Y
ではなくssh -X
を実行するか、オプション[ForwardX11Trusted yes
in ~/.ssh/config
を設定します。
ssh -v
を実行すると、タイムアウト後に新しいアプリケーションがディスプレイに接続しようとすると、「ForwardX11Timeoutの期限が切れた後にX11接続が拒否されました」というメッセージが表示されます。 -v
がない場合(他の多くのデバッグ出力が発生します)、取得できる情報はすべて「ディスプレイを開けません」です。
その理由を説明するために、少し背景を説明する必要があります。 X11転送により、宛先マシンはローカルXサーバーに接続できます。これはセキュリティの面で重要です。 X11サーバーはアプリケーションを互いに分離しません。これにより、ウィンドウマネージャーはウィンドウを移動したり、必要に応じて強制終了したりできます。また、マクロ処理ツールがそれを実行したり、キーストロークを挿入したりできるようになります。また、どのアプリケーションでもクリップボードを読み取って変更できます。これにより、ローカルデータよりもリモートアプリケーションに多くの機能が提供されます。リモートマシンが信頼されていない場合、テキストモードの接続では、リモートマシンで最悪の事態が発生する可能性があります。しかし、自由なX11接続では、ローカルマシンでも問題が発生する可能性があります。
X11には“ SECURITY extension ”が含まれており、一部のアプリケーションを信頼できないものとして宣言できます。信頼されていないアプリケーションは、他のアプリケーションでキーストロークを監視したり挿入したりできないなど、取得する権限が少なくなります。 SSHは、接続を信頼できる(ForwardX11Trusted yes
またはssh -Y
)または信頼できない(ForwardX11Trusted no
またはssh -X
)として宣言する オプション を提供します。
SSHは長い間、信頼できない接続を確立することをデフォルトとしてきました。追加の安全機能として、信頼できない接続はSSHセッションの開始時に数分間しか確立できません。最初は2分( ssh.c
1.202 )、次に20分( ssh.c
1.207 )。安全機能として、私は要点はわかりません。信頼できないアプリケーションをすでに実行している場合、後で別のアプリケーションを起動できるかどうかは問題です。 SSHの最近のバージョン( ssh.c
1.34 、 clientloop.c
1.221 )は、ForwardX11Timeout
でタイムアウトを構成可能にしました。
残念ながら、 X.orgのバグ (現時点では非公開)のため、 ForwardX11Timeout
の値を過度に大きく設定することはできません。そうしないと、Xサーバーがクラッシュします 。
信頼できる接続は、この有効期限メカニズムの影響を受けません。トレードオフは、リモートマシンのマルウェアまたは悪意のある管理者がローカルマシンを制御できることです。これはしばしば許容されますが、決めるのはあなた次第です。
私はこれらすべてを試しましたが、同じ問題「プロトコルが指定されていません」がまだありました。すべての解決策を試した後で誰かが同じ問題に直面している場合は、まったく複雑ではないことがわかります。
Xmingログファイルにエラーメッセージが見つかりました。 Xming(タスクバーで実行中)>>ログファイルを表示...
したがって、システムを再起動してXmingを実行できます。Xmingが適切に実行されている場合、ログファイルの行数が多くなります。次に同じことをします#export DISPLAY="IP:0.0"
、これで動作するはずです。
2台のモニターで別の問題が発生しましたが、同じメッセージ「プロトコルが指定されていません」が見つかりました。問題は2台目のモニターに関するものであることは明らかではありませんでした。だから私は1つのモニターを停止しました、あなたが複数のモニターを使いたいならここにコマンドがあります
Xming -query <IP address of remote Host> -nodecoration -screen 0 @2 -clipboard