VcXsrv windows 打开 linux服务器gui

参考博客:https://blog.dengqi.org/posts/%E4%BD%BF%E7%94%A8-windows-%E8%87%AA%E5%B8%A6ssh%E7%9A%84x11%E8%BD%AC%E5%8F%91%E5%8A%9F%E8%83%BD%E5%B9%B6%E9%85%8D%E7%BD%AEssh%E5%92%8Cvscode/

参考博客(直接看某个服务器的gui):https://blog.csdn.net/sy373466062/article/details/49912877

使用场景:

在一个windows上需要访问linux服务器的gui程序。

不想用集成了xserver的一些工具如xmobaterm,windTerm等。

想自己开一个xserver,然后cmd直接ssh过去就能开对面的gui程序。

那么你就需要自己开一个xserver了。

下面这个vcxsrv是我自己用过的,感觉还不错,上面的参考博客中提到的X410我还没试过。

确认自带的 ssh 支持 X11 forwarding

一般来说 Windows 10 version 1809 及之后的 Windows 版本都内置了 ssh 客户端,这个客户端是带有 X11 功能的。但是,直到 ssh 客户端到 version 8.1p1 时才完整的实现了对 X11 forwarding 的支持。

打开一个命令行或者 Powershell 窗口, 输入一下指令,如果你的版本大于等于 8.1p1 , 那么恭喜你,你可以接下来的工作了。否则,请更新你的 Windows 版本。

ssh -V

输出:

OpenSSH_for_Windows_8.6p1, LibreSSL 3.4.3

1 下载安装xserver

vcxsrv下载地址:https://sourceforge.net/projects/vcxsrv/

安装时选择 Mulitiple windows

我由于一些原因没能安装vcxsrv,每次启动的时候也可以像下面这样开启multiple window

./vcxsrv.exe -multiwindow -clipboard -wgl

还有一个选项可以加

-auth

这个暂时还不太会用。可能有用的参考博客:https://zhuanlan.zhihu.com/p/690801946

-multiwindow:这个选项允许在一个窗口中运行多个X应用程序。

-clipboard:这个选项启用剪贴板功能,允许应用程序在彼此之间复制和粘贴文本。

-wgl:这个选项是一个特定的驱动程序,用于启动使用WGL(OpenGL的Windows实现)的X窗口。

-auth "%USERPROFILE%.Xauthority":这个选项指定了Xauthority文件的位置,Xauthority文件用于存储关于已认证连接的信息。

2 设置系统变量

ssh 在运行 X11 转发的时候会读取 DISPLAY 变量来获得 X11 服务器的地址。所以我们需要在系统变量中指定 DISPLAY 的值为服务器地址。有临时的和永久的两种方式:

2.1 临时的方法

CMD:

设置:

set DISPLAY=127.0.0.1:0

查看:

echo %DISPLAY%

Powershell

设置:

$env:DISPLAY="127.0.0.1:0.0"

查看:

echo $env:DISPLAY

2.2 永久的方法(powershell 和 CMD 都可以)

setx DISPLAY "127.0.0.1:0.0"

注意设置了永久的方法之后需要重启一下当前的终端才可以,比如 WindowsTerminal 需要重启。

3 测试 X11 转发功能

既然已经安装好了 X11, 就让我们来测试一下 X11 转发功能吧。打开命令行连接你的服务器:

ssh -XY user@server

随便开一个gui测试一下。应该可以用的。

4 设置ssh_config

更改你的 ssh 配置文件 ~/.ssh/config

使用你喜欢的编辑器打开你的配置文件 ~/.ssh/config 文件,在 HOST 下面添加如下的选项:

Host test
    Hostname test.com
    Port 22
    User test
    ForwardX11 yes
    ForwardX11Trusted yes

额外添加的这两行等同于 ssh 的 -XY 选项。

现在你就可以在 MacOS、Windows、Linux 默认启用 ssh 的 X11 转发功能了。至此,我们已经可以直接在使用 VSCode 的远程功能时在 Terminal 里面打开远程 GUI 程序了。

5 直接通过vcXsrv开某个服务器的应用

在vcxsrv.exe的同级目录下有一个system.XWinrc配置文件。

system.XWinrc:

在app那里配置自己要打开的应用

// Make some menus...
menu apps {
    gvim exec "wscript D:/software/vcxsrv/remoteexec.vbs xxx@s1 gvim"
    clion exec "wscript D:/software/vcxsrv/remoteexec.vbs xxx@s2 clion"
    charm exec "wscript D:/software/vcxsrv/remoteexec.vbs xxx@s3 charm"
}

menu root {
// Comments fit here, too...
    "Reload system.XWinrc"  RELOAD
    "Applications"          menu    apps
    Separator
    "Show log"  exec    "notepad %logfile%"
    Separator
}

然后还需要一个执行这个命令的vbs脚本。

D:/software/vcxsrv/remoteexec.vbs

remoteexec.vbs:

dim objShell
set objShell=wscript.createObject("WScript.Shell")
Set args = WScript.Arguments
if args.Count > 1 then
    url = args(0)
    cmd = args(1)
    iReturnCode=objShell.Run("ssh -XY " & url & " " & cmd,0,TRUE)
end if

这个地方不建议用密码直接登录,先去配置好ssh免密登录这里就不用明文写密码了。

文章目录