在Windows下SSH到远程服务器,偶尔需要运行一些界面程序如Chrome
、PyQT
等
在SSH中运行或者调试这些程序的时候都会直接报错,因为这些程序需要访问本地图形系统
如果有这种需求,可以借助VcXsrv
或Xming
等程序来实现在远程服务器上运行GUI程序,并在本地计算机中显示其内容
其工作原理如下
@startuml
title X11 Forwarding to VcXsrv Sequence Diagram
actor User
participant "Local Computer\n(Windows)" as Local
participant "SSH Client\n(OpenSSH)" as SSHClient
participant "Remote Server\n(Linux)" as Remote
participant "VcXsrv\nX Server" as VcXsrv
User -> Local: Run VcXsrv \nSetup Display
User -> Local: SSH Remote Server
Local -> SSHClient++: Establish SSH Connection\nEnable X11 Forwarding
SSHClient -> Remote++: X11 Channel Request
Remote -> SSHClient--: Accept Request
alt Application Uses GUI
SSHClient -> VcXsrv++: Forward X11 Traffic
VcXsrv -> SSHClient--: Display Output
end
SSHClient -> Remote--: Send Input
Remote -> Local: Application Output
Local -> User: Display Application GUI
@enduml
借助这个技术,可以在远程开发时使用开发一些GUI程序,非常方便
实现步骤如下
- 安装运行
VcXsrv
程序,并依次检查Multiple Windows
-Start no client
-Disable access control
三个选项都勾选了 - 使用任意SSH客户端连接远程服务器,要设置
启用X11转发
选项(ssh -x username@hostname
) - 运行任意GUI程序即可在本地看到GUI内容
首先在本地Windows中安装VcXsrv
程序
- 下载地址:https://github.com/ArcticaProject/vcxsrv/releases
安装后打开,记得勾选下面这个选项免去访问控制,之后根据需要自行启用
接着使用tabby
,打开具体服务器的设置,并勾选X11转发
,如下
登录服务器后,运行GUI程序,这里以x11-apps
为例,安装x11-apps
sudo apt install x11-apps
接着运行xclock,效果如下