以Funtoo为基础的Linux桌面系统(4)

编译X服务器只需要这个命令

$ emerge xorg-x11

X服务器编译需要很久的时间,至少在我的老旧的Thinkpad X61上需要至少4小时。这个时候你可以选择傻傻得盯着屏幕上那些不知所云的但是疯狂滚动的字母发呆(第一次跟Gentoo亲密接触的时候我这么做过),或者找本看了半年也没看完的书消耗一下时间吧(我曾用这些时间终于读完了那本可以从二楼扔下来可以砸死人的Computer Graphics)。

「实践是检验真理的唯一标准」

X服务器编译好以后,需要测试一下。这个测试应该使用非常简单的配置才可以保证不会引入其他X服务器以外的问题。最好的选择就是twm,因为它一直以来就是标准的窗口管理器。安装xinit包可以同时安装xinit程序和twm窗口管理器。

$ USE="-minimal" emerge -1 xinit

安装结束后,运行命令

$ startx

如果一切顺利,你会看到一个非常简单朴素的钟表GUI和一个xterm窗口。Happy hacking!

X曾经是历史上最复杂的软件之一。它提供给应用程序开发的中间库Xlib也曾是让人叹为观止的最复杂API,因为人们给这个库写的说明性文档居然长达3卷,大概每卷一千多页!开源X服务器的开发历史又曲折又传奇,写出来的话精彩程度一定不输给一本武侠小说。这里我先借用几位大师的图片来展示一下X的大致结构。

X服务器和客户端的结构

这幅图来自这里。这幅图的原作者用它来展示如何在X中进行OpenGL等DRI操作。但是,这张图也同时说明了其他X应用的构成——几乎所有的X应用程序都必须通过Xlib与X服务器进行交互。X服务器会处理图形描绘请求并将处理的结果返回给客户端。窗口管理器就是最典型的X客户端。但是,对于X来说,所有的图形表示请求仅仅就是大大小小的矩形,它根本不知道这个矩形是一个刚刚输入的文字还是一个窗口。所以,要在这样的基础上构建一个现代的桌面系统,我们还需要在系统中安装很多软件,包括窗口管理器,桌面管理panel,系统监视dock,还有Widget框架(Qt或者gtk等)和X应用程序。这仅仅是万里长征走完了第一步。

打开GUI之后,试试键盘和鼠标/Trackpoint这些输入设备,看看它们有没有正常工作。也许你会发现很多问题。比如,键盘的布局并不是你想要的(默认的键盘布局是美国英语键盘),或者鼠标不能支持滚动操作。这些都可以通过配置X服务器解决。

# 键盘的配置:
# file:/etc/X11/xorg.conf.d/10-keyboard.conf 
Section "InputClass"
	Identifier	"Keyboard Defaults"
	MatchIsKeyboard	"yes"
	Option		"XkbLayout" "jp"
	Option		"XkbModel" "jp106"
	Option		"XkbOptions" "ctrl:nocaps"
EndSection

例子中,键盘布局是日语,键盘的特定模型是jp106键盘(最常见的日语键盘),并且在X中将CapsLock键作为Ctrl键使用。最常用的XkbOptions可以在这个文件/usr/share/X11/xkb/rules/xorg.lst中找到。

# 全宇宙无敌的trackpoint配置:
# file: /etc/X11/xorg.conf.d/20-trackpoint.conf 
Section "InputClass"
	Identifier	"Trackpoint Wheel Emulation"
	MatchProduct	"TPPS/2 IBM TrackPoint|DualPoint Stick|Synaptics Inc. Composite TouchPad / TrackPoint|ThinkPad USB Keyboard with TrackPoint|USB Trackpoint pointing device"
	MatchDevicePath	"/dev/input/event*"
	Option		"EmulateWheel"		"true"
	Option		"EmulateWheelButton"	"2"
	Option		"Emulate3Buttons"	"false"
	Option		"XAxisMapping"		"6 7"
	Option		"YAxisMapping"		"4 5"
EndSection

这个例子献给所有发现自己不能在firefox中使用trackpoint滚动屏幕的Thinkpad用户。

每次我安装完X才会运行全系统升级(因为即使最新版的Stage3也无法保证使用到最新的软件)。给你的电脑找一个安静的角落,保证足够的电源,并且运行下面的命令。然后最好睡一觉:)这样升级在我的Thinkpad上需要整整一夜!

$ emerge --update --newuse --deep --keep-going world

参考文献:

3 thoughts on “以Funtoo为基础的Linux桌面系统(4)

发表评论