带端口转发的 SSH X11 转发

带端口转发的 SSH X11 转发

我有一个关于 SSH X11 转发和端口转发的问题。

我有:

  • 2 台运行 Ubuntu Desktop 的计算机(不在同一位置和本地网络)Desktop1使用 IP 地址进行调用IP1,另一个是Desktop2, IP2
  • 和 1 个带有 IP 地址的 VPS(Ubuntu 服务器)IP_VPS

D1 <------> VPS <------> D2

在 中Desktop1,我运行了这个命令:

ssh -XC -R 8022:localhost:22 vps_user@IP_VPS

然后,我运行这些命令Desktop2

ssh -XC vps_user@IP_VPS

在连接的 SSH shell 上,我运行了:

ssh -XC desktop_user@localhost -p 8022

(目的是连接到Desktop1from Desktop2via VPS

我连接Desktop1成功了。但是,当我尝试在连接的 SSH shell 上运行 GUI 应用程序(例如:)时gedit,该窗口没有出现在 中,Desktop2而是出现在 中Desktop1。我预计它会被转发到Desktop2

请向我解释一下我是否误解了什么?多谢!

答案1

Ubuntu 可能使用 Wayland 而不是 X11,这将使 X11 转发不适用。

由于 Desktop1 上的命令的目的ssh只是建立远程到本地端口转发以允许将来的入站连接,因此您根本不需要该连接上的 X11 转发选项。但这应该不会造成任何伤害。

否则,您的命令看起来基本上是正确的:X11 应用程序应该在 Desktop2 上显示其窗口或报告$DISPLAY未定义的错误。

唯一的办法是X11如果DISPLAY=:0在启动 X11 应用程序之前在 Desktop1 上明确设置了某些内容,则在 VPS->Desktop1 上启动的 GUI 应用程序将显示在 Desktop1 本身上。 (因为desktop_user@Desktop1可能已经为第一个 SSH 连接打开了本地 GUI 会话,所以desktop_user 已经为本地 X11 显示提供了有效的会话 cookie。)

但这只是事实如果 Desktop1 实际上首先配置为使用 X11。 Ubuntu 的 GNOME 桌面可能正在使用 Wayland,这完全切断了 X11 协议:如果gedit使用 Wayland 协议而不是 X11,那么该DISPLAY变量对它来说就没有意义,而是会显示在 Desktop1 的本地显示器上。

我知道在 Wayland 中,客户端、显示合成器(最接近的 X11 服务器)和内核/显示硬件之间的共享内存缓冲区不是可选的,因此 Wayland 协议不允许像 X11 那样远程处理应用程序。 VNC 或 RDP 等 GUI 远程处理解决方案可以在 Wayland 上单独实施。

也许使用实际的仅 X11 应用程序进行测试,例如xterm?或者将 Desktop1 上的 GUI 配置为仅 X11 模式,方法是#WaylandEnable=false在 中找到注释掉的行/etc/gdm3/custom.conf,取消注释,然后重新启动 Desktop1。

(有关在 Ubuntu 上禁用 Wayland 的更多信息:https://linuxconfig.org/how-to-enable-disable-wayland-on-ubuntu-22-04-desktop

相关内容