歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux綜合 >> Linux資訊 >> 更多Linux >> 遠程在X11上運行應用程序

遠程在X11上運行應用程序

日期:2017/2/27 9:25:52   编辑:更多Linux
  by Guido Socher    Display的概念  每個X Window應用程序在啟動的時候都會去讀取DISPLAY這個環境變量來 確定要把圖像送到哪台計算機的顯示器。這個再配合X的網絡性能使遠程運行 圖形化程序成為可能。當你遠程操作一個應用程序的時候,你用的是遠程那台 計算機的CPU資源。完整的圖形化用戶界面(GUI:Graphical User Interface)將顯示在你本地的 計算機上。  在這裡,網絡速度當然也是一個需要考慮的因素,不過普通的10Mbit/s連接的局域網就足夠了。      為什麼你要這麼做?  有很多“network graphics”的應用程序。一些公司使用這類程序來遠程控制設備, 而這些設備可能遠在幾千公裡之外,你可以用同樣的軟件來控制它們,就好像你就在 那裡一樣。  你可能有兩台機器,一台高速的1GHz的電腦,另一台133MHz的老奔騰。 你可以盡情的享受新機器,但是不必坐在它前面。也許你的妹妹正坐在那台新電腦前 並登錄在上面。但這並不影響你使用你的新電腦的功能   怎樣實現?  所有的X Window應用程序,如:     gimp,xterm,konquerer,netscape等等都是 一個網絡客戶端,它們都連到一個服務器上,這就是:X-server。 X-server的任務就是告訴圖形硬件,在你的顯示器上繪制圖像,讀取鼠標和 鍵盤的輸入。客戶端(也就是你的應用程序比如:gimp,netscape等等)發送 諸如怎麼樣繪制框架、按鈕等指令給X-server,反過來,客戶端從X-server接收 鼠標和鍵盤的事件。很顯然,你需要某種驗證,否則任何人都可以弄亂別人的屏幕了。 這裡有兩個程序來進行控制:   - xhost: 使用這個程序你可以允許給定機器上的任何用戶寫你的屏幕。 比如:你正坐在一台叫philosophus的機器前,為了允許主機movietux上的任何程序 可以寫你的philosophus的屏幕,你可以鍵入如下命令:    xhost +movietux  必須在philosophus的shell下鍵入      - xauth: 這是一個基於cookie的可靠的驗證方法。這裡你可以給單獨的人設定權限。 這種方法比xhost安全很多,它使用存儲在用戶主目錄裡的文件.Xauthority裡的cookie, 如果遠程的機器在這個文件裡有一個有效的cookie,則同意訪問。為了拷貝你面前的 機器(philosophus)的cookie到你想要在運行程序的機器(movietux)裡,你可以 使用下列方法中的一種:   xauth extract - philosophus:0.0 ssh movietux /usr/X11R6/bin/xauth merge  or   scp ~/.Xauthority movietux:      在程序開始運行之前經過了如下的過程:   客戶端檢查DISPLAY環境變量來查找另外的服務器,連接到這台主機的X-server上。   服務器端檢查客戶端是否被允許發送給自己,如果客戶端是經過驗證的,則服務端 將開始在屏幕上顯示圖像。   環境變量DISPLAY的語法:   bash:eXPort DISPLAY=hostname:displaynumber.screennumber  tcsh:setenv DISPLAY hostname:displaynumber.screennumber    在這裡不討論displaynumber和screennumber,它們通常是0:0 這是一個bash下的例子:   export DISPLAY=philosophus:0.0       遠程啟動一個應用程序  在理論過後,我們來看一個實際的例子。我們重新回到philosophus這台機器前,並且准備 在movietux機器上遠程運行一些程序。   告訴你的X-server允許movietux上的客戶端再你的屏幕上顯示圖像:  xhost +movietux   登錄到遠程主機movietux:  slogin -l username movietux   現在你已經登錄到movietux上,並且你執行的每條命令都在movietux上執行   export DISPLAY=philosophus:0.0   運行程序 比如:  netscape &   如果movietux是一台比較強勁的機器,你會注意到在netscape裡顯示Html的時候會比 在本地的時候快一點。同時,你不會從使用方面注意到這個netscape不是運行在本地的, 因為你同樣是用鼠標、鍵盤進行著和本地一樣的操作。   很酷,不是嘛?    Taking the display with you  雖然遠程運行一個應用程序是比較簡單的,可是這裡還需要為設置DISPLAY再動動手,也可以 自動完成:   如果你使用ssh來登錄到遠程主機的話,那樣DISPLAY會自動的被正確的設置。 這裡最好有其他的遠程登錄程序支持DISPLAY,不過,ssh是非常普及的。   如果你用slogin或者其他的命令,那你可以安裝下面的腳本到遠程主機上。  For tcsh:   # take your display with you at remote login:  # Put it into your ~/.login file  set whoami=`who -ml`  set remhost=`expr "$whoami" : '.*((.*))'`  if ( "$remhost" != "" ) then  setenv DISPLAY "$remhost":0.0  endif    這個腳本通過運行"who -ml"來得到遠程主機的機器名。這個命令將返回類似下面的結果:   >who -ml  movietux!guido pts/3 Oct 26 21:55 (philosophus.tux.org)    If you are using bash then you need to the following script: 如果你使用bash那麼你需要下面的腳本:   # take your display with you at remote login:  # Put it into your ~/.bash_profile  whoami=`who -ml`  remhost=`expr "$whoami" : '.*((.*))'`  if [ -n "$remhost" ]; then  DISPLAY="$remhost":0.0  export DISPLAY  fi       OpenGL  當X Windows System的網絡性能很好的時候,圖形顯示有一點慢是應為你是通過 網絡協議來傳送你的數據。通常你不會注意到什麼差別。     圖形加速和快輸的應用程序如圖形加速的游戲,通常都是基於OpenGL(Open Graphics Library) 和GLX(OpenGL Extension to the X Window System)的。這些庫提供了一個直接訪問 顯卡上的3D加速器的和硬件無關的程序接口。那就是:也應用程序用點、線、多邊形來描述 一個物體的外形,並把這些傳送給顯卡,所有的渲染工作都是在圖形硬件內部進行的。 這提供了很快的圖形速度。    目前大多數的Linux顯卡驅動(X servers)不支持遠程的GLX/OpenGL硬件加速, 但支持本地的加速。結果就是,遠程的OpenGL程序幾乎根本不動,非常慢。 不過,封閉代碼的NVidia顯卡的驅動是一個例外。它們有一個支持遠程應用程序非直接 渲染的直接渲染接口。    結論  X11可以很方便的發揮你的網絡的力量。你可以像在本地一樣在遠程工作。唯一一點不同的是 你看到的文件和目錄是在遠程主機上的。可是,通過安裝NFS和NIS,你可以把連這點小的不同也 隱藏起來,放心的使用和你同在一個網絡的強勁的計算機上的CPU資源。    鏈接  X11 system, x.org  xfree86.org the X11 system used with Linux




Copyright © Linux教程網 All Rights Reserved