这利用了X Window窗口系统的网络透明性,即,图形程序的运行和显示 可以在不同的主机上。
这里首先要澄清两个概念,即X Server和X Client。假设 xclock程序在主机A上运行,但是显示在主机B上,那么谁是X Server,谁又是X Client呢?A是X Server,B是X Client?错!正确的答案是,应用程序xclock是X Client,主机B是X Server。为什么呢?Server是提供“资源”的一方,而Client是使用“资源”的一方。对于窗口系统来说,“资源”就是显示资源和输入设备,如显示器,键盘,鼠标等。主机B提供了这些资源,而应用程序xclock请求使用这些资 源,所以说xclock是X Client,主机B是X Server(更确切的说,应该是主机B上的 某个应用程序,例如/usr/X11R6/bin/X,他控制着B上这些硬件资源的分配和管理)。搞清楚了X Client和X Server的概念后,再来看一个重要的环境变量: DISPLAY,它指定了一个显示设备,所有的图形程序都将把自己显示到这个设备上。DISPLAY的格式为:hostname:displaynumber.screennumber。hostname是一个主机名,或者是它的ip地址。为了理解后面的displaynumber和screennumber,我们需要知道,在某些机器上,可能有多个显示设备共享使用同一套输入设备,例如在一台PC上连接两台CRT显示器,但是它们只共享使用一个键盘和一个鼠标。这一组显示设备就拥有一个共同的displaynumber,而这组显示设备中的每个单独的设备则拥有自己单独的screennumber。displaynumber和screennumber都是从零开始的数字。这样,对于我们普通用户来说,displaynumber、screennumber就都是0。 hostname可以省略(但它后面的冒号不能省略),如果省略的话,则使用本机作为默认的hostname,即:m.n等价于localhost:m.n。
这里首先要澄清两个概念,即X Server和X Client。假设 xclock程序在主机A上运行,但是显示在主机B上,那么谁是X Server,谁又是X Client呢?A是X Server,B是X Client?错!正确的答案是,应用程序xclock是X Client,主机B是X Server。为什么呢?Server是提供“资源”的一方,而Client是使用“资源”的一方。对于窗口系统来说,“资源”就是显示资源和输入设备,如显示器,键盘,鼠标等。主机B提供了这些资源,而应用程序xclock请求使用这些资 源,所以说xclock是X Client,主机B是X Server(更确切的说,应该是主机B上的 某个应用程序,例如/usr/X11R6/bin/X,他控制着B上这些硬件资源的分配和管理)。搞清楚了X Client和X Server的概念后,再来看一个重要的环境变量: DISPLAY,它指定了一个显示设备,所有的图形程序都将把自己显示到这个设备上。DISPLAY的格式为:hostname:displaynumber.screennumber。hostname是一个主机名,或者是它的ip地址。为了理解后面的displaynumber和screennumber,我们需要知道,在某些机器上,可能有多个显示设备共享使用同一套输入设备,例如在一台PC上连接两台CRT显示器,但是它们只共享使用一个键盘和一个鼠标。这一组显示设备就拥有一个共同的displaynumber,而这组显示设备中的每个单独的设备则拥有自己单独的screennumber。displaynumber和screennumber都是从零开始的数字。这样,对于我们普通用户来说,displaynumber、screennumber就都是0。 hostname可以省略(但它后面的冒号不能省略),如果省略的话,则使用本机作为默认的hostname,即:m.n等价于localhost:m.n。
你可能注意到了一个问题,按照前面所述,似乎可以把一个X图形程序显示到网络 中任何一个X Server上,这样必将造成混乱。所以,X Window系统提供了权限控制 命令xhost,可以控制哪些机器能使用我这个X Server。xhost的使用很简单,如果允许主机foo使用我这个X Server,可以使用"xhost +foo";如果不允许主机foo使 用我这个X Server,可以使用"xhost -foo";如果允许任何主机使用我这个X Server,简单的"xhost +"即可;反之,"xhost -"将禁止任何主机使用我这个X Server。更进一步的使用可以参考xhost(1)。