使用时ssh -X
是在本地复制并运行可执行文件,还是在主机上运行。由于它被称为 X11 转发,它让我认为窗口是在我的机器上绘制的,但在主机上运行。
答案1
可执行文件在远程计算机上运行并在本地计算机上显示(绘制)。所做ssh -X remote
的就是在远程计算机上启动代理 X11 服务器。如果您echo $DISPLAY
在远程计算机上执行此操作,您应该会看到类似的内容localhost:21.0
。这就是告诉远程计算机上运行的程序将绘图命令发送到 ID 为 21 的 X11 服务器。然后,这会将这些命令转发到本地计算机上运行的真实 X11 服务器,该服务器会在屏幕上绘图。此转发通过加密的 ssh 连接进行,因此无法(轻易)监听它们。
与 Windows、Mac OS 等不同,X11 从一开始就被设计为能够跨网络运行程序,而不需要远程桌面之类的东西。一时间,X11瘦客户端大受欢迎。它基本上是一台仅运行 X11 服务器的精简计算机。所有程序都在某个应用程序服务器上运行。
答案2
应用程序远程运行,但本地运行的 X 组件(即渲染 x 命令等)除外。每个客户端应用程序通常使用本地 X 服务器来显示 UI。在这种情况下,命令通过加密的 SSH 通道从远程计算机发送到本地计算机并显示在那里。
答案3
不过,设置$DISPLAY
只是成功的一半。为了能够在服务器端对客户端进行身份验证,ssh
还利用xauth
创建新的身份验证 cookie。参见xauth list
和~/.Xauthority
。
答案4
关键可能是要认识到 X 服务器是向用户提供图形的单一事物,并且需要图形的所有不同程序都必须是 X 客户端并连接到服务器。客户端程序和 X 服务器之间的接口从一开始就被设计为支持与远程程序的连接,而不仅仅是本地计算机上的程序。
在一个足够疯狂的网络中,程序可以在任何地方运行并在其他任何地方显示其图形......