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
文章整理:西部数码--专业提供域名注册、虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!



