网络推荐



本广告位招租!

推荐给好友 上一篇 | 下一篇

FreeBSD系统桌面环境配置指南

前言:

7c r @ZM#fp$TV这本来不是一个什么困难的问题,并且在FreeBSD HandBook Chapter 5上已经有详细的解释了,但是总有人搞不清楚,网上还有很多误人子弟的文章胡乱地解释,我也不能总是回答同样的问题,于是我把这个问题详细地写清楚,这个wiki页面不是为了替代FreeBSD HandBook Chapter 5,只是为了明确一些概念,帮助新手理清头绪迅速配置好桌面环境。BSD爱好者乐园eay n*H9t+Nl,q,E

注:

  • X或者说桌面环境对于FreeBSD、OpenBSD或者是Linux这些Unix-Like系统来说只是一个软件,并不是系统必须的基本组件,你完全可以不安装它;
  • 本wiki页面内容适用于FreeBSD、OpenBSD以及各个Linux发行版,例如:Debian、Gentoo;
  • 本wiki页面内容适合于FreeBSD的6.x、7.x或者是stable current分支(各个分支共享同一个ports树,所以如果你使用ports安装X的组件的话,各个分支的X的版本是一样的);
  • 本wiki页面内容适用于各个Linux发行版的不同版本或者分支(不同系统在软件的安装命令以及具体软件包的命名上可能存在某些差异),因为各个系统都是使用Xorg作为自己的X-server,不同版本的Xorg可能会有性能以及功能上的少许变化,但是其配置文件xorg.conf的语法却没有改变。

基本概念:

什么是X:

BSD爱好者乐园Fd H4u hYeA1e/Z

严格的说X是一个标准,也就Unix系统上图形界面的基本模式,顺便说一句,最早实现图形界面的是在Unix上,不是在Windows上。这个标准指定了一个Server/Client的基本模型来实现图形界面功能,具体的细节不需要太过深入。通常情况下,谈到X时就是指的图形界面。X的设计体现了Unix的哲学,也就是模块化,各个模块之间遵守相同的标准,所以运行X需要很多组件,包括x-server、s-client、window manager、x display manager,下面我们分别介绍每一个组件的具体含义。

LS)i?Y|

什么是X-server:

BSD爱好者乐园1hf({9Kg7Z#J ]O4i

在一般的server/client模型中,server总是代表性能比较高,处理很多数据的那个机器,比如你登录一个ftp站点或者是某个网站的时候,server指的是对方的系统。但是在X的server/client模型中恰好相反,这里面server仅仅负责鼠标、键盘、显卡、显示器这些输入输出部件,而x-client却是负责处理数据的。到目前为止,我们在FreeBSD系统里面使用x-server是:xorg-server。除此之外还有其他的商业的x-server,但是目前在FreeBSD上以及Linux这些自由的开源系统上使用的x-server主要是由xorg提供的xorg-server。所以,如果你想在自己的FreeBSD运行X,那么x-server是必须的。这就是为什么在安装图形界面的时候一定要先安装xorg或者是xorg-minimal,这两个port都是meta port,就是说这个port本身是一个空的port,但是这个port有很多依赖关系,这样可以帮助使用者迅速地安装软件。BSD爱好者乐园 swxcf(Y`

w i+_4g7J由于x-server负责鼠标、键盘、显卡、显示器这些输入输出部件,你必须在安装好以后,告诉x-server你当前系统使用的是什么样的鼠标、键盘、显卡、显示器。由于当前硬件厂商众多,所以不要指望x-server自动识别出所有需要的参数,通常你需要编辑一下/etc/X11/xorg.conf这个文件来提示它一下。现在你应该知道为什么论坛上总有人在买了USB鼠标以后相互讨论如何修改xorg.conf了。

-_"R2F#Z4K`

什么是X-Client:

BSD爱好者乐园cw Voc GQ

X-server负责管理鼠标、键盘、显卡、显示器,而X-client则负责处理程序的运行。比如说,我桌面上有一个gvim的图标,我现在移动鼠标点击了一下gvim的图标,那么X-server会告诉X-client:“用户移动了鼠标到什么位置,然后单击了一下鼠标的左键”。X-client收到这个信息以后会对这个行为做出反应,经过一番思考,它发现,我这个行为是要打开一个叫gvim的程序,于是X-client会运行gvim,然后告诉X-server:“你在显示器上给用户画出一个像gvim的东西来”。然后,我就在我的屏幕上很高兴地看见了我可爱的gvim编辑器了,当然还有伟大的DejaVu Sans Mono等宽字体。

|;}O d*]-NG

什么是窗口管理器:

BSD爱好者乐园I{)^U%Ah

你通常会运行几个程序,比如我现在在运行gvim、epiphany、gnome-terminal,这些程序在屏幕上都放在什么位置呢?这些程序在屏幕上看起来是什么样子的呢?窗口上需要有最大化、最小化图标吗?这些都是由窗口管理器(Window Manager)来负责的。BSD爱好者乐园|\!\?.u#qL?:Y^]

BSD爱好者乐园i4CP7X)QCU{\'e

窗口管理器有很多种,比如fvwm(定制能力很强)、metacity(gnome项目提供的,目前gnome desktop environment所使用的)。BSD爱好者乐园ZCi^7ez+Tf

什么是X应用程序:

BSD爱好者乐园cpP/J%U @9lp

这个概念最好理解了,简单的说就是你需要运行的图形界面的程序,比如gvim编辑器、epiphany网页浏览器,eog图片浏览器。BSD爱好者乐园Eyj {n!NLsc

什么是XDM:

BSD爱好者乐园s X4B~bQDc

XDM的全称是X Display Manager,这个程序允许你以图形界面的方式来登录系统。常见的XDM有xdm(很土很难看)、gdm(由gnome项目提供)、kdm(由kde项目提供)。对于运行X来说,这个组件不是必须的,也就是说:BSD爱好者乐园cji&TXf!gZ%\7\

  • 你可以安装它(比如安装gdm)并设定gdm在开机的时候运行(通过rc.conf),然后在系统启动的时候,系统会直接运行gdm,然后你就可以在一个很漂亮、很友好的图形界面的登录环境里面输入用户名、密码并选择语言(严格地说是选择locale环境变量);
  • 你可以不安装它,当系统开机以后,你会看到提示符,这时你输入用户名、密码,然后当你希望进入图形界面的时候运行startx命令,这个命令会读取你home目录下的.xinitrc文件中的内容,来运行X。

T-kt s#]t显然,前者比较方便。

x Aa6H}*x R2\D

什么是桌面环境:

'FAt@&nDS y'~如果上面的概念都理解了,那么理解桌面环境就很容易了。简单的说桌面环境是一个程序的集合,这个集合里面包括窗口管理器,X登录管理器,以及一下图形界面的应用程序,但是它不包括x-server。

|&nu/E0Y,w9p8@

ITl#s4`[7s lJ举个例子:gnome是一个桌面环境,在这个桌面环境中包含了:一个窗口管理器 (metacity)、一个X登录管理器(gdm)以及其他的图形界面程序,比如epiphany网页浏览器、gnome-terminal、eog,等等。

\+H9T0Z aH

FreeBSD下GNOME的安装与配置:

硬件环境介绍:

BSD爱好者乐园!Ye-@1E^8G n

操作系统:

'aQ P3h;w&KjZ
  • FreeBSD Release 7.1 amd64
BSD爱好者乐园%OH:YJ0p~ X/i

显卡:BSD爱好者乐园!N r.ZL P:B

  • NVIDIA GeForce 9500 GT
BSD爱好者乐园 m`&h6z{;QnQ

显示器:BSD爱好者乐园8G-n @0ci C!c%fA

  • 型号Philips 190CW8
  • 水平刷新频率:30-83
  • 垂直刷新频率:56-76
  • 分辨率:1440×900

(|7v @b#cc!Gu }?显示器的水平以及垂直刷新频率可以在你所购买的显示器的生产厂家的官方网站上查到,每个显示器是不一样的,对于某些没有“超出控制”功能的老显示器,设置错误可能导致显示器烧毁!

,S KD8X8Vo*aa

*PkS%p de鼠标键盘:BSD爱好者乐园C?r |f1f

  • 普通鼠标键盘

安装xorg-minimal:

BSD爱好者乐园'~*u;p4KS\

上文已经说明了xorg-server的作用,对于运行X来说,这个是必须的。

D`)L8}H
# cd /usr/ports/x11/xorg-minimal/
# make config-recursive
# make fetch-recursive
# make install clean

安装开源的n卡驱动:

;Kn3^'@3fM%T"R到目前为止,对于amd64构架的FreeBSD来说,还没有NVIDIA提供的驱动程序,所以只能使用由Xorg提供的nv开源驱动。

^0YbXM
# /usr/ports/x11-drivers/xorg-drivers
# make config
# make install clean

@&`X [W\G$A.]当运行完make config命令以后,会出现对话框,这时要选择nv,你也可以直接到nv这个驱动的port目录下面去运行make install clean命令,如果你是其他的显卡,那么你应该根据自己的具体情况选择相应的驱动程序。

O6A b7A6s-?!RI

安装gnome2-lite:

BSD爱好者乐园P P1u:B}1Xxi

你可以通过编辑gnome2-lite的Makefile来定制安装的组件,比如我不喜欢totem播放器,我就删掉了Makefile中的这个依赖关系,关于Makefile的语法规则请参考FreeBSD Porter's Handbook。

#C3Y(Rm7Yx
# cd /usr/ports/x11/gnome2-lite/
# make config-recursive
# make fetch-recursive
# make install clean

安装gdm:

I.s IT&d t我比较喜欢直接用图形界面登录系统,至少这样关机比较方便。BSD爱好者乐园5p6l@^2?'g1GP

# cd /usr/ports/x11/gdm/
# make fetch-recursive
# make config
# make install clean

安装后的配置:

配置xorg-server:

BSD爱好者乐园 ?0J@jzR za

配置xorg-server就是创建并编辑xorg.conf这个文件,其详细语法可以man xorg.conf。对于7.0版本之前的Xorg来说运行x-server必须要有/etc/X11/xorg.conf;但是对新版本的Xorg来说,如果在/etc/X11/目录下面没有找到xorg.conf也可以运行;但是如果在/etc/X11/下面找到一个xorg.conf,并且这个配置文件里面包含错误的话,那么将无法运行x-server。

_~)S&eH&Z!H
创建:
BSD爱好者乐园8d)},NEU\u

安装xorg以后,运行下述命令,将会在/root目录下生成一个xorg.conf.new文件,这个文件中包含了xorg对系统的检测结果,但是这个检测结果不一定完整的,因为硬件厂商实在是太多了,所以你可能需要提示它一些东西,比如你显示器的水平以及垂直刷新频率,最佳分辨率,通常情况下它都需要你提示一下,也就是需要你编辑一下xorg.conf。

dWl%t^s9Y"`'V
# Xorg -configure
测试:
BSD爱好者乐园*w!g"c^k M

运行下述命令或者直接复制/root/xorg.conf.new到/etc/X11/xorg.conf然后运行startx命令。如果测试成功的话,那么你很幸运,因为Xorg自己识别出了你的硬件并配置了合适的参数,但是这些参数不一定是绝对正确的,所以你可能还需要编辑一下/etc/X11/xorg.conf这个文件;如果测试不成功,那么可能由于某些原因导致Xorg没有识别出你的硬件或者是没有配置合适的参数,这时你解决问题的方法就是手工编辑/etc/X11/xorg.conf。总结一下,不管测试是不是成功,你都应该去手工编辑一下/etc/X11/xorg.conf,不要指望Xorg能自己搞定一切,因为硬件厂商实在是太多了。BSD爱好者乐园}\#N3G)VVu

# Xorg -config xorg.conf.new

m;w}Lkl-Jm注意:

z/h i;J ~2?:w~d
  • 如果你安装的是xorg这个port,那么你可以做这个测试,当你测试成功的时候你会看见一个比较难看的绿色的窗口管理器,这个窗口管理器叫twm;
  • 如果你安装的是xorg-minimal这个port,那么你根本没有办法进行这个测试,因为xorg-minimal里面根本没有对任何窗口管理器的依赖关系,没有窗口管理器是没有办法运行X的,你可以在安装了gnome或者是其他的桌面环境之后进行这个测试。
编辑:

Pq-J;R1_XHt编辑的目的在于准确地描述自己系统的硬件信息,上面已经说过了,Xorg不一定能自己搞定一切,我在这里只介绍重要的内容,也就是显卡驱动问题显示器刷新频率问题以及显示器分辨率问题

TB9w+zk1xBSD爱好者乐园LqTL])R7F cSJ

1.显卡驱动问题:

Y6n u P.`$j
Section "Device"
        ### Available Driver options are:-
        ### Values: <i>: integer, <f>: float, <bool>: "True"/"False",
        ### <string>: "String", <freq>: "<f> Hz/kHz/MHz"
        ### [arg]: arg optional
        #Option     "SWcursor"           	# [<bool>]
        #Option     "HWcursor"           	# [<bool>]
        #Option     "NoAccel"            	# [<bool>]
        #Option     "ShadowFB"           	# [<bool>]
        #Option     "UseFBDev"           	# [<bool>]
        #Option     "Rotate"             	# [<str>]
        #Option     "VideoKey"           	# <i>
        #Option     "FlatPanel"          	# [<bool>]
        #Option     "FPDither"           	# [<bool>]
        #Option     "CrtcNumber"         	# <i>
        #Option     "FPScale"            	# [<bool>]
        #Option     "FPTweak"            	# <i>
        #Option     "DualHead"           	# [<bool>]
	Identifier  "Card0"
	Driver      "nv"
	VendorName  "nVidia Corporation"
	BoardName   "GeForce 9500 GT"
	BusID       "PCI:1:0:0"
EndSection
BSD爱好者乐园'vl-o/n} Zp

上面的Driver “nv”这一行的意思是我指定系统使用开源的nv驱动作为我显卡的驱动程序,也就是说这个部份解决你的显卡驱动问题,如果你是其他类型的显卡你就需要安装其他的驱动程序并修改xorg.conf中Driver这个变量的相应内容。

+A&r&Z:cg4j

&i[ h$I7M-~ ]!dodw2.显示器刷新频率问题:BSD爱好者乐园Kj+S u$@%E

Section "Monitor"
	Identifier   "Monitor0"
	VendorName   "Monitor Vendor"
	ModelName    "Monitor Model"
	HorizSync	30-83
	VertRefresh	56-76
	Option		"DPMS"
EndSection
BSD爱好者乐园 ^_ ?'\2p

上面的HorizSync 30-83VertRefresh 56-76这两行用于指定显示器的水平以及垂直刷新频率,配置好这两个参数以后显示器的刷新频率才会正常。

h4F)`l2G1pBSD爱好者乐园Mgj.]iH"[

再次提醒:BSD爱好者乐园E%jhfnn

BSD爱好者乐园eT x*|Uf4x g"K

显示器的水平以及垂直刷新频率可以在你所购买的显示器的生产厂家的官方网站上查到,每个显示器是不一样的,对于某些没有“超出控制”功能的老显示器,设置错误可能导致显示器烧毁!BSD爱好者乐园1]5?Bzb#G


3C(\B6aGs\q/i3.显示器分辨率问题:BSD爱好者乐园nEU8Q4y7n

Section "Screen"
	Identifier "Screen0"
	Device     "Card0"
	Monitor    "Monitor0"
	DefaultDepth	24
	SubSection "Display"
		Viewport   0 0
		Depth     24
		Modes	"1440x900"
	EndSubSection
EndSection
BSD爱好者乐园ul%B%C T*M4c:x

这一部分指定你所使用的分辨率。X系统分辨率是在xorg.conf中指定的,GNOME或者是KDE会读取这个数据,如果你需要修改你系统分辨率,那么你应该编辑xorg.conf文件中的相关内容,而不是点击你的桌面环境中某个菜单上的某个图标。

%asn8Xo"u:N"W.?up

R `Ax ] z Uc*B到此为止你的X-Server已经知道该如何的使用你的显卡和显示器了。BSD爱好者乐园5|&SC_bU,Rrex


挂载proc文件系统:

IiGetFreeBSD的默认安装配置中是不挂载虚拟文件系统proc的,并且FreeBSD基本系统的程序也并不倚赖这个虚拟文件系统,但是由于X的各个组件并不是单独为FreeBSD开发设计的,所有某些组件还要倚赖这个虚拟文件系统。如果不挂载这个虚拟文件系统,那么你在gdm和gnome里面没有办法直接关机,因为恰好是负责用户权限的那个程序依赖于proc文件系统,所以你必须挂载虚拟文件系统,挂载方法如下:BSD爱好者乐园*Hy8N\,p'W

  • 首先,保证内核的配置文件里面有这两行:
options         PROCFS
options         PSEUDOFS
BSD爱好者乐园)? Kz` Z3X

如果是你使用系统自带的内核的话,那么这两行已经包含在配置文件中了;如果你自己编译了内核,那么一定要添加这两行到你的配置文件中去,然后重新编译安装内核。BSD爱好者乐园_-BJ@;g {

  • 然后,添加下述内容到/etc/fstab中:
proc			/proc		procfs	rw		0	0

配置GDM开机运行:

BSD爱好者乐园.p$a8V RU,L&\R$y

添加下述内容到/etc/rc.conf中,告诉系统开机运行gnome的服务,其中包括gdm,按照FreeBSD GNOME中FAQ的介绍添加gnome_enable=“YES”即可,但是开机时系统提示我dbus没有设置好,这也许是FreeBSD的rc系统的某个bug,早些时候我在官方论坛讨论过这个问题,但是一直没有下文,从7.1到7.2一直都是这样。

*e3]/A0nS]4VnA-v}
dbus_enable="YES"
gnome_enable="YES"

配置完毕:

QB.X%`#J`$@]4|到此为止,xorg知道了自己要使用显卡和显示器参数,系统也知道了开机以后需要运行gdm了,可以说已经完成了X的配置工作,下面补充一个FreeBSD系统GNOME桌面环境下fcitx输入法的安装与配置方法。BSD爱好者乐园6R3`;C*a*q

GNOME下的fcitx:

BSD爱好者乐园V2} Jo7h3V#jEQ

本来是写X的,但是fcitx和X还是有点关系的,使用startx和使用gdm登录的fcitx的配置方法是不一样的,这里对使用gdm的配置方法做一下说明。

g2E ?bc%e_T
  • 首先,你要安装:
# cd /usr/ports/chinese/fcitx/
# make install clean
  • 然后,你需要配置环境变量:

O4z CnPtE0F1EE配置环境变量的方法并不唯一,在这里通过profile来实现,把下述内容下如.profile,

\0wF-d)h
LC_CTYPE=zh_CN.UTF-8; export LC_CTYPE
XMODIFIERS=@im=fcitx; export XMODIFIERS
fcitx&

p!Z#j6lZ前面两行是配置fcitx运行时需要的环境变量,最后一行是告诉系统开机自动运行fcitx。按照上述配置完以后,fcitx会在进入gnome桌面环境以后自动运行,激活的命令是Ctrl+Space,如果你觉得fcitx默认的外观比较难看的话,你可以修改你home下面的.fcitx/config中的参数文件来调整fcitx的外观。BSD爱好者乐园V}1C7qO{%[n#j

BSD爱好者乐园]i _B5H3Q.@$Q

配置fcitx的关键是环境变量,使用gdm和使用startx对环境变量的处理是不一样的。使用其他的XDM时,主要注意的问题也是环境变量,就是说你所使用的XDM如何处理对待环境变量。在上面的配置中我使用UFT-8编码方案,其具体含义可参考locale环境变量的资料,此处不做详细介绍。

a Y|(bvae

后记:

BSD爱好者乐园+Gz6GK*m0Y]'r

这个wiki页面并不是为了代替或者取代官方文档,它只是对官方文档的一个补充,如果内容上和官方文档有冲突,以官方文档为准。并且这个wiki页面中介绍的X是比较简单的情况,也就是X-Server和X-Client都运行在同一台电脑上,事实上可以分别在不同的机器上运行X-Server和X-Client,详细情况请参考相关资料。BSD爱好者乐园-E:yI,SsJQ:?

/p'| RN {[8L最后,希望能对大家有所帮助,欢迎补充。BSD爱好者乐园o1q6n6W-Y?

主要参考资料:

BSD爱好者乐园{ sMya.\_6R

FreeBSD HandBook Chapter 5

a+n_S*S6}BSD爱好者乐园/L3|d!o:AmR

FreeBSD GNOMEBSD爱好者乐园3P1]&h |3zrx$plA"T

BSD爱好者乐园0bI+s(T f*S5V

FreeBSD GNOME FAQBSD爱好者乐园e Y.g#v3S'Q0\v

2]{ dHXkp关于FreeBSD下和GNOME有关的问题都可以在这个FAQ上找到,比如有人反映自己的GNOME启动比较慢,那么就应该参考FAQ的问题20.BSD爱好者乐园hE _nmBD

K?@!ug^FreeBSD Porter's HandbookBSD爱好者乐园 R/q~xE7w


[重要提醒]对本篇资料有疑问,请到论坛讨论,尽量使文章准确无误>>>
[版权声明]BSD爱好者乐园站内文章,如来源不是互联网,则均系原创或翻译之作,可随意转载,或以此为基础进行演译,但务必以链接形式注明原始出处和作者信息,否则属于侵权行为。另对本站转载他处文章,俱有说明,如有侵权请联系本人,本人将会在第一时间删除侵权文章。
TAG: freebsd FreeBSD Freebsd 桌面
 

评分:0

我来说两句

seccode