Ubuntu教程 -06.08.09

新手涉及到的教学或入门贴,推荐新手必看,版主维护
回复
kardinal
帖子: 750
注册时间: 2006-03-19 11:39

#16

帖子 kardinal » 2006-06-30 3:37

历史
==
当然,Xwindow有悠久的历史和传统,不过那不在我们讨论的范围。您要注意的有两点:

Xwindow 和 Xbox 中的“X”本意是不同的, X 只是 W 后的一个字母,差不多应该这样理解,Xwindow 是 Window 的接班人 (注意,Window不是Windows)

同理,不要把 Xwindow 说成是 Xwindows ,这明显是一个态度或者阶级感情问题……!

架构及原理
=====

众所周知,Xwindow是服务器-客户端架构。这样可以很好的解决远程图形界面的问题。稳妥起见,我给不太了解的弟兄复述一遍:

代码: 全选

X客户端 ┐                          ┌ 键盘
X客户端 ┼ X协议 ─ X服务器 ─ 硬件规范 ┼ 鼠标
X客户端 ┘                          └ 显示器
Xwindow 由三部分构成:
----------------------------------

Xserver 服务器端:通过驱动程序(硬件规范)来管理硬件资源。
例如,移动鼠标:鼠标移动时,通过驱动程序(大多数的鼠标不需要专门的驱动程序,因为它们符合某一硬件规范,例如:有四个移动方向和三个键),向 Xserver 发送信息:
“向右移动200点,向上移动100点”(其实是向右上移动),“按下左键”……

Xserver 将这些鼠标移动的相关信息发送到“窗口管理器”,窗口管理器作出判断:
1. 上一次鼠标停止在根窗口内的点600,500
2. 向右200,向上100,现在鼠标位于窗口内的点800,600。
3. 窗口Firefox目前位于所有窗口的最上层, 800,600 这个点正是窗口Firefox的“关闭”按钮
4. 窗口管理器根据预设动作,将 “点击Firefox窗口的关闭按钮” 翻译为 “关闭窗口Firefox”
5. 窗口管理器向 Firefox 发送一个“退出”消息

这个过程中,Xserver控制显示子系统,在屏幕上显示鼠标的移动和点击



Xclient 客户端: 通过X协议,实现与Xserver 的交互。
例如 :
1. Xclient (假设Firefox) 接收Xserver的消息: 输入焦点在地址栏的范围内,“ubuntu.org.cn”,回车
2. Firefox根据预设动作,将这些消息识别为 “打开链接 ubuntu.org.cn”
3. Firefox向域名服务器请求 链接 “ubuntu.org.cn”。域名服务器将这个请求转换为 “http://ubuntu.org.cn/” 和 IP地址211.148.131.7,发送回 Firefox
4. Firefox将 “http://ubuntu.org.cn/”显示在地址栏(向Xserver发送请求,在地址栏位置显示这个地址)
5. Firefox向地址 211.148.131.7 请示显示页面。
6. Firefox 将服务器发送回的页面显示在主窗口中


Xprotocol 协议: Xserver和Xclient通信的规则



WM 窗口管理器:
------------------------------------------

一种特殊的Xclient。使用窗口管理器时,Xserver并不直接与其它Xclient通信,而是通过WM这个Xclient中转,一些消息会被拦截,因为它们被定义为WM的消息,例如拖动标题栏……

来具体了解下,“打开链接 ubuntu.org.cn”的消息:
输入焦点在地址栏的范围内,“ubuntu.org.cn”,回车
Xserver并不能直接判断焦点,而是这样:
Xserver 向WM发送位置和点击的信息,WM根据当前的“焦点策略”确定激活(最上层)的窗口Firefox ,Xserver将Firefox显示在最上层,高亮显示它的标题栏
在窗口Firefox内点击地址栏,或者 Ctrl+L,Xserver将位置信息发送给WM,WM再发送给Firefox
Firefox 判断当前焦点后,显示一个闪动的文字输入光标,将它通过WM发送给Xserver,Xserver在屏幕相应位置进行显示

那么“窗口管理器”到底能作些什么呢?其实它所作的一切都是管理窗口。例如:
1. 最上层的窗口会把其它窗口挡住
2. 它通常是一个“已激活窗口”,根据不同的“焦点策略”,窗口管理器确定被激活的窗口。激活窗口标题栏高亮显示,接收大部分的键盘消息和窗口内的鼠标点击消息。
3. 为了美观和容易分辨,大多数窗口都要有标题栏和边框。为了方便,标题栏上还要有一些按钮,比如:最小化,最大化,关闭(这些按钮是窗口管理器请求的小窗口)
4. 一个窗口可以在另一个窗口旁边显示,而不一定完全被遮挡。为了实现这一点,就要控制窗口显示的位置
5. 为了控制窗口的显示位置,需要将整个屏幕用座标描述,最好的办法是绘制一个填充整个屏幕的窗口,也就是根窗口。
6. 因为根窗口是最大的,所以它可以严严实实的遮挡任何窗口,为了避免这一点,根窗口永远在最底层。这很形象的说明了为什么它叫作“根窗口” ……root
7. 根窗口不一定只有一个,大多数的窗口管理器可以使用 “工作区” ,来切换显示多个根窗口
8. 根窗口固定位置上通常放置一些其它Xclient的窗口,例如底部面板,顶部面板,侧面板,程序启动图标
9. 面板上又可以放一些其它的Xclient窗口,如任务条,启动栏,菜单……任务条可以以图标显示正在运行的任务,还可以作其它的杂活,像自动挂载USB设备……







启动流程
====
我们知道 init 是linux的根进程,是所有进程的父进程。同样, xinit是所以Xwindow进程的根进程


--------------------------

startx 命令可以在命令行下启动图形界面。实际上,执行startx 命令时,通常是执行这一个命令
xinit /etc/X11/xinit/xinitrc -- /etc/X11/xinit/xserverrc
根据脚本 /etc/X11/xinit/xserverrc启动Xserver,并且根据脚本 /etc/X11/xinit/xinitrc 启动X进程,例如窗口管理器

事实上,startx启动时,脚本/etc/X11/xinit/xserverrc 以预设的参数运行程序 /usr/bin/X11/X
/etc/X11/xinit/xinitrc脚本则指向 /etc/X11/Xsession,然后依次启动/etc/X11/Xsession.d目录中的脚本,(您可以在用户配置文件 ~/.Xsession 中定义使用的WM,它的优先级高于全局配置文件)

startx 启动时,并没有一个要求填写用户名和密码的界面,这是因为启动的是/etc/X11/Xsession.d/gnome-session ,而不是GDM


---------------------------

Ubuntu系统可以自动进入图形界面,而不需要运行 startx 命令
在某些启动级别中,有 gdm的启动脚本,例如 : /etc/rc2.d/S13gdm
它能够启动 /etc/X11/default-display-manager 这个文件中的窗口管理器 /usr/sbin/gdm
gdm在启动时,会要求用户名和密码,也就是我们看到的登录界面




Xwindow的主要配置文件
==================

X服务器
---------------------------

X服务器的主要配置文件为 /etc/X11/xorg.conf

代码: 全选

Section "ServerLayout"
	Identifier     "Default Layout"
	Screen         "Default Screen" 0 0
	InputDevice    "Generic Keyboard"
	InputDevice    "Configured Mouse"
EndSection
服务器布局:已激活输入、显示设备的名称

Section "Module"
加载的模块

Section "Files"
X核心字体路径

代码: 全选

Section "Screen"
	Identifier "Default Screen"
	Device     "ATI Technologies, Inc. RV370 5B62 [Radeon X600 (PCIE)]"
	Monitor    "DELL E176FP"
	DefaultDepth     24
	SubSection "Display"
		Depth     1
		Modes    "1280x1024" "1152x864" "1024x768" "800x600" "720x400" "640x480"
	EndSubSection
服务器布局中定义的显示设备。 包括 显卡、显示器、默认色深、可用分辨率

代码: 全选

Section "Device"
	Identifier  "ATI Technologies, Inc. RV370 5B62 [Radeon X600 (PCIE)]"
	Driver      "fglrx"
	Option	    "KernelModuleParm" "agplock=0"
	VideoRam	131072
EndSection
名为 "ATI Technologies, Inc. RV370 5B62 [Radeon X600 (PCIE)]" 的 "Device"
Driver 为驱动。如果不能正常启用图形界面,首先尝试 “vesa”

…………

整个配置文件的结构是这样的:

代码: 全选

/
├/Section "ServerLayout"                布局
│ ├Section "InputDevice" keyboard  键盘
│ ├Section "InputDevice" mouse      鼠标
│ │
│ └ /Section "Screen"                      显示
│    ├Section "Monitor"                      显示器
│    ├Section "Device"  graphcard      显卡
│ 
│
├Section "Files"                         字体
└Section "Module"                    模块







X客户端
----------------------------

在/etc/X11/Xsession文件中可以发现下列内容

代码: 全选

	OPTIONFILE=/etc/X11/Xsession.options

	SYSRESOURCES=/etc/X11/Xresources
	USRRESOURCES=$HOME/.Xresources

	SYSSESSIONDIR=/etc/X11/Xsession.d
	USERXSESSION=$HOME/.xsession
	ALTUSERXSESSION=$HOME/.Xsession
	ERRFILE=$HOME/.xsession-errors
OPTIONFILE=/etc/X11/Xsession.options 设定X进程的启动参数 例如允许用户进程allow-user-xsession
Xresources 为X资源文件。许多程序保留了X接口,允许X服务器管理一些视觉选项,例如窗口内的字体,配色等
xsession为X进程,可以设置一些启动时自动运行的程序,也可以用来设定自己的窗口管理器(窗口管理器和桌面环境或者登录管理器是无关的)




字体
====

freetype渲染引擎
--------------------------
作为Xorg服务器的一个模块,freetype的功能包括读取Truetype字体信息,如大小、分辨率、编码等,并以之为依据渲染字体
freetype2.x相对于freetype1.x 增加了抗锯齿等功能
(/etc/X11/xorg/conf 的 Module 字段中,可以选择使用的字体渲染模块,建议使用默认的freetype )

freetype只负责渲染字体。而查找字体,则可以由X服务器、X客户端或者字体服务器来完成。
找到字体后,使用freetype引擎就地渲染


X服务器根据X客户端的请求(字符编码),查找字体并进行渲染,然后显示,我们称之为X核心字体

X客户端自行查找字体并进行渲染,X服务器只负责显示,我们称之为Xft字体
由于Xft字体的渲染在客户端完成,所以它可以动态的加载,而不需要随同X服务器一同启动

另外还有一种字体服务器模式,例如Xfs字体:当客户端请求字体时,X服务器将请求转发到字体服务器,由字体服务器查找字体,并使用freetype引擎渲染,将结果传回X服务器,X服务器进行显示……


X核心字体
---------------------
/etc/X11/xorg.conf 中可以配置X核心字体的搜索路径。

代码: 全选

Section "Files" 
FontPath "/usr/X11R6/lib/X11/fonts/misc/"
FontPath "/usr/X11R6/lib/X11/fonts/Type1/"
FontPath "/usr/X11R6/lib/X11/fonts/Speedo/"
FontPath "/usr/X11R6/lib/X11/fonts/100dpi/"
FontPath "/usr/X11R6/lib/X11/fonts/75dpi/" 
EndSection
当X客户端向X服务器请求显示文字的时候,X服务器会按上面列表的先后顺序查找字体
例如:显示中文时,如果第一个路径中的字体不包含中文,则查找下面的路径,直到发现中文字体
请把您偏好的字体放在最上的位置

要使安装的字体能够作为X核心字体使用,将字体的安装路径添加到上面的列表中,使用 mkfontscale、mkfontdir扫瞄文件夹中的字体,并生成索引,就可以了(建议使用 ttmkfdir 生成fonts.scale ,将其复制为fonts.dir)

字体的选择及显示风格,可以修改GTK1的配置文件,或者在Xresources文件中对程序单独进行定义

事实上,在我们的日常应用中,X核心字体环境并不常见,使用GTK1图形库的程序、某些类型的终端……Emacs也是这样一个老派的程序……不过Emacs23中刚刚加入了xft字体的支持:lol:






Xft字体
--------------------------
Xft字体相关选项在 /etc/fonts/fonts.conf 文件中配置

Xft字体可以使用命令 fc-cache 安装, 递归扫瞄以下目录中的字体(包括子文件夹中的字体),并建立字体缓存

/usr/share/X11/fonts
/usr/share/fonts
/usr/local/share/fonts
~/.fonts
(/etc/fonts/fonts.fonf "<dir>"字段)


多数支持GTK2或者Qt图形库的X客户端能够使用Xft字体渲染技术 (GTK2为Gnome使用的图形库,Qt为KDE使用的图形库。相对来说,GTK2图形库在程序的GUI设计中更加通用)

如果需要安装字体,只要把字体拷贝到以上任何一个目录, fc-cache -fv 刷新字体缓存即可 (参数 -f 为强制刷新,-v 显示过程)

fc-list 能够列出所有可用字体

字体的选择及显示风格,可以修改GTK2或者Qt的配置文件,建议使用图形界面配置(通常桌面环境中附带了相关程序,例如gnome-font-properties)
上次由 kardinal 在 2006-08-06 4:17,总共编辑 4 次。
kuerbt
帖子: 305
注册时间: 2006-04-13 13:53

#17

帖子 kuerbt » 2006-06-30 9:59

建议lz整理到twiki上,这样更容易发挥集体的智慧
kardinal
帖子: 750
注册时间: 2006-03-19 11:39

#18

帖子 kardinal » 2006-06-30 11:21

Wiki是以辞典的形式作为知识的组织框架,更多的是为了解决特定问题而存在的,比如硬件兼容之类的问题……如果您有什么不懂的,可以去查询(wiki的内容应该尽量全面)。

但是wiki却不能够帮您系统的学习,无论对于新手抑或老手,wiki只适合担当顾问的角色,而不是引路人。
头像
greencoral
帖子: 147
注册时间: 2006-06-27 23:34

#19

帖子 greencoral » 2006-06-30 12:14

好东西,正是我需要的!太感谢了
greegree
帖子: 70
注册时间: 2006-06-29 10:38

#20

帖子 greegree » 2006-06-30 21:08

那好吧,我也来占个位子。
头像
Quenho
帖子: 29
注册时间: 2006-06-24 3:34

#21

帖子 Quenho » 2006-06-30 21:19

很好!!支持樓主
有這些介紹
新手上路就沒那麽迷茫了

辛苦樓主了
kardinal
帖子: 750
注册时间: 2006-03-19 11:39

#22

帖子 kardinal » 2006-07-01 0:04

不只是新手上路,只是现在才刚开始而已

计划陪您走完 新手、中手、老手的三个阶段,简称“三陪” :lol:

还有一篇马上就完了。。。不过得先看世界杯。。。 阿德大战。。。
kardinal
帖子: 750
注册时间: 2006-03-19 11:39

#23

帖子 kardinal » 2006-07-01 0:29

爽死我了 1:0 了 阿根廷要夺冠! :lol: :lol: :lol: :lol: :lol:

1:1 。。。。

拨凉拨凉滴……………………

最后一个小小的愿望,不要让巴西夺冠………阿门…………
kardinal
帖子: 750
注册时间: 2006-03-19 11:39

#24

帖子 kardinal » 2006-07-01 3:28

各位兄弟们,现在还是草稿阶段,有意见使劲儿地提

特别是感觉哪里有遗漏欠缺的,或者有描述不正确的,或者语法错别字儿什么的,一定要告诉我啊,就算是对我支持了

我也会尽最大可能去努力的 :lol:
wangji
帖子: 3
注册时间: 2006-06-26 1:16

#25

帖子 wangji » 2006-07-01 22:00

好文章,对初学者是最好的学习教程!目前我看到完了前六帖。。。感谢楼主。回帖继续学习
kardinal
帖子: 750
注册时间: 2006-03-19 11:39

#26

帖子 kardinal » 2006-07-02 3:20

谢谢支持 :lol:

需要提醒您的是:
由于内容在不断的修改(每一部分都会修改多次,可能还会继续修改),
建议您暂时先在网页中阅读
待比较成熟时,我会考虑作成易于阅读的排版格式:)
mrfox
帖子: 207
注册时间: 2006-06-29 23:47

#27

帖子 mrfox » 2006-07-02 9:07

LZ辛苦,建议加精
kardinal
帖子: 750
注册时间: 2006-03-19 11:39

#28

帖子 kardinal » 2006-07-02 19:32

精华了,感楼上兄弟的建议,当然还有版主大人的支持。

S\C\T这一部分的麻烦超过了我的预期,不过已经基本完成了

今天看能不能把系统结构部分完成

这些完成了,基本部分就比较完成了 :lol:

另:希望有能力的兄弟可以写单独软件的评测,教程

比如FireFox
可以有这些部分:安装、配置、一些问题的解决方案。并且尽量生动的说明原理
不一定要非常完整,某一软件某一个方面的解决方案,也是非常有帮助的。
如果只是把用什么命令,改哪些地方列出来,这些资料我也可以找到。。。(当然,这也比没有强:)
hubottle
帖子: 37
注册时间: 2006-07-01 8:58

#29

帖子 hubottle » 2006-07-02 19:54

楼主的语言实在是有点台湾人的味道 哈哈哈 适合适合 ^_^ 好像德国淘汰阿根廷了 点球 ~~~
kardinal
帖子: 750
注册时间: 2006-03-19 11:39

#30

帖子 kardinal » 2006-07-02 20:45

。。不是吧??没有吧??。。。

个人感觉是没有的,您可以举例说明一下,哪里有台湾人的味道,我会尽力改正:D

德国淘汰阿根廷早就知道了。。佩克尔曼真是白痴。。。马拉多纳也被暗算了,让人家略施小计就拒绝进场。。。裁判的表现也比较抢眼………………


还好,巴西也被淘汰了,让人比较开心 :lol:
回复