Xウィンドウをトンネリングしようとしています。そうする場合:
user@local: ssh -X user@remote xclock
効果があるただし、まずコンピュータにログインしてからプログラムを実行すると失敗します。
user@local: ssh -X user@remote
user@remote: xclock
No protocol specified
Error: Can't open display: :0
何が間違っていますか?
編集する
$DISPLAY
リモコンで変数を確認しました。
user@local: ssh -X user@remote "echo $DISPLAY"
:0.0
ログイン後、リモートで同じ値に設定しても効果はありません。推奨設定に従ってください$DISPLAY
。:10.0
user@local: ssh -X user@remote
user@remote: DISPLAY=:10.0 xclock
対話型セッションと非対話型セッションに異なる$ DISPLAY値が必要な理由はまだ理解されていません。
答え1
変数の確認展示する正しく設定ローカルホスト:10.0。そうでなければ、
export DISPLAY=localhost:10.0
、それから試してみてください時計再び。
しかし、なぜ「DISPLAY」を0.0ではなく10.0に設定するのですか?
これXサーバー(またはXウィンドウまたはX11) は、アプリケーションを直接表示するためにアプリケーションが接続されるのを待つサーバーです。これは、アプリケーションが次の場所にあるソケットを介してXサーバーに接続されているコンピューターで発生します。/tmp、一般的に呼び出す/tmp/.X11-Unix。しかし、すべてのサーバーがそうであるように、X11リモートコンピュータに接続し、リモートコンピュータで実行されているアプリケーションをグラフィカルに表示できます。
ただし、この機能は多くのセキュリティリスクを引き起こすため、X11サーバーをリモートアプリケーションに開くことは非常に困難です(他の設定ファイルで同じオプションを少なくとも3回指定する必要があります)。
今入場してくださいSSH、代わりにこれを安全にします。-Y/-XオプションSSHローカルX11サーバーをリモートアプリケーションで安全に開くために必要なすべての詳細を(暗号化されたトラフィックを介して)処理します。しかし、表示したいとき離れてxclockをローカルで使用する場合は、接続するX11サーバーが独自のX11サーバーではなく、リモートシステム(サーバーを起動したサーバー)にあるサーバーであることをリモートアプリケーションに指示する必要があります。SSH会議)。だから時計出力を送信する必要がありますいいえローカルソケットに/tmpしかし、ネットワークポートには(これは127.0.0.1:6010、どちらSSH幸いに減ってローカルホスト:10)、あるものからSSHこれをローカルコンピュータに送り返し、最終的に出力をグラフィカルに表示することを担当します。
異なるSSH接続を切断したくない場合(複数存在する可能性があります)10次の単位ローカルホスト:10.0、ローカルホスト:20.0、...)ステートメントを変更する必要があります
X11DisplayOffset 10
存在する/etc/ssh/sshd_configあなたが好きなものは何でも(正直なところ、理由はありません)。
リモートディスプレイを使用可能にするのはこのステートメントです。いいえ港へ6000(これは〜になりますローカルホスト:0.0)、しかし港では6010。直接確認できます。
$ ssh -Y vps
Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Mon Apr 17 02:47:42 2017 from
root@vps:~# ss -lntp | grep 6010
LISTEN 0 0 127.0.0.1:6010 *:* users:(("sshd",16172,8))
LISTEN 0 0 ::1:6010 :::* users:(("sshd",16172,7))