VcXsrv windows 打开 linux服务器gui
参考博客(直接看某个服务器的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免密登录这里就不用明文写密码了。