Linux下X Server工作方式

Linux下X Server工作方式  

2011-03-11 23:47:20|  分类: rh131笔记 |  标签:x11  server  linux  client  etc  |字号 订阅

下午看了会儿Linux下X Window的工作方式,可能X Window的工作方式和我们平时所想了还是有些不一样,记录一下自己的假设。等些日子自己熟悉了,再回来看看自己的假设是否正确。

 

先说些概念:GNU/Linux,X Server,X Client(xterm),Window Manager。

通常,我们所说的Linux是指Linux的发行版,比如Ubuntu,Fedora,Redhat等等。其实从概念上说Linux指得应该是Linux的内核。

有了内核,再有了Bash这样的命令行解释器(加上一些命令工具)。一个可以工作的Linux也就形成了。但是不是所有人都可以/喜欢用命令行工作。世界是多彩的,Linux也需要一个图形界面。

但Linux的图形界面,只是作为内核之外的一个工具提供的。你可以使用图形界面来完成工作,你也可以使用命令行来完成工作。图形界面只是Linux下一个普通的应用程序。

 

从概念上来讲这个应用程序是C/S架构的一个应用程序,通常由一个X Server和一些X Client组成。我们的X Client可以请求X Server帮忙显示一些界面,比如说窗口啊,按钮啊,给用户。我们从概念上来张图,解释一下。

image

不同的Client端通常X11协议和X Server通信,并将自己的需求通过X11协议传给X Server。X Server在接到X Client的请求后,在与X Server相连的显示器上显示相关的窗口,按钮,等等。由上图可以看出,一个X Server可以同时满足几个X Client的需求,同时显示在显示器上。

 

X Client的请求需求大概是:我想画一个窗口(200*200),在窗口上有一个按钮(12*8),相对位置是……。X Server接到要求绘出这样的界面给用户。

但还有两个问题没有解决:首先,X Server要采用什么颜色呢,要不要一些标准组件呢(比如类似Windows应用程序右上角的最小化,最大化,关闭按钮)。这是一个问题。

其次,显示问题解决了,但怎么处理交互呢。比如一个用户按下了按钮,X Client怎么知道呢。

 

针对上面的问题Window Manager(窗口管理器)出现了。X Client的请求,交给X Server。X Server经过处理后,再将请求交给Window Manager。Window Manager根据相应的配置来显示请求中的那个窗口——不单单显示了200*200的窗口和按钮,显示了默认的标题,添加了窗口标准按钮,等等。如果X Client想显示自己的标题怎么办,给X Server发消息时指明标题不就可以了嘛 :)

 

当用户在窗口按下按钮后,Window Manager根据用户在窗口上的动作,产生一个点击事件/消息。比如,按钮A已经被点击,点击的相对坐标为(2, 5)。这个消息打包发给X Server,再由X Server通过X11协议传给X Client。类似:嗨,X Clinet 5兄,你的鼠标被点了,你看着办吧。等X Client处理好点击消息后,比如X Client接到消息后,需要显示一个文本框。那么X Client会再次呼叫X Server。整个过程,如此反复。

Linux下X Server工作方式 - zhuzhu - 五事九思

  

还有一点需要注意的是通常意义上的Server(服务器),可能在X Server-X Client通信中,是一个X Client的角色。比如我们在自己的Laptop上需要管理3台服务器,我们可以在自己的Laptop上打开X Server和Window Manager。然后不同的服务器通过X11协议,将自己的应用程序窗口显示在Laptop上。此时这台Laptop显示三个服务器应用程序的窗口,并可以通过窗口来管理服务器的配置。

 

上面只是由目前我了解到的信息和我个人的的猜想,可能并不正确。我们可以做一下替换,将技术替换成具体的应用程序。

Linux发行版->Ubuntu,Fedora, SUSE….

X Server –> XFree86, XOrg,….

X Client –> Xterm.

Window Manager –> FVWM, GNU/Window Maker,….

 

我要抽些时间在我自己的Linux发行版上,找找这些东西都在什么地方 :)

 

X Windows 系统1984年在麻省理工学院(MIT)电脑科学研究室开始开发的,当时Bob Scheifler正在发展分散式系统(distributed system),同一时间 DEC公司的 Jim Gettys 正在麻省理工学院做 Athena 计划的一部分。两个计划都需要一个相同的东西——一套在UNIX机器上运行优良的视窗系统。因此合作关系开始展开,他们从斯坦福(Stanford)大学得到了一套叫做W的实验性视窗系统。因为是根据W视窗系统的基础开始发展的,当发展到了足以和原先系统有明显区别时,他们把这个新系统叫做X。

X Windows 系统也是一个基于客户/服务器(Client/Server)结构的窗口系统,在诞生之初是UNIX系统上使用的图形用户界面,没有PC版,它允许在任一台UNIX主机(客户端)上运行程序,而在基于X的终端(服务器)上显示出来。X Windows 系统系统是目前最常用的免费图形系统,配置在大多数的UNIX系统、DECVAX/VMS操作系统以及Linux系统中,在后期又有了XFree86开发计划,其主要目的就是提供一个PC版的X窗口,主要移植到Intelx86体系架构的处理器上,所以也称作是XFree86计划,它虽然不是以GPL授权,但是也可以自由拷贝以及传播,也可以使用在商业用途上。

X Windows 系统版本11,也就是X11图形系统,产生与1987年,X11图形系统是X Windows 系统发展的一个重要里程碑.X11是一个对网络透明的客户/服务器架构的图形显示系统,它支持应用程序在你的屏幕上绘制象素,线条,文字,图象等等。X11还包括一些其它的辅助的函数库,使得它可以容易地绘制用户界面,例如:按钮,文本输入区等等,其组成主要有三部分:客户端;服务器和X协议。

严格地说,X Windows 系统并不是一个软件,而是一个协议(protocal),这个协议定义一个系统成品所必需具备的功能(就如同 TCP/IP, DECnetIBMSNA,这些也都是协议,定义软件所应具备的功能)。任何系统能满足此协议及符合X协会其他的规范,便可称为X。

X11Unix的图形系统标准(X Window System)。Linux、各种 BSD版本和多数的商用Unix都采用它。Linux下的桌面图形系统已经发展的相当完善了,其GUI由窗口系统,窗口管理器,工具包和风格等几个部分组成,目前的桌面环境主要有两种:

1.KDE(K Desktop Environment)

   2.GnomeGNU Network Object Model Environment)。

二者的界面非常相似。KDEQt作为其底层库,而Gnome采用的是GTK库,Qt最初并不遵从GPL协议,而GTK是完全遵守GPL宣言的,这也使得Gnome现在已经成为大多数Linux发行版本的首选,有关GTKQt会在后面的部分有详细的介绍。

 

Linux默认安装使用了安全的配置以限制远程图形化登陆到桌面。本指南描述的配置将修改成允许使用X-Windows的XDMCP和GDM远程登陆。

 

GUI登陆的Linux配置:

通常Linux在初始化脚本配置文件/etc/inittab中配置选择文本控制台登陆或图形界面登陆 。为了允许远程GUI登陆,系统本身必须配置成X11 GUI登陆。

# Default runlevel. The runlevels used by RHS are:  #   0 - halt (Do NOT set initdefault to this)  #   1 - Single user mode  #   2 - Multiuser, without NFS (The same as 3, if you do not have networking)  #   3 - Full multiuser mode  #   4 - unused  #   5 - X11  #   6 - reboot (Do NOT set initdefault to this)  #  id:5:initdefault:  

(文件部分内容)

注意这里显示运行级别5,是针对Red Hat / Fedora / CentOS的配置。

Ubuntu:

  • 使用命令手动启动GDM: /etc/init.d/gdm

    (可以加入系统初始化过程: ln -s /etc/init.d/gdm /etc/rc2.d/S13gdm)

    或者

  • 加入 /etc/inittab or /etc/rc.local
    x:2:respawn:/usr/sbin/gdm      

    Ubuntu使用运行级别2-5表示正常的多用户模式。

关于初始化过程可参见 YoLinux.com Linux init process tutorial.


授权微软Windows用户远程登陆到系统图形桌面:

XDM登陆管理:

  • 编辑文件:
    • Red Hat: /etc/X11/xdm/Xaccess
    • Suse: /usr/X11R6/lib/X11/xdm/Xaccess

    将配置文件中的下一行:

    # *                                       #any host can get a login window    

    修改为:

    *                                       #any host can get a login window    
  • 编辑文件: /etc/X11/xdm/xdm-config

    将最后一行:

    !DisplayManager.requestPort:    0    

    修改为:

    DisplayManager.requestPort:    0    

    系统默认针对RHEL4/FC3.

GDM登陆管理:

  • 编辑问及爱你:
    • Red Hat Enterprise 5, CentOS 5: /etc/gdm/custom.conf

      注意: RHEL5仅仅使用该文件,XDM不再被支持。

      增加两个项目:

      [xdmcp]  Enable=true    [security]  DisallowTCP=false  

      也可以使用图形化配置工具/usr/sbin/gdmsetup.

    • Red Hat Enterprise 3/4, CentOS 3/4, Fedora 1-6: /etc/X11/gdm/gdm.conf

      将最后一行:

          [xdmcp]    Enable=false    

      修改为:

          [xdmcp]    Enable=true    

      也可以使用图形化配置工具gdmsetup.

  • 重启X-Windows:
    • [root]# init 3
    • [root]# init 5

注意:

  • 可以使用配置工具 /usr/sbin/gdmsetup 来配置GDM。
  • 可以在本地测试GDM登陆屏幕: X -query localhost :1

gdmsetup: 该图形界面将编辑GDM配置文件。

  • Red Hat Enterprise 5, CentOS 5: /etc/gdm/custom.conf
  • Red Hat Enterprise 3/4, CentOS 3/4, Fedora 1-6: /etc/X11/gdm/gdm.conf

选择 "Enable XDMCP":

  gdmsetup_XDMCP  
gdmsetup_Security


MS Windows下远程登陆X Server:

开源软件:

商业软件:

参见 accessing Linux from Microsoft Windows 获取更多的远程X-Windows配置信息.


Linux下远程登陆X Server:

使用 X-Windows Xnest 命令进行连接.

/usr/bin/X11/Xnest -query computer-node-name -geometry 1280×1024 :1

Xnest_w740

使用选项 "-geometry 850×680" 的例子。

[潜在陷阱]: 如果你得到如下的错误消息:

Fatal server error:  Server is already active for display 0

意味着你忘记了在命令最后写上 ":1",默认是 :0,使用当前桌面窗口,因而导致冲突.

Red Hat / Fedora / CentOS 发行版本需要xorg-x11-Xnest包。


配置陷阱:

  • 确认系统防火墙规则允许XDMCP协议通过.
    • 显示防火墙规则: iptables -L
    • 刷新防火墙规则: iptables -F

    下面的端口和协议必须被允许通过防火墙:

    • UDP: 177 (XDMCP)
    • TCP: 6000-6005 (X11协议)
    • TCP: 7100 (xfs: X字体服务

http://www.taiiwang.com/archives/363

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值