私はほとんどの人が抱えているように見える逆の問題を抱えています。 sshにログインしているときにXアプリケーションを起動すると、クライアント(ローカル)ではなくサーバー(ホスト)マシンに表示されます。これは私が使用するコマンドです
$ ssh -X -p 6623 [email protected]
$ DISPLAY変数がクライアント上で正しく表示されます。
$ echo $DISPLAY
:0
サーバーのXアプリケーションをクライアント(物理的に使用しているマシン)にローカルに表示したい。何が原因なのかわかりません。
この会話のために、lappy
とremotey
という名前の2台のマシンがあるとしましょう。 lappy
システムは、ssh
コマンドを実行する場所です。接続しているシステムはremotey
です。
lappy .-,( ),-.
__ _ .-( )-. remotey
[__]|=| ---->( network )------> ____ __
/::/|_| '-( ).-' | | |==|
'-.( ).-' |____| | |
/::::/ |__|
NOTE: on lappy, `ssh` to remotey, run GUI, see GUI on lappy
シェルの構成ファイルは、環境変数DISPLAY=:0
を設定している可能性があります。あなたは次のようにこれをgrepすることができます:
$ grep DISPLAY $HOME/{.bash*,.profile*}
それでも何も返されない場合は、ログインしているシステムが原因である可能性があります。このディレクトリも覗いてみてください。
$ grep DISPLAY /etc/profile.d/* /etc/bash*
これをそのままにしておきたい場合は、次のようにssh
にXトラフィックをクライアントシステムにリダイレクトするように指示することで、この動作をオーバーライドできます。
$ ssh -X user@remoteserver
ここに、あなたと同じように$DISPLAY
が:0
に設定されているリモートサーバーがあります。
$ ssh -X skinner "echo $DISPLAY"
:0
ただし、Xアプリケーションを呼び出して、ssh
コマンドを実行しているシステムにリモート表示することはできます。ログインする必要はありません。GUIを次のように直接実行できます。
$ ssh -X skinner xeyes
ボーナスのヒントとして、使用されている暗号を変更して、SSHトンネルを通過するX11トラフィックのパフォーマンスを向上させることができます。
$ ssh -c arcfour,blowfish-cbc -X skinner xeyes
lappy .-,( ),-.
__ _ .-( )-. remotey
[__]|=| ---->( network )------> ____ __
/::/|_| '-( ).-' | | |==|
'-.( ).-' |____| | |
/::::/ |__|
NOTE: on lappy, `ssh` to remotey, run GUI, see GUI on remotey
remotey
からlappy
にSSHで接続しているが、GUIがlappy
に表示されないようにしたい場合は、-X
スイッチをssh
を呼び出します。
$ ssh -p 6623 [email protected]
多くの場合、ユーザーの$HOME/.ssh
ディレクトリは、何が起こっているのかについて不明な点をもたらす可能性があります。テストを実行するときのように、このディレクトリ内のconfig
ファイルの使用を一時的に停止できます。
$ ssh -F /dev/null -p 6623 [email protected]
次のテストを使用して、remotey
上のシェルの構成ファイルを次のように一時的に無効にすることができます。
$ ssh -t -X -p 6623 [email protected] "bash --norc --noprofile"
上記では、どのセットアップもこのBashシェルに供給されないはずなので、DISPLAY=:0
を設定してから、リモートのデスクトップにGUIを表示できるはずです。
最初に--noprofile
を削除してこのコマンドを試すことにより、次のトリックを使用して問題を特定することができます。
$ ssh -t -X -p 6623 [email protected] "bash --norc"
次に、次のコマンドが続きます。
$ ssh -t -X -p 6623 [email protected] "bash --noprofile"
最初のバージョンでは、問題が構成ファイルの/etc/bashrc
&$HOME/.bashrc
チェーンにあるかどうかがわかり、2番目のバージョンでは、問題が$HOME/.bash_profile
構成ファイルにあるかどうかがわかります。
ここでの重要な問題は、最後の行の:0
です。
$ ssh -X -p 6623 [email protected]
$ echo $DISPLAY
:0
これは、sshdが設定した後、sshサーバー上の何かがDISPLAY
環境変数をオーバーライドしていることを示しています。ディスプレイ:0
でXサーバーが実行されているため、そのコンピューターでXクライアントが行う要求はすべてローカル(つまり、sshサーバー)Xサーバーに送信されます。別のディスプレイでssh-serverXサーバー(原文のまま!)を実行すると、次のようになります。
$ xclock
Error: Can't open display: :1
問題が発生する可能性のある場所はたくさんあります。まず、接続コマンドを変更して、初期化せずにシェルを呼び出すことをお勧めします。 -t
オプションを使用して、ttyの割り当てを強制することを忘れないでください。 BASHの場合、コマンドは次のようになります。
$ ssh -X -p 6623 -t [email protected] /bin/bash --norc --noprofile
次に、DISPLAY
の値を確認します。