本地顯示Linux服務器的GUI程序

若是咱們UI自動化腳本跑在 Linux 服務器環境上,這個時候咱們是看不到界面的,若是不使用瀏覽器的無頭模式,這個時候咱們的程序就跑不起來了,如何在服務器環境不使用瀏覽器的無頭模式下進行UI測試呢,咱們能夠經過 MobaXterm 和 X11 Forwarding 遠程顯示服務器上的圖形化界面(GUI 程序)來實現。chrome

首先咱們來認識下什麼是 X11 Forwarding ?它是用來幹嗎的?shell

如下介紹引用文章:windows

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/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 的請求,在鼠標點擊的位置,繪製並顯示出一個圓。session

X11 Forwarding

img

這麼繞,有啥意義呢?固然有!ssh

許多時候 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

相關文章
相關標籤/搜索