当前位置: 首页 > >

使用putty和vcxsrv实现win10运行Linux GUI程序

发布时间:

背景

有些时候要远程运行开发板上的Linux GUI程序,但VNC经常抽风用不了,特别在Ubuntu 1604下面更是如此,所以需要用ssh客户端的X11转发功能,来将Linux GUI程序通过unix domain socket发给本地X server的视频流数据,转换成inet socket并转发到运行在Windows的X server


操作步骤
PuTTY配置

PuTTY是一款支持X11端口转发的ssh客户端,要使能该特性,在创建session时按下图配置


VcXsrv配置

VcXsrv是一款运行在Windows上的X server,可以接收并解析Windows从X11端口收到的GUI数据流并显示到屏幕


    安装后从开始菜单里找到XLaunch菜单项,点击,进入下图界面
    注意display number最好填成0(开发板自身显卡)和-1(X server和X client自动协商,不靠谱)以外的数字(比如10)

    初始不启动任何GUI程序

    切记禁用访问控制
    否则会无法连接

    不用保存配置,因为保存了也用不了,直接点完成,下次启动重头再来


Windows防火墙配置(简单关闭)

X11对应的端口默认是关闭的,为了开启,你可以添加一条防火墙规则
或者像我一样,直接关闭防火墙,简单粗暴?


Linux侧配置

启动GUI程序前,配置DISPLAY环境变量,告诉GUI程序X server在哪


export DISPLAY=192.168.20.103:10.0

解释下:


export关键字用于导出DISPLAY环境变量192.168.20.103是X server的IP,也就是win10电脑的IP10是X server的显卡编号(一台机器可能有多个显卡)0是连到X server指定显卡的显示器编号(一个显卡可能输出到多台显示器)
最终效果


一个注意事项

该方法仅适用于2D GUI程序,如果是3D程序,特别是用到OpenGL加速的3D程序,则GUI程序还是会启动失败,此时可以用远程桌面程序来远程到开发板,再启动3D程序,才能启动成功。
这样能成的原因是,3D程序的矢量输出开发板的显卡驱动光栅化成2D像素,然后被远程桌面服务器程序压缩传输到远程桌面客户端,所以我们看到的3D程序其实是它的2D化远程投影。
如果在开发板*沧xrdp程序,Windows的远程桌面程序可能连接成功,但大概率失败,此时可以


    在win10*沧癢SL,再在WSL里安装Remmina软件包用本贴所述方法在WSL里启动Remmina程序,注意启动前X server的IP改成localhost然后用Remmia远程桌面到开发板祝你好运!



友情链接: