デーモンモードでemacsを実行していますが、実行中のサーバーとの接続が失われました。再接続して実行すると
emacsclient -nc
エラーが発生しました。
localhostポート6012に接続中:接続が拒否されました。
間違い:ディスプレイlocalhost:12.0を開くことができません。
デーモンがまだ実行されているようですが、接続方法がわかりません。提案はありますか?
関連性があるかもしれないし、そうでないかもしれない他の興味深い事実:
スクリーンセッションを介してヘッドノードに接続し、サーバーの他のサイドノードに接続します。
私は数日間この設定を実行してきましたが、通常は問題なく再接続できます。
デーモンを再起動できると確信していますが、ジョブセッションはmatlab-emacsを介して対話する実行中のmatlabジョブにリンクされているので、ジョブセッションを再開したいと思います。
編集:Gilesの提案を試しましたが、まだ問題があります。
echo $DISPLAY
返品
ローカルホスト:18.0
スクリーンセッションに入って実行
export DISPLAY=localhost:18.0
スクリーンセッションでecho $ DISPLAYを再度実行できます。
ローカルホスト:18.0
これで emacsclient -nc が返されます。
間違い:ディスプレイlocalhost:18.0を開くことができません。
これで、スクリーンセッションを実行しているコンピュータは同じモニタを使用していますが、まだ接続されていません。
ちなみに私も試してみました
export display=localhost:18
edit2:私のシステムアーキテクチャに関する注意事項私のオフィスのラップトップはSSH経由で "host1"サーバーに接続されています。 Host1には複数のノードシステムがあります。まず、画面セッションを作成またはログインします。
screen -S ohnoplus-five
その後、node005に接続します。
ssh node005
その後、node005をログアウトせずに画面から切り離して再接続します。
スクリーン-R オノプラス-5
ホスト1で
Gillsの提案に従って、私のローカルノートブックではなく、ホスト1のecho $ DISPLAYが返したディスプレイであるimport DISPLAY = localhost18.0を実行しました。
答え1
リモートGUI(X11)接続TCPポート6000+経由NどこN表示番号です。したがって、両方のメッセージは同じ問題を示します。一部のプログラムはモニタ12に接続しようとしますが、失敗します。
EmacsclientはX11接続を確立しませんが、EmacsはX11接続を確立します。したがって、このメッセージが表示された場合は、EmacsclientがEmacsに接続して新しいフレームを開くように指示したことを意味します。 EmacsclientがX11ディスプレイを使用できると思う場合はGUIフレームを要求し、そうでない場合は端末フレームを要求します。環境変数を設定した後、DISPLAY
EmacsclientはX11ディスプレイを使用できると仮定します。
DISPLAY
環境変数は、X11接続をローカルコンピュータに戻すときにSSHによって自動的に確立されます。ただし、既存のScreenセッションに接続すると、Screenセッション内で設定された変数を含む環境が取得されますDISPLAY
。接続を切断して再接続すると、ディスプレイ番号が同じ²にならないことがあります。
変数を更新するには、DISPLAY
Screenセッションから切り離して実行してecho $DISPLAY
SSH設定値(たとえばlocalhost:13
)を確認し、Screenセッションに再接続して実行しますexport DISPLAY=localhost:13
(または正しい数値)。 screenセッションに複数のウィンドウがある場合は、各ウィンドウでこれを行う必要があります。新しいウィンドウを作成する場合は、Ctrl+ A :setenv DISPLAY localhost:13`と入力してEnter画面自体に環境変数を設定すると、新しいウィンドウが正しく機能していることを確認できます。
必要に応じて設定を解除するか、DISPLAY
を実行してターミナルフレームを開くことができますemacsclient -nw
。
1 SSHは10から始まるディスプレイ番号付けを使用し、ローカルディスプレイには0〜9の数字だけを残します。通常、12が表示されている場合、これはSSH経由で開かれた3番目のGUI接続であることを意味します。
²実際には、ネットワークの問題が原因で接続が切断され、すぐに再接続された場合、リモートコンピュータはまだネットワークの問題を認識していない可能性があります。クライアントがメッセージを送信してから時間がかなり経過したことだけがわかりますが、これは正常です。非アクティブ - この場合、リモートコンピューターに関する限り、モニター12は引き続き使用されています。
SSHホップが複数あり、ローカルシステムから中間システムへの接続が中断され復元された場合、復元後に中間システムの表示番号が変更されましたが、中間システムから最終システムへのSSH接続はまだ維持されます。元の表示番号を渡します。
この場合、最も簡単な方法は、最終マシンでのみScreenを実行し、中間マシンをそのまま使用することです。代理人。次へ追加
Host node[0-9]*
ProxyCommand ssh -W %h:%p host1
あなたに~/.ssh/config
走ってくださいssh node005
。その後、仲介機について心配する必要はありません。
Screenを中間システムで実行する必要がある場合は、変数を更新した後にホスト1からnode005へのSSH接続を再起動する必要がありますDISPLAY
。 (以前のディスプレイ番号から新しいディスプレイ番号にTCP接続を渡すこともできますが、これは以前のディスプレイ番号がこれまで再利用されていない場合にのみ機能します。)