SSH X11転送とポート転送について質問があります。
私は持っています:
- Ubuntu Desktopを実行している2台のコンピュータ(同じ場所とローカルネットワークにはありません)は
Desktop1
IPアドレスを使用して電話をかけIP1
、他のコンピュータはですDesktop2
。IP2
- IPアドレスを持つVPS(Ubuntuサーバー)1つ
IP_VPS
。
D1 <------> VPS <------> D2
でDesktop1
次のコマンドを実行しました。
ssh -XC -R 8022:localhost:22 vps_user@IP_VPS
次に、次のコマンドを実行しますDesktop2
。
ssh -XC vps_user@IP_VPS
リンクされたSSHシェルで次のように実行しました。
ssh -XC desktop_user@localhost -p 8022
(目的はを介してに接続するDesktop1
ことDesktop2
ですVPS
)
正常に接続されましたDesktop1
。ただし、リンクされたSSHシェル(たとえば)でGUIアプリケーションを実行しようとすると、gedit
ウィンドウはに表示されずDesktop2
に表示されますDesktop1
。に渡されると予想しましたDesktop2
。
何か間違って理解したことがあれば説明してください。ありがとうございます!
答え1
UbuntuはX11の代わりにWaylandを使用することができ、これによりX11転送を使用できなくなります。
Desktop1のコマンドの目的は、ssh
将来のインバウンド接続を許可するためにリモートローカルポート転送を設定することであるため、その接続にはX11転送オプションはまったく必要ありません。しかし、害を及ぼすべきではありません。
それ以外の場合、コマンドはデフォルトで正しいように見えます。 X11アプリケーションはDesktop2にウィンドウを表示するか、$DISPLAY
未定義のエラーを報告する必要があります。
唯一の方法はX11DISPLAY=:0
VPS-> Desktop1で起動されたGUIアプリケーションは、X11アプリケーションを起動する前にDesktop1に明示的に設定されている場合、Desktop1自体に表示されます。 (desktop_user@Desktop1
最初のSSH接続用にローカルGUIセッションが開かれた可能性があるため、Desktop_userにはローカルX11ディスプレイの有効なセッションCookieが提供されました。)
しかしそれはただの事実です。Desktop1が実際にX11を使用するように設定されている場合。 Ubuntu用GNOMEデスクトップWaylandを使用している可能性があります、これはX11プロトコルを完全にブロックします。gedit
X11の代わりにWaylandプロトコルが使用されている場合、このDISPLAY
変数は意味がなく、代わりにDesktop1のローカルモニタに表示されます。
Waylandでは、クライアント、ディスプレイシンセサイザ(最も近いX11サーバー)、およびカーネル/ディスプレイハードウェア間の共有メモリバッファはオプションではないため、WaylandプロトコルはX11などのリモートアプリケーションを許可しません。 VNCやRDPなどのGUIリモートソリューションは、Waylandで個別に実装できます。
たとえば、実際のX11専用アプリケーションでテストできますかxterm
?または#WaylandEnable=false
、でコメントアウトされた行を見つけて/etc/gdm3/custom.conf
コメントアウトを解除し、Desktop1を再起動してDesktop1のGUIをX11専用モードに設定します。
(UbuntuでWaylandを無効にする方法の詳細:https://linuxconfig.org/how-to-enable-disable-wayland-on-ubuntu-22-04-desktop)