/ / SSH、screen、XDISPLAY-linux、ssh、gnu-screen

SSH、screen、およびXDISPLAY - linux、ssh、GNU-screen

screenを使用して作業セッションを永続化し、複数のマシンから同じセッションに接続します。 XDISPLAY変数が次のようにSSHと画面を設定するにはどうすればよいですか? 内部 永続的な画面セッションは常に、現在接続しているマシンに設定されていますか?

すなわち。仕事でスクリーンセッションを開始し、仕事用のマシンで実行されているXサーバーを使用するgvimを使用します。後で、自宅から同じセッションに接続し、gvimも使用したいと思います。しかし今回は、gvimで自宅のマシンのXサーバーを使用したいと思います。別のマシンから接続するたびにXDISPLAYを手動で更新できることに気付きましたが、自動化されたシステムが必要です。

実際にできればボーナスポイント 動く 実行中の作業マシンから自宅のマシンへのgvim。私は試した xmove しかし、それをうまく再生させることはできませんでした。

回答:

回答№1は5

以下は手動による解決策ですが、できなかった理由はありません。 リモートログイン時にエイリアスまたはスクリプトを使用して、自動的に実行します。

ローカルシェルがDISPLAY変数を適切に設定すると仮定すると、 あなたが使うことができます screen -X 次のコマンドをリモート画面に送信する前に 接続しています。

# set future remote shells started by screen to have the correct XDISPLAY
% screen -X "setenv XDISPLAY $DISPLAY" #...

# set up the keystroke F1 to update the XDISPLAY in current shells
% screen -X "bindkey -k k1 stuff export XDISPLAY=$DISPLAY15" #...

すべてのウィンドウが(実行中のエディターなどではなく)シェルに残されていることがわかっている場合は、次を使用できます。 :at を変更する XDISPLAY キーバインディングではなく:

# update the XDISPLAY in all current windows
% screen -X "at % stuff export XDISPLAY=$DISPLAY15" #...

あるいは、あなたがつかむ方法を知っているなら親プロセスの環境変数値。これをシェルのプロンプトフックと一緒に使用して、SCREENのXDISPLAYの値(setenvで設定)を取得し、シェル用に更新できます。


回答№2の場合は3

外部プロセスの環境変数を変更する「簡単な」方法はありません。

簡単な解決策は、 XDISPLAY ログイン時にファイルに入れて、 PROMPT_COMMAND 次のプロンプトを出力する前に、このファイルを読み取ります。


Xアプリケーションを移動するには、次のようなものを見てください。 X11vnc または Xvnc.


回答№3の場合は0

私もこれに対する答えに興味があります。時間でソートされたユーザーのSSHプロセスをリストし、そのプロセスの環境を分類することは可能ではないでしょうか。