Gnu Screenを介したX11転送、それは可能ですか?


32

私は常にGNU Screenを使用しています。しかし、私はsshしているときにX11アプリを画面上で転送する方法があるかどうかを把握しようとしています(それは言葉ですか?)。現在、画面で「gedit」を実行しようとすると、クライアントではなく「サーバー」コンピューターで開きます。画面の外で同じことをすれば、すべてがうまくいきます。しかし、私もスクリーンを使用するときはすべてうまくいきたいです!

ありがとう!

PS:私はこの問題をグーグルで調べましたが、xmoveについて言及していますが、ubuntuでxmoveを含むパッケージを見つけることができないようです。(ubuntu 10.10)


今、完全な答えを見つける時間はありませんが、いくつかの環境変数を正しく設定する必要があります。おそらく、画面の外の環境を見れば、どれがわかるでしょう。
JanC

回答:


32

これを手動で行うには、SSHでログインした後、画面に再接続する前に、DISPLAY環境変数を確認します。

echo $DISPLAY

画面に再接続したら、環境変数を明示的に設定します。

export DISPLAY=:N.0

ここで、:N.0echo、アタッチする前に示したものです。一部のアプリケーションはSSH接続を介して送信するのが少し複雑なセッションD-Busと通信することを期待している可能性があるため、これは完璧ではありません。


1
驚くばかり!これはほとんどのアプリで機能するようです。画面を「fu」にしようとしています。アイデアをお持ちですか、またはこれを自動化する方法の一般的な方向性を少なくとも教えていただけますか?ありがとうございました!
サンドロ

:私は何かのようなスクリプトのような奇妙なことやったecho $DISPLAY > $HOME/.display.txt; screen -x -dん実行するようにして、別の画面でをexport DISPLAY=$(cat $HOME/.display.txt)
キース・クック

それがまさに私が達成しようとしてきたことです。しかし、これまでのところ運はありません。スクリプトで実行するのは良くないので、そのエクスポートを実現しようとするのは非常にハードルです。何らかの方法でそれをソースする必要があります。
サンドロ

スクリプトタイプソースにある. /path/to/scriptscriptexport DISPLAY=$(cat $HOME/.display.txt)
キース・クック

これは、ログイン時に画面の自動起動がないことを前提としています(アラビョブ)
大学の学生

11

リポジトリにはxpraというプログラムがあり、x11のgnu画面のようなものです。作業するのはそれほど難しくありません:

X永続的リモートアプリケーション

Xpraは、GNU Screen for Xアプリケーションの機能を提供します。

ユーザーは、ローカルマシンでリモートXアプリケーションを表示し、実行中のアプリケーションの状態を失うことなく、リモートマシンから切断および再接続できます。


2
コンソールとX11アプリケーションの両方の永続性を実現するために、実際にxpraをScreenと統合する方法について書いた:krlmlr.github.io/integrating-xpra-with-screen。私のために働く。
krlmlr

7

Byobuは、sshおよびgpgエージェントを自動的に再接続します。それがあなたに役立つなら、ディスプレイ変数を再アタッチすることができます...


X11転送を使用したsshセッションで作成された新しいセッションでは、表示変数も渡されないようです。X11フォワーディングを使用できるように、自動起動のstart延を無効にしなければならないという頭痛のせいで、使用をやめました。
大学の学生

2

これは、by延を実行しているときに動作する方法です

.bash_login の「_byobu_source ..」行のに次の行を追加します。

echo $DISPLAY > $HOME/.display.env

次に、この行を.bashrcに追加します

if [ ! -z ${SSH_CONNECTION+x} ]; then
  export DISPLAY=$(cat $HOME/.display.env) 
fi

1

問題は、画面セッションで環境変数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

これが最良の解決策、または最も簡潔なものになるとは思わないが、うまくいく。


0

FreeNXは、リモートディスプレイを操作するための素晴らしいアプリです。


4
さらに説明してもらえますか?
大学の学生

0

@harreの提案に基づいて、少なくともPuttyを介したRHELにとっては、これが最適なソリューションであることがわかりました。varを保持するファイルを作成するよりも良い方法があることは知っていますが、これはゲートを介しX11て動作し、DISPLAYを介してロードされたときににアクセスできるようになりますgnu screen

自動化ソリューション

に追加.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
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.