我有一个关于SSH X11转发和端口转发的问题。
我有:
Desktop1,具有IP地址IP1,另一台是Desktop2、IP2。IP_VPS的VPS (Ubuntu )。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
(目的是通过Desktop1从Desktop2连接到VPS)
我成功地连接到Desktop1。但是,当我试图在连接的shell上运行一个GUI应用程序时,比如:gedit,窗口没有出现在Desktop2中,而是出现在Desktop1中。我希望它能被转发给Desktop2。
请给我解释一下我有什么误会吗?非常感谢!
发布于 2022-07-22 06:33:56
Ubuntu可能使用Wayland而不是X11,这将使X11转发不适用。
由于ssh命令在Desktop1上的作用仅仅是建立一个远程到本地端口转发,以允许将来的入站连接,因此根本不需要在该连接上使用X11转发选项。但这不应该造成任何伤害。
否则,您的命令在本质上似乎是正确的: X11应用程序应该在Desktop2上显示其窗口,或者报告没有定义$DISPLAY的错误。
在VPS->Desktop1SSH会话上启动X11 GUI应用程序的唯一方法是在启动X11应用程序之前在Desktop1上显式设置DISPLAY=:0。(因为desktop_user@Desktop1可能已经为第一个SSH连接打开了一个本地GUI会话,所以desktop_user已经为本地X11显示提供了一个有效的会话cookie。)
但是,只有当Desktop1实际上被配置为首先使用X11时,这才是正确的。Ubuntu的GNOME桌面可能在使用韦兰完全切断了X11协议:如果gedit使用的是Wayland协议而不是X11,那么DISPLAY变量对它来说就毫无意义,它将显示在Desktop1's本地显示器上。
我了解到,在Wayland中,客户机、显示排序器(与X11服务器最接近的等价物)和内核/显示硬件之间的共享内存缓冲区不是可选的,因此Wayland协议不允许像X11那样远程处理应用程序。GUI远程处理解决方案(如VNC或RDP )可以在Wayland上单独实现。
也许是用一个只有X11的实际应用程序进行测试,比如xterm?或者将Desktop1上的GUI配置为X11模式,方法是在/etc/gdm3/custom.conf中找到注释行#WaylandEnable=false,取消注释,然后重新启动Desktop1。
(关于禁用Ubuntu上的Wayland的更多信息,此处:https://linuxconfig.org/how-to-enable-disable-wayland-on-ubuntu-22-04-desktop )
https://unix.stackexchange.com/questions/710808
复制相似问题