
私は 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
、試してみてxクロックまた。
しかし、なぜ「DISPLAY」を 0.0 ではなく 10.0 にする必要があるのでしょうか?
のXサーバー(またはXウィンドウ、 またはX11)はまさにその通り、アプリが接続して表示を待つサーバーです。これはPC上で行われ、アプリはXサーバーにソケット経由で接続します。/tmp、一般的には/tmp/.X11-unixただし、他のサーバーと同様に、X11リモート PC から接続でき、リモート PC で実行されるアプリケーションをグラフィカルに表示できます。
ただし、この機能には多くのセキュリティ リスクが伴うため、X11 サーバーをリモート アプリケーションに公開することは非常に困難です (異なる構成ファイルで同じオプションを少なくとも 3 回指定する必要があります)。
今すぐ入力ssh、代わりにこれを安全にします:それは-Y/-Xオプションsshこれは、ローカルX11サーバーをリモートアプリケーションに公開する際の詳細すべてを安全に(トラフィックを暗号化することで)処理します。ただし、リモートxclockをローカルで実行するには、接続するX11サーバーが自分のX11サーバーではなく、離れたPC(sshセッション)。xクロック出力を送信する必要があるないローカルソケットに/tmpネットワークポート(127.0.0.1:6010、 どれのsshありがたいことに短縮されるローカルホスト:10)、 そこからssh出力はローカル PC に送り返され、最終的にグラフィックで表示されます。
異なるssh接続(複数ある可能性があります)を分離したくない場合は、10単位、例えばローカルホスト:10.0、ローカルホスト:20.0、...)文言を変更すべきである
X11DisplayOffset 10
で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))