GNU Screenを常に使用しています。しかし、私はsshしているときにX11アプリを画面上で転送する方法があるかどうかを把握しようとしていました(それは言葉ですか?)。現在、画面から「gedit」を実行しようとすると、クライアントではなく「サーバー」コンピューターで開きます。画面の外で同じことをすれば、すべてがうまくいきます。しかし、私もスクリーンを使用するときはすべてうまくいきたいです!
ありがとう!
PS:私はこの問題をグーグルで調べましたが、xmoveについて言及していますが、ubuntuでxmoveを含むパッケージを見つけることができません。 (ubuntu 10.10)
これを手動で行うには、SSHでログインした後、画面に再接続する前に、DISPLAY環境変数を確認します。
echo $DISPLAY
画面に再接続したら、環境変数を明示的に設定します。
export DISPLAY=:N.0
ここで:N.は、アタッチ前にecho
が示したものです。一部のアプリケーションは、SSH接続を介して送信するのが少し複雑なSession D-Busと通信することを期待している可能性があるため、これは完全ではありません。
リポジトリにはxpraというプログラムがあり、x11のgnu画面のようなものです。作業するのはそれほど難しくありません:
X永続的リモートアプリケーション
Xpraは、Xアプリケーション用のGNU Screenの機能を提供します。
ユーザーは、ローカルマシンでリモートXアプリケーションを表示し、実行中のアプリケーションの状態を失うことなく、リモートマシンから切断および再接続できます。
Byobuは、sshおよびgpgエージェントを自動的に再接続します。それがあなたに役立つなら、ディスプレイ変数を再アタッチすることができます...
これは、by延を実行しているときに動作する方法です
この行を。bash_loginbeforeの「_byobu_source ..」行に追加します。
echo $DISPLAY > $HOME/.display.env
そして、この行を。bashrcに追加します:
if [ ! -z ${SSH_CONNECTION+x} ]; then
export DISPLAY=$(cat $HOME/.display.env)
fi
問題は、画面セッションで環境変数XAUTHORITYが保持されないことです。これを解決するには、次を.bashrcに追加しました。私はこれが必要になるとは思いませんでしたが、あなたはあなたがしなければならないことをしていると思います:
# ensure X forwarding is setup correctly, even for screen
XAUTH=~/.Xauthority
if [[ ! -e "${XAUTH}" ]]; then
# create new ~/.Xauthority file
xauth
fi
if [[ -z "${XAUTHORITY}" ]]; then
# export env var if not already available.
export XAUTHORITY="${XAUTH}"
fi
これが最良の解決策、または最も簡潔なものになるとは思わないが、うまくいく。
@harreの提案に基づいて、私はこれが少なくともPuTTY経由のRHELにとって最も有効なソリューションであることがわかりました。 varを保持するファイルを作成するよりも良い方法があることは知っていますが、これはゲートから機能してX11
をgnu screen
経由でロードしたときにDISPLAY
にアクセスできるようにします。
自動化ソリューション
.bashrc
(またはユースケースに応じて.bash_profile
)に追加します
#.bashrc
if [ -f ~/etc/.bash-screen-x11 ]; then
echo $DISPLAY > $HOME/.display.env
source ~/etc/.bash-screen-x11
fi
次に、以下のファイル(またはパスの選択)を追加します
#~/etc/.bash-screen-x11
# sets back display var.
if [ -z $STY ]; then
export DISPLAY=$(cat $HOME/.display.env)
fi
FreeNXは、リモートディスプレイを操作するための素晴らしいアプリです。