ssh -Y ...
あるコンピュータ(=クライアント)から別のコンピュータ(=サーバー、実際には私のLANにはありますが関係ありません)に接続し、サーバー(=サーバー)NNSで新しいネットワーク名前空間を起動します。 (デフォルトの名前空間で)xtermを起動すると、私のクライアントに完全に表示され、最後にxtermでデフォルト以外のNSSを追加します。
ip netns exec NNSName bash
新しい NNS にいることを確認でき、
ip netns identify $$
新しい NNS では、OpenVPN などの複雑なプログラムを実行できます。
問題は次のとおりです。新しいNNSでグラフィカルアプリケーションを起動したいのですがxeyes
(一時的に)実行できません。常に次のような言葉を聞いてください。Unable to open DISPLAY=...
もちろん、私は明らかなものだけを試しました:
DISPLAY=:0.0
DISPLAY=:10.0
DISPLAY=localhost:10.0
DISPLAY=localhost:20.0
DISPLAY=ClientName:10.0
DISPLAY=ClientIPAddress:10.0
純粋なデバッグ目的で常にxhost +
クライアントに存在します。
私は次のことに問題はありません:
ssh -Y ....
サーバーで実行され、クライアントからサーバーへの接続を介してクライアントに表示されます。xeyes
サーバーで新しいNNSを起動し、NNS内でグラフィカルアプリケーションを起動してサーバーに表示します(つまり(この場合、クライアントは忘れてください)。
これら2つ(sshと名前空間)を組み合わせて使用すると、サーバーの新しいNNSで実行されているクライアントアプリケーションに表示されることはできません。
標準のTCPポート6010はネイティブNNSを持つsshセッションに属しているようですが、新しいNNSには独自のポートが必要です。もちろん、新しい NNS で ssh サーバーを起動し、クライアントからサーバーの新しい NNS に直接接続できますが、疑問に思います。これを行うより簡単な方法はありますか?つまりクライアントのX11サーバー上のサーバーの新しいNNSで実行されているグラフィックアプリケーションを表示しますか?
ベストアンサー1
私は同様の状況に直面し、これが私の解決策でした。
背景情報:異なるIPアドレスにバインドするには、名前空間内で複数のSelenium Firefoxインスタンスを拡張する必要があります。しかし、ご存知のようにエラーが発生しました。
Error: Can't open display: localhost:10.0
Mariusが提案したように、UNIXソケットを使用する代わりに、SSHD X11Forwardingをlocalhostの代わりに*にバインドし(設定に「X11UseLocalhost no」を追加します)、socatを使用して単純なTCP接続をリダイレクトしました。
そうする場合は、安全への影響に注意してください! ! !
sshdでこの変更を行った後、次からログインするとディスプレイが自動的に変更されます。
DISPLAY=localhost:10.0
次の場合:
DISPLAY=10.0.0.1:10.0
その後はリダイレクトするだけです。
ip netns exec my-NNS socat tcp-listen:6010,reuseaddr,fork tcp:192.168.5.130:6010 &
これにより、xeyes、firefox、x-whatever-you-wantを使用できます。
ip netns exec my-NNS xeyes &
望むより!