zoukankan      html  css  js  c++  java
  • 本地显示Linux服务器的GUI程序

    如果我们UI自动化脚本跑在 Linux 服务器环境上,这个时候我们是看不到界面的,如果不使用浏览器的无头模式,这个时候我们的程序就跑不起来了,如何在服务器环境不使用浏览器的无头模式下进行UI测试呢,我们可以通过 MobaXterm 和 X11 Forwarding 远程显示服务器上的图形化界面(GUI 程序)来实现。

    首先我们来认识下什么是 X11 Forwarding ?它是用来干嘛的?

    以下介绍引用文章:

    http://www.ipaomi.com/2017/11/09/%e8%bf%9c%e7%a8%8b%e6%98%be%e7%a4%ba%e6%93%8d%e4%bd%9c-%e6%9c%8d%e5%8a%a1%e5%99%a8-gui-%e7%a8%8b%e5%ba%8f%e5%9b%be%e5%bd%a2%e5%8c%96%e7%95%8c%e9%9d%a2-%e5%9f%ba%e4%ba%8e-x11-forwarding-centos/

    X11 Forwarding 介绍

    X 协议

    img

    Linux 本身是没有图形化界面的,所谓的图形化界面系统只不过中 Linux 下的应用程序。这一点和 Windows 不一样。Windows 从 Windows 95 开始,图形界面就直接在系统内核中实现了,是操作系统不可或缺的一部分。Linux 的图形化界面,底层都是基于 X 协议。

    X 协议由 X server 和 X client 组成:

    • X server 管理主机上与显示相关的硬件设置(如显卡、硬盘、鼠标等),它负责屏幕画面的绘制与显示,以及将输入设置(如键盘、鼠标)的动作告知 X client。
    • X client (即 X 应用程序) 则主要负责事件的处理(即程序的逻辑)。

    举个例子,如果用户点击了鼠标左键,因为鼠标归 X server 管理,于是 X server 就捕捉到了鼠标点击这个动作,然后它将这个动作告诉 X client,因为 X client 负责程序逻辑,于是 X client 就根据程序预先设定的逻辑(例如画一个圆),告诉 X server 说:“请在鼠标点击的位置,画一个圆”。最后,X server 就响应 X client 的请求,在鼠标点击的位置,绘制并显示出一个圆。

    X11 Forwarding

    img

    这么绕,有啥意义呢?当然有!

    许多时候 X server 和 X client 在同一台主机上,这看起来没什么。但是, X server 和 X client 完全可以运行在不同的机器上,只要彼此通过 X 协议通信即可。于是,我们就可以做一些“神奇”的事情,比如像本文开头谈到的,在本地显示 (X server),运行在服务器上的 GUI 程序 (X client)。这样的操作可以通过 SSH X11 Forwarding (转发) 来实现。

    X11 中的 X 指的就是 X 协议,11 指的是采用 X 协议的第 11 个版本。

    MobaXterm 工具

    img

    那 MobaXterm 又是什么鬼?MobaXterm 是一款开源、免费的、全功能终端软件。它与 PuTTY 类似,但却比 PuTTY 要强大得多,其中一个很实用的功能就是 MobaXterm 自带 X Server。这样我们就不用劳神地去想怎么在 Windows 上启动 X server 了。

    MobaXterm官网:https://mobaxterm.mobatek.net/

    MobaXterm 下载:https://fenxiangdayuan.lanzous.com/ijMPOjxb43a

    小结一下,整个实现逻辑就是:

    本地机器采用 MobaXterm (自带 X server) 连接远程服务器。然后,在服务器上运行 GUI 程序 (即 X client),通过 SSH X11 Forwarding,转发到本地 (Windows 机器上)。

    Centos7 + X11 Forwarding + MobaXterm 环境搭建

    服务器端

    安装 X11 Forwarding 相关软件,执行命令:

    yum install xorg-x11-xauth xorg-x11-fonts-* xorg-x11-font-utils xorg-x11-fonts-Type1 xclock
    

    启用 X11 Forwarding, 需要修改 ssh 的配置信息,如下

    vi /etc/ssh/sshd_config
    

    将 X11Forwarding 和 X11UseLocalhost 前面的 # 去掉,并将 X11Forwarding 设置为 yes,X11UseLocalhost 设置为 no :

    #AllowAgentForwarding yes
    #AllowTcpForwarding yes
    #GatewayPorts no
    X11Forwarding yes
    #X11DisplayOffset 10
    X11UseLocalhost no
    

    重启 sshd 服务:

    systemctl restart sshd.service
    

    本地 (Windows 端)

    下载并安装好 MobaXterm ,创建一个session,填写对应的配置信息远程连接到服务器

    image-20210101180419153

    img

    注意到 X11-forwarding 和 DISPLAY 这两项都打上了绿色的勾,代表设置成功了。

    验证

    在服务器端运行一个 GUI 程序,例如输入命令:

    xclock
    

    这时候,你在本地 (Windows 端),就可以看到相应的图形化界面(窗口)

    img

    那么在我们执行 UI自动化脚本的时候,就可以在本地(Windows 端)看到浏览器的执行过程了,例如在 Linux 系统启动 chrome 浏览器访问百度地址,输入命令:

    chrome --no-sandbox https://www.baidu.com
    

    我们就能看到打开如下界面了:

    image-20210101182752425

    中文显示问题

    如果打开的浏览器中文显示不出来(显示的都是小方块),这是因为服务器字体库没有对应字体的问题,参考下面的文章解决:

    X11 Forwarding显示中文:

    https://www.maixj.net/ict/x11-forwarding-zhongwen-23067

  • 相关阅读:
    在使用SMO时,检索IsSystemObject属性将导致性能急剧下降的解决方法
    在没有安装.NET Framework 3.5的机器上使用LINQ等特性
    我的网站中的组织层次结构图信息与AD的同步问题
    有关视图状态(ViewState)的一些问题
    窗体控件visible属性问题
    SiteMapNode的几个特殊属性
    创建本地数据库时发生错误及其解决方案
    在基于Windows验证的Web应用程序中检索当前用户的所有角色
    在数据库恢复之前将数据库置为单用户模式
    将ASP.NET网站嵌入到MOSS站点下面的做法
  • 原文地址:https://www.cnblogs.com/tester-ggf/p/14220619.html
Copyright © 2011-2022 走看看