软件安装之--RPM命令大全!

 



 
RPM 有五种基本的操作方式(不包括创建软件包): 安装, 卸载, 升级, 查询,和验证。 下面我们就来逐一的讲解吧。






一、 安装RPM包


RPM 软件包通常具有类似foo-1.0-1.i386.rpm 的文件名。其中包括 软件包的名称(foo),版本号(1.0),

发行号(1), 和 硬件平台(i386)。安装一个软件包只需简单的键入以下命令:

$ rpm -ivh foo-1.0-1.i386.rpm

foo ####################################

RPM安装完毕后会打印出软件包的名字(并不一定与文件名相同), 而后打印一连串的#号以表示安装

进度。虽然软件包的安装被设计的尽量简单易行, 但还是可能会发生如下的错误:

1、 软件包已被安装

如果您的软件包已被安装, 将会出现以下信息:

$ rpm -ivh foo-1.0-1.i386.rpm

foo package foo-1.0-1 is already installed

error: foo-1.0-1.i386.rpm cannot be installed

如果您仍旧要安装该软件包,可以在命令行上使用--replacepkgs 选项,RPM将忽略该错误信息强行安装。

2、文件冲突

如果您要安装的软件包中有一个文件已在安装其它软件包时安装,会出现以下错误信息:

# rpm -ivh foo-1.0-1.i386.rpm

foo /usr/bin/foo conflicts with file from bar-1.0-1

error: foo-1.0-1.i386.rpm cannot be installed

要想让RPM 忽略该错误信息, 请使用--replacefiles 命令行选项。

3、未解决依赖关系

RPM软件包可能依赖于其它软件包,也就是说要求在安装了特定的软件包之后才能安装该软件包。

如果在您安装某个软件包时存在这种未解决的依赖关系。会产生以下信息:

$ rpm -ivh bar-1.0-1.i386.rpm

failed dependencies: foo is needed by bar-1.0-1

您必须安装完所依赖的软件包,才能解决这个问题。如果您想强制安装(这是个坏主意, 因为安装后的软

件包未必能正常运行), 请使用--nodeps 命令行选项。


二、卸载RPM包


卸载软件包就象安装软件包时一样简单:

$ rpm -e foo

注意这里使用软件包的名字name ``foo, 而不是软件包文件的名字file ``foo-1.0-1.i386.rpm。

如果其它软件包依赖于您要卸载的软件包,卸载时则会产生错误信息。如:

$ rpm -e foo

removing these packages would break dependencies:foo is needed by bar-1.0-1

若让RPM忽略这个错误继续卸载(这可不是一个好主意,因为依赖于该软件包的程序可能无法运行),

请使用--nodeps 命令行选项。



三、升级RPM包


升级软件包和安装软件包十分类似:.

$ rpm -Uvh foo-2.0-1.i386.rpm

foo ####################################

RPM将自动卸载已安装的老板本的foo 软件包,您不会看到有关信息。事实上您可能总是使用 -U 来

安装软件包,因为即便以往未安装过该软件包,也能正常运行。因为RPM 执行智能化的软件包升级,

自动处理配置文件,您将会看到如下信息:

saving /etc/foo.conf as /etc/foo.conf.rpmsave

这表示您对配置文件的修改不一定能向上兼容。 因此,RPM 会先备份老文件再安装新文件。您应当尽快解

决这两个配置文件的不同之处,以使系统能持续正常运行。

因为升级实际包括软件包的卸载与安装两个过程,所以您可能会碰到由这两个操作引起的错误。另一个你

可能碰到的问题是:当您使用旧版本的软件包来升级新版本的软件时,RPM会产生以下错误信息:

$ rpm -Uvh foo-1.0-1.i386.rpm

foo package foo-2.0-1 (which is newer) is already installed

error: foo-1.0-1.i386.rpm cannot be installed

如果你确有需要将该软件包”降级,加入 --oldpackage 命令选项就可以了。


四、 查询已安装的软件包


使用命令rpm -q来查询已安装软件包的数据库。简单的使用命令 rpm -q foo 会打印出foo软件包 的包名 ,

版本号,和发行号:

$ rpm -q foo

foo-2.0-1

除了指定软件包名以外,您还可以使用以下选项来指明要查询哪些软件包的信 息。 这些选项被称之为

“软件包指定选项“。

· -a 查询所有已安装的软件包

· -f 将查询包含有文件. 的软件包

· -p 查询软件包文件名为的软件包

还可以指定查询软件包时所显示的信息。它们被称作信息选择选项:

· -i 显示软件包信息,如描述, 发行号, 尺寸, 构建日期, 安装日期, 平台, 以及其它一些各类信息。

· -l 显示软件包中的文件列表。

· -s 显示软件包中所有文件的状态。

· -d 显示被标注为文档的文件列表(man 手册, info 手册, READMEs, etc)。

· -c 显示被标注为配置文件的文件列表。这些是您要在安装完毕以后加以定制的文件(sendmail.cf,

passwd, inittab, etc)。

对于那些要显示文件列表的文件, 您可以增加-v 命令行选项以获得如同 ls -l 格式的输出。



五、 验证软件包


验证软件包是通过比较已安装的文件和软件包中的原始文件信息来进行的。验证主要是比较文件的尺寸,

MD5 校验码, 文件权限, 类型, 属主和用户组等。

rpm-V命令用来验证一个软件包。您可以使用任何包选择选项来查询您要验证的软件包。 命令rpm -V foo

将用来验证foo软件包。又如:

· 验证包含特定文件的软件包:

rpm -Vf /bin/vi

· 验证所有已安装的软件包:

rpm -Va

· 根据一个RPM包来验证:

rpm -Vp foo-1.0-1.i386.rpm

如果您担心你的RPM数据库已被破坏,就可以使用这种方式。

如果一切均校验正常将不会产生任何输出。如果有不一致的地方,就会显示出来。 输出格式是8位长字符

串, ``c 用以指配置文件, 接着是文件名. 8位字符的每一个 用以表示文件与RPM数据库中一种属性的比较

结果 。``. (点) 表示测试通过。.下面的字符表示对RPM软件包进行的某种测试失败:

显示字符 错误源

5 MD5 校验码

S 文件尺寸

L 符号连接

T 文件修改日期

D 设备

U 用户

G 用户组

M 模式e (包括权限和文件类型)

如果有错误信息输出, 您应当认真加以考虑,是通过删除还是重新安装来解决出现的问题。



六、教你一招


RPM不仅是安装/卸载程序的工具,它还是系统维护和诊断的一把好手。看过下面几个例子你就会领教它的

厉害了。

· 如果您误删了一些文件, 但您不能肯定到底都删除了那些文件,怎么办? 您可以键入:

rpm -Va

rpm会在屏幕上显示出文件删除的情况。若你发现一些文件丢失了或已被损坏, 您就可以重新安装或先卸载

再安装该软件包。

· 如果您碰到了一个自己不认识的文件,要想查处它属于哪个软件包,您可以输入以下命令

rpm -qf /usr/X11R6/bin/xjewel

输出的结果会是:

xjewel-1.6-1

· 如果发生综合以上两个例子的情况,如文件/usr/bin/paste出了问题。您想知道哪个软件包中包含该文

件,您这时可以简单的键入:

rpm -Vf /usr/bin/paste

· 如果您想了解正在使用的程序的详细信息, 您可以键入如下命令来获得软件包中关于该程序的文档信息:

rpm -qdf /usr/bin/ispell

输出结果为:

/usr/man/man4/ispell.4

/usr/man/man4/english.4

/usr/man/man1/unsq.1
/usr/man/man1/tryaffix.1

/usr/man/man1/sq.1

/usr/man/man1/munchlist.1

/usr/man/man1/ispell.1

/usr/man/man1/findaffix.1

/usr/man/man1/buildhash.1

/usr/info/ispell.info.gz

/usr/doc/ispell-3.1.18-1/README

· 您发现了一个新的koules RPM,但您不知道它是做什么的,您可以键入如下命令:

rpm -qip koules-1.2-2.i386.rpm

· 现在您想了解koules的 RPM包在系统里安装了哪些文件, 您可以键入:

rpm -qlp koules-1.2-2.i386.rpm输出结果为:

/usr/man/man6/koules.6

/usr/lib/games/kouleslib/start.raw

/usr/lib/games/kouleslib/end.raw

/usr/lib/games/kouleslib/destroy2.raw

/usr/lib/games/kouleslib/destroy1.raw

/usr/lib/games/kouleslib/creator2.raw

/usr/lib/games/kouleslib/creator1.raw

/usr/lib/games/kouleslib/colize.raw

/usr/lib/games/kouleslib

/usr/games/koules

以上只是几个常见例子。随着您进一步的使用RPM,您会发现它的各种功能选项组合可以实现更为强大的

RPM包管理功能。


文章来源于http://www.lupaworld.com
Posted in 未分类 | 1 Comment

Linux系统下应用知识大荟萃

问:如何使系统在停止操作一段时间后能自动退出?


    答:当root账户离开计算机时,出于安全考虑,最好能让系统在隔一段时间后能自动退出。为了能做到这一点,必须为一个“TMOUT”的Linux变量设置指定时间(单位是秒)。编辑“/etc/profile”文件,在有“HISTFILESIZE=”字样的那一行的后面加上“TMOUT=300”,加入的这一行含义是5分钟。当把这行内容放入“/etc/profile”文件后,在系统连续5分钟不用时,系统会自动通知系统中的所有用户系统将退出。root用户也可以把该变量设置放在用户各自的“.bashrc”文件中,使得系统在指定的一段时间不用后能自动退出。该变量参数被设置在系统中后,必须先退出系统,然后再以root帐户重新登录后,该项设置才会生效。


    问:如何在Red Hat 7.3上加Simsun.ttc字体?


    答:Red Hat 7.3安装时选取简体中文安装,先复制一个simsun.ttc到/usr/X11R6/lib/X11/font/TrueType, 改名为simsun.ttf;然后进入/usr/X11R6/lib/X11/font/TrueType目录下,运行ttmkfdir > fonts.dir命令;接着用vi编辑fonts.dir文件,把有simsun.ttf行修改如下:


simsun.ttf -misc-SimSun-medium-r-normal--0-0-0-0-c-0-ascii-0
simsun.ttf -misc-SimSun-medium-r-normal--0-0-0-0-c-0-iso10646-1
simsun.ttf -misc-SimSun-medium-r-normal--0-0-0-0-p-0-iso8859-15
simsun.ttf -misc-SimSun-medium-r-normal--0-0-0-0-p-0-iso8859-1
simsun.ttf -misc-SimSun-medium-r-normal--0-0-0-0-c-0-gb2312.1980-0
simsun.ttf -misc-SimSun-medium-r-normal--0-0-0-0-p-0-gb2312.1980-0
simsun.ttf -misc-SimSun-medium-r-normal--0-0-0-0-m-0-gb2312.1980-0
simsun.ttf -misc-SimSun-medium-r-normal--0-0-0-0-p-0-gbk-0



接着运行cat fonts.dir > fonts.scale命令,修改/etc/X11/XF86config-4, 在Section“Files”加上下面这一行:


FontPath “/usr/X11R6/lib/X11/fonts/TrueType”
最后回到KDE桌面里, 在“开始”→“选项”→“观感”→“字体”,将所有字体改为Simsun。


    问:Unicon和Zhcon有什么区别,各有什么作用?


    答:Unicon是内核态的中文平台,基于修改Linux FrameBuffer和Virtual Console(fbcon)实现的。由于是在系统底层实现的,所以兼容性极好,可以直接支持gpm鼠标。但是相对比较危险,稍有漏洞就可能会危及系统安全。Zhcon是用户态的中文平台,有点像UCDOS那类。


    问:请问该如何卸载tar格式的文件?


    答:通常编译过程以后都会用make install这条命令将用户的程序安装到相应路径当中。最保险的方法是查看一下Makefile文件,主要是看install部分,从其中找出tar格式的文件被复制到了什么路径,然后进入相应的目录进行删除即可。


    问:SOCKS5启动后,一段时间后就停止了。用命令ps auxw | grep socks5查看后,发现有很多SOCKS defunct进程。请问这是什么原因?


    答:主要是打补丁的问题。如果socks5-tar.gz是没打过补丁的版本,必须下一个带补丁的v1.0-r11版本,重新安装、运行问题就可以解决了。


    问:我在VMware WorkStation 4.0.5中安装Debian 3.0时,提示找不到硬盘,需要SCSI的驱动。但是我用的是IDE硬盘,请问该怎么办?


    答:由于VMware将用户划分的硬盘空间虚拟成SCSI硬盘,而Debian安装盘中没有对应的驱动,而安装其它Linux版本时,有的在一开始会加载SCSI驱动,所以没有这个问题。用户可以修改VMware的配置,将其改为模拟IDE硬盘就可以了。


    问:安装完Red Hat后,前面的提示符为root@localhost,可以修改吗?


    答:当然可以。在bash中提示符是通过一个环境变量$PS1指定的。用export $PS1查看现在的值,比较直观常用的提示符可以设定为export PS1=“[u@h W]$”。其中u代表用户名,h代表主机名,W代表当前工作目录的最后一层,如果是普通用户$则显示$,root用户显示#。


    问:在vi中搜索了一个单词,该单词以高亮显示,看起来很不舒服,怎么能将它去掉?


    答:在vi的命令模式下输入:nohlsearch就可以了。另外可以在~/.vimrc中写上下面的语句就会有高亮显示:


set hlsearch
加上下面的语句就不会有高亮显示:


set nohlsearch


问:如何找出系统中所有的*.cpp、*.h文件呢?


    答:用find命令就可以了。不过如果从根目录查找消耗资源较高,使用下面的命令就可以:


# :find / -name "*.cpp" -o -name "*.h"



    问:安装Debian需要几张盘就够了?7张盘全部都要下载吗?


    答:如果经常有网络环境的话,下载第一张就可以了。要是没有网络环境的话不推荐使用Debian,因为Debian主要依赖网络来更新软件。实在要安装的话,要下载全部7张盘,否则可能会出现需要的软件包找不到的问题。


    问:Debian第一张光盘为什么有两个版本?debian-30r1-i386-binary-1.iso和debian-30r1-i386-binary-1_NONUS.iso该下载哪一个版本呢?它们有什么区别?


    答:因为含有“non-US”(不属美国)的软件不能合法地存放在架设于美国境内的服务器中。 以前,其原因通常是因为软件含有严密的密码编码,而今天,则是因为程序使用了美国专利保护的演算法。每个人应该取用“non-US”来供私人用途所用;而没有这个标识的iso则只对架设在美国的镜像及供应商才有用处。其它二进制的光盘则不会含有任何“US-sensitive”(与美国相关的)软件,它们和其它种binary-1光盘一样运作得很好。因此,个人使用还是下载debian-30r1-i386-binary-1_NONUS.iso版本。


    问:为何我使用umount /mnt/cdrom命令的时候出现device is busy这样的语句,不能umount?


    答:在使用umount的时候一定要确保已退出/mnt/cdrom这个目录,退出这个目录就可以使用umount /mnt/cdrom了。


    问:我使用的是笔记本电脑,怎么才能在控制台下显示现在还剩多少电量呢?


    答:使用apm -m就可以看到还有多少分钟了,具体参数可以用man apm查看。


    问:如何使用Red Hat自动更新软件包的功能?


    答:Red Hat 6.1以后有个命令up2date,能自动检测决定哪些软件包需要更新,然后可以使用up2date-config进行配置。第一次使用up2date时,需要root用户执行rpm-import /usr/share/rhn/RPM-GPG-KEY,然后再运行up2date,它会通过SSL验证,如果用户在安装时提供了正确的注册信息,那么就可以自动升级软件包了。其中升级除kernel外的RPM用up2date -u,升级包括Kernel在内的RPM用up2date -u -f。


    问:为什么我进入Linux的终端窗口时,man一条命令出来的都是乱码呢?


    答:这是因为你的字符集设置有问题。临时解决办法可以使用export LANG=“en_US”。要想不必每次都修改的话,在/etc/sysconfig/i18n文件里面修改LANG=“en_US”就可以了。也可以针对某个用户来做,这样就可以改变个人的界面语言,而不影响别的用户。命令如下:


#cp /etc/sysconfig/i18n $HOME/.i18n



    问:从网上的FTP下载Red Hat光盘的时候,右边有个MD5校验码,我怎么才能知道校验码正确呢?


    答:通过命令md5sum filename可以得出校验码,然后和给出的进行对比,查看是否相同就可以了。


    问:我需要让Linux下面添加的用户在设置密码时必须大于4位数,怎么设置呢?


    答:修改/etc/login.defs文件中的PASS_MIN_LEN(此项用于设置密码的位数)值就可以了。


    问:怎么查看一个端口上正在运行什么程序呢?


    答:可以使用lsof命令,比如要查看21端口正在运行什么程序时可以执行下面的命令:


# lsof -i:21



    问:编译内核的时候出错,提示“Too many open files”,请问怎么处理?


    答:这是因为file-max默认值(8096)太小。要解决这个问题,可以root身份执行下列命令(或将它们加入/etc/rcS.d/*下的init脚本):


# echo "65536" > /proc/sys/最后进入解压后的目录,运行安装命令。
# cd vmware-linux-tools
# ./install.pl



    问:本来装有Linux与Windows XP,一次将Windows XP重装后,发现找不到Linux与Windows XP的启动选单,请问如何解决?


    答:首先光盘启动,进入rescue模式,运行GRUB,进入grub提示符grub>,然后敲入下面的语句,重启就好了。


root (hd0,2),setup (hd0)



网络


    问:请问用户的IP是动态的,如何在Squid中限定在同一时间内同一账户在线的数量?


    答:例如限制单个用户只能打开12个HTTP连接,采用下面的方法:


acl all src 0.0.0.0/0.0.0.0
acl limit maxconn 12
acl localnet src 192.168.0.0/24
http_access deny localnet maxconn
http_access allow localnet
http_access deny all


 问:如果我用Squid代理的代理服务器在192.168.1.0这个网段里,例如它的IP是192.168.1.1,我有一些客户端在192.168.2.0这个网段内,怎样设置才能通过这个代理服务器出去?


    答:如果不用透明代理,直接在浏览器的代理选项里设置就可以了。否则首先是在代理服务器的网卡上再挂一个IP为192.168.2.1,添加相应的路由,再修改Squid的squid.conf文件里的监瑞脑消金兽听地址和端口等,最后在192.168.2.0网段的客户端设置其网关为192.168.2.1,再直接在浏览器的代理选项里设置一下就可以了。


    问:我在Windows中通过FTP传一个文本文件到Linux中,但是打开文本文件后每行最后都有^M的标志。由于很长,用编辑器去除太麻烦,有什么解决办法呢?


    答:为了解决这个问题,Linux下专门有两个工具可以互换Windows格式和Linux格式,它们分别是dos2unix和unix2dos。比如用下面的命令就可以将文件名为“filename”文件从Windows格式转换为Linux文本格式。


# dos2unix filename



    问:安装了一台Linux服务器,想自己编译内核,一步一步做下来,GRUB也添加进去了,但出现“kernel Panic:VFS:Unable to mount root fs on 0:00”的错误,请问是怎么回事?


    答:一般情况下initrd这个文件在台式机上不是必须的,但是在有SCSI设备的服务器上却是必须的。有可能因为编译内核的时候没有产生initrd那个文件,所以会有上面的错误提示。用户可以使用mkinitrd命令来生成一个initrd.img文件,然后加入GRUB,重启试一试。


    问:如何设置用户登录后的欢迎信息?


    答:修改/etc/motd文件,往里面写入文本,就能使用户通过Telnet正确登录后,执行Shell之前得到相应的提示信息。


motd就是“messages of the day”,也就是当日信息的意思。管理员可以往里面写一些需要注意的事项或通知等来提醒正式用户。


    问:如何使用netrc文件进行自动FTP?


    答:在自己的home目录下建立一个权限为600,后缀名为.netrc的文件,内容如下:


machine 172.168.15.1 login admin password admin



这样用户以后每次登录FTP服务器172.168.15.1的时候,系统都会帮用户以用户名admin、密码admin登录。用户利用这个特征可以实现自动FTP。例如用户想要每天6:00到172.168.15.1机器上面获得/admin目录下的文件admin.txt,可以按如下方法做。


建立一个文件ftp_cmd,内容如下:


cd admin
get amin.txt
bye



然后使用crontab -e设置定时任务:


0 6 * * * ftp 172.168.15.1 < ftp_cmd



    问:怎样得到ipchains的日志?


    答:用户设置规则的时候必须加入-l参数才会在/etc/messages里面做记录。不过建议还是不加的好,不然用户的/etc/messages会变得非常大。


安全


    问:我下载了rcs5.7,用./configure && make && make install时报错如下:


./conf.sh: testing permissions ...
./conf.sh: This command should not be run with superuser permissions.



我是以root用户身份登录编译安装的,为什么会这样?


    答:有些软件确实因为考虑到安全等其它原因不能用root用户编译。这时只要用其它用户编译,到make install这步时,如果该软件安装在不属于编译时的用户的主目录下时,需要使用su命令转换为root用户再执行make install。


    问:我在安装USBView时失败,具体情况如下:


#rpm -ivh usbview-1.0-9.src.rpm
warning:usbview-1.0-9.src.rpm:V3 DSAsignature:NOKEY,key IDab42a60e


答:这行代码说明安装失败是因为你的系统上没有安装合适的钥匙来校验签名。要使该软件包通过校验,可以通过导入Red Hat的公匙来解决,具体的方式是在Shell下运行如下命令:


#rpm -import /usr/share/rhn/RPM-GPG-KEY


(注意大小写)


    问:如何防止某个关键文件被修改?


    答:在Linux下,有些配置文件是不允许任何人(包括root)修改的。为了防止被误删除或修改,可以设定该文件的“不可修改位(immutable) ”。命令如下:


# chattr +i /etc/fstab



如果需要修改文件则采用下面的命令:


# chattr -i /etc/fstab



    问:怎样限制一个用户可以启动的进程数?


    答:先确定一下/etc/pam.d/login文件中下面一行的存在:


session required /lib/security/pam_limits.so



然后编辑/etc/security/limits.conf,在里面可以设置限制用户的进程数、CPU占用率和内存使用率等,如hard nproc 20就是指限制20个进程,具体可以看man。


    问:如何不显示其它用户的消息?


    答:用户可以使用mesg n来禁止别人给自己发送信息,其实就是禁止别人往自己的终端上面的写的权限。当别人试图再使用write给自己发送信息时,发送者将会看见提示如下:


write: user has messages disabled on pts/n



    问:如何限制Shell命令记录大小 ?


    答:默认情况下,bash会在文件$HOME/.bash_history中存放多达500条命令记录。有时根据具体的系统不同,默认记录条数不同。系统中每个用户的主目录下都有一个这样的文件。为了系统的安全,在此强烈建议用户限制该文件的大小。用户可以编辑/etc/profile文件,修改其中的选项如下:


HISTFILESIZE=30 或 HISTSIZE=30


这样就将记录的命令条数减少到30条。


    问:我想将开机时显示的信息保留下来,以检查电脑出了问题的地方,请问怎么办?


    答:可输入下面的命令:


#dmesg >bootmessage


该命令将把开机时显示的信息重定向输出到一个文件bootmessage中。


    问:我想在注销时删除命令记录,请问怎么做?


    答:编辑/etc/skel/.bash_logout文件,增加如下行:


rm -f $HOME/.bash_history



这样,系统中的所有用户在注销时都会删除其命令记录。


如果只需要针对某个特定用户,如root用户进行设置,则可只在该用户的主目录下修改/$HOME/.bash_history文件,增加相同的一行即可。

Posted in 未分类 | Leave a comment

蛋糕


7e1541ca13dfd64bf31fe76d

2007091409023242719

284aacfa925ad411a9d31104

e9f784251e90806e34a80fdd

0200_sml

Posted in 未分类 | Leave a comment

绝对好用 Linux操作系统的8个经典技巧

1、处理特殊的文件名

  假设Linux系统中有一个文件名叫“-ee”,如果我们想对它进行操作,例如要删除它,按照一般的删除方法在命令行中输入rm -ee命令,界面会提示我们是“无效选项”(invalid option),原来由于文件名的第一个字符为“-”,Linux把文件名当作选项了,我们可以使用“--”符号来解决这个问题,输入“rm -- -ee”命令便可顺利删除名为“-ee”的文件。如果是其他特殊字符的话可以在特殊字符前加一个“”符号,或者用双引号把整个文件名括起来。


  2、直接进行Linux的安装工作


  在安装Linux操作系统时,可以利用该系统光盘中的一个名为“loadlin.exe”的软件,将Linux核心直接调入内存,由Linux核心代替当前操作系统来接管计算机,并进入Linux的安装界面。在安装Linux时,我们只要在运行对话框中输入“loadlin E:imagesvmlinuz root=/dev/ram initrd=E:imagesinitrd.img”这个命令就可以直接安装Linux了;其中“E:imagesvmlinuz”为Linux的核心名。


  3、消除Xwindows下的死机现象


  我们可以用两个常用的方法来消除这种现象:第一,用键盘上的复合键“Ctrl+Alt+Backspace”来关闭当前正在运行的任务;第二,首先按住键盘上的“Ctrl+Alt+F2”复合键,让系统切换到另一个操作台,然后登录到系统,再执行“#ps -ax/grep startx”命令,这将会列出你的Xserver的进程标识,接着在命令行中输入如下命令就能消除Xwindows下的死机现象:#kill -9 PID_Number,最后通过“Alt+F1”复合键返回到原来的平台。


  4、快速关闭Linux系统


  最新版本的Linux/UNIX系统借鉴了大型机的技术,采用了抗掉电的日志式文件系统,可以自动跟踪保存用户数据,自动同步刷新文件系统,用户完全可以随手关闭电源,从而达到快速关闭系统的目的。


  5、巧妙使用“rm”命令


  我们可以使用带“-r”参数的“rm”命令来删除一个非空目录,例如我们在命令行中输入“rm -r bbb”这样的命令,表示系统将把bbb目录中包含的所有文件和子目录全部删除掉。


  6、巧妙使用“Tab”键


  大家知道在Linux字符界面中输入命令时,有时需要输入很多字符,如果经常这样逐个地输入字符,比较麻烦。假设键入的字符足以确定该目录下一个惟一的文件时,我们只需按键盘上的“Tab”键就可以自动补齐该文件名的剩下部分,例如要把目录/ccc下的文件“ddddddd-1.2.3.tar.gz”解包时,当我们在命令行中键入到“tar xvfz /ccc/d”时,如果该文件是该目录下惟一以“d”打头的文件的话就可以直接按下“Tab”键,这时命令会被自动补齐为:tar xvfz /ccc/ddddddd-1.2.3.tar.gz ,从而提高了输入效率。


  7、多用鼠标拷贝与粘贴来提高操作速度


  Linux系统安装后,每次启动到字符界面时都会自动运行一个叫“gpm”的程序,该程序运行后就可以用鼠标来拷贝与粘贴了。具体做法是按住鼠标左键拖动使要拷贝的地方突出显示,这时突出显示的区域已经被拷贝,再按鼠标右键拷贝的内容就会被粘贴在光标所在位置了。如果我们在Xwindow下运行Linux 系统,拷贝与粘贴的操作与在Windows 9x系统下一样。


  8、快速启动Linux系统


  在DOS下,有一种简单快速启动Linux的方法,那就是load Linux。loadlin.exe是DOS下的可执行程序,它可以在纯DOS环境下迅速启动Linux,而且无需重启计算机,通常我们可以在光盘的 “/kernels”目录下找到这个程序。如果不知这个程序被放置于安装盘的何处,可以使用“find -name loadlin*”命令来寻找。找到之后将其复制到DOS分区中,同时还需要复制一份你所使用的Linux内核文件。可以通过Windows直接从光盘复制,也可在Linux环境下使用“mcopy”命令将文件复制到DOS分区;接着再编写一个名为“Linux.bat”的批处理文件,文件内容如下:c: loadlin c:vmlinuz root=/dev/hda1 ro(我们假设loadlin.exe和vmlinuz这两个内核文件都在c盘根目录下,“root”为Linux的根设备,而且Linux处于硬盘第一分区,所以设备名为“/dev/hda1”,“ro”意为readonly)。以后在DOS下要启动Linux时,运行“Linux.bat”就可以了。

Posted in 未分类 | Leave a comment

linux安装后的配置

1、安装基本系统


这里安装使用的是Ubuntu 7.04 的 Alternate CD。使用 Alternate CD 引导启动,然后选择 “安装命令行系统(Install Command Line)” 进行最小化安装,在这一步,要注意,一定不要选择中文语言环境,否则在终端窗口下的各种提示,有很多都是中文的。在没有装载完成X Window之前,你只能看到一堆杂乱的小方块。另外安装过程中可以做一下网络设置。


系统分区

Linux 下最少得有 2 个分区,一个是 /swap 交换分区,一个是 / 根分区。

一般桌面用户推荐选用 ReiserFS 文件系统,分区方案如下 (80G):


/swap 512M

/ 8G

/home 70G


swap 分区不建议超过 1G,不低于 128M。


2、网络配置


在基本系统安装完成后,会要求重新启动一次系统,使用在安装过程中设置的帐号及密码登录。

使用ADSL上网的,这里先设置ADSL:

sudo pppoeconf

pon dsl-provider #上线

poff #下线


非拨号用户使用以下命令设置网络

sudo vim /etc/network/interfaces


网卡通过DHCP自动获取IP地址

# The primary network interface (配置主网络接口)

#开机自动激活eth0接口

auto eth0

#配置eth0接口为DHCP自动获取

iface eth0 inet dhcp

获取IP地址

sudo dhclient eth0


网卡静态分配IP地址

#开机自动激活eth0接口

auto eth0

#配置eth0接口为静态设置IP地址

iface eth0 inet static

address 192.168.1.2

netmask 255.255.255.0

network 192.168.1.0

broadcast 192.168.1.255

gateway 192.168.1.1

激活以上设置

sudo /etc/init.d/networking restart


DNS 设置

sudo /etc/resolv.conf

加入

nameserver 202.102.152.3


3、修改、更新源


sudo vim /etc/apt/sources.list

系统安装之后默认的是亚洲官方的源,建议网通修改为台湾大学的源,电信修改为 CN99 的源,具体可以参考这里。然后更新源(我的sources.list):

sudo apt-get update

sudo apt-get dist-upgrade

更新的时候要注意更新的完整性


4、安装基本图形系统及窗口管理器


sudo apt-get install x-window-system-core gdm build-essential

x-window-system-core是x-window的核心组件;gdm是Gnome的登录界面,同类的有KDE的登录界面kdm和另一个轻量级的xdm;build-essential是编译程序源码所必须的组件。


窗口管理器使用 fluxbox ,由自己来编译,编译fluxbox时需要以下组件

sudo apt-get install xorg-dev xserver-xorg-dev checkinstall xlibs-dev

到 Fluxbox 主页下载最新的源码包,解压,在终端中cd进解压目录,然后进行编译(我下的是v1.0rc3):

tar zxvf fluxbox-1.0rc3.tar.gz

cd fluxbox-1.0rc3

./configure

make

sudo make install


安装完之后,设置GDM,即可以在GDM界面选择从Fluxbox还是Gnome等别的环境启动。


对于没有安装任何桌面环境的用户可以在自己主目录下创建.xsession 文件,或者创建.xinitrc 文件,填入下列内容:

exec startfluxbox

对于需要在多个环境下切换的用户可以在 /usr/share/xsessions/ 下创建 fluxbox.desktop 文件,fluxbox 的具体设置见这里,这里附上我的 apps , keys , menu 文件以及我的 fluxbox 主题。


5、安装显卡驱动


去 nvidia 官方下载驱动

Nvidia显卡驱动安装的时候要对内核作改动,这里需要一个组件:

sudo apt-get linux-headers-`uname -r`

注意上面的单引号是Esc键下那个,不是Enter键左边那个。

以后在图形界面下如果要修改屏幕刷新率或者分辨率可以在终端或运行对话框中输入

nvidia-settings

安装可以参考这里。


相关命令

gdm 的启动与关闭

sudo /etc/init.d/gdm stop

sudo /etc/init.d/gdm restart


6、安装简体中文语言包与输入法


sudo apt-get install language-pack-zh language-pack-gnome-zh

系统的简体中文语言包。


sudo apt-get install fcitx

输入法,另外还有一个是 SCIM。

这里还需要一个输入法管理器

sudo apt-get install im-switch

安装完之后要激活输入法

sudo im-switch -s fcitx

系统字体刷新

sudo fc-cache -f -v


7、调整更改时区,时间


如果同时又装了 windows 的话,由于 windows 并不启用UTC (GMT),会导致时间不对,这时候要执行:

tzselect

按照提示进行选择时区,然后:

sudo cp /usr/share/zoneinfo/Asia/ShangHai /etc/localtime

执行

sudo ntpdate cn.pool.ntp.org

cn.pool.ntp.org是位于中国的公共NTP服务器,用来同步你的时间。


8、安装相关工具及软件


sudo apt-get install gksudo

安装好之后在 fluxbox 的菜单menu中加入 {gksudo 命令},就会直接在X下提示 su 的密码。


sudo apt-get install synaptic

Gnome的新立得软件包管理器,就是图形界面的源管理器。


sudo apt-get install feh fbpager

feh: 一个图片查看工具,Fluxbox中使用fbsetbg设定壁纸之后fbsetbg会自动寻找一个可以设置壁纸的程序,feh就是其中的一个。

fbpager: Fluxbox的虚拟桌面扩展工具。

设置壁纸:

fbsetbg -f /home/lost/.wp.jpg


sudo apt-get install gnome-session gtk2-engines*

gnome-session: 比gnome-core更简洁,目的是为了在fluxbox启动的时候加载gnome-settings-daemon,从而使GTk界面的程序的外观不那么丑。

gtk2-engines*: gtk的外观主题引擎,加载了gnome-settings-daemon才会使之生效。

以上两项装完之后应该就已经装上了Gnome的设置中心:gnome-control-center,它包括了指向所有Gnome环境变量修改工具的链接。


sudo apt-get install gnome-alsamixer

gtk的图形界面音量调整工具。安装之后默认情况下音量是静音的,打开音量调整工具,将静音的复选框中的箭头去掉即可。


sudo apt-get install rox-filer file-roller

rox-filer: 文件管理器。

file-roller: 各种压缩包的图形前端。


sudo apt-get install sun-java6-jdk

java开发环境,附带有java运行环境。


sudo apt-get install conky

在桌面显示当前系统状态,如果安装后出现出现闪烁,解决办法如下:


安装wmctrl:

sudo apt-get install wmctrl

修改xorg.conf文件:

sudo vim /etc/X11/xorg.conf

在Module段加入一行:

Load "dbe"

保存后退出。


设置conky的配置文件(我的.conkyrc配置文件):

vim ~/.conkyrc

设置以下几项:

own_window yes

own_window_type override

double_buffer yes

保存后退出。

重新启动系统就好了。


9、安装高级应用程序


sudo apt-get install vim-full vim-python scite openoffice.org openoffice.org-gtk openoffice.org-l10n-zh-cn evince xpdf xpdf-chinese-simplified xpdf-chinese-traditional gimp wine

vim-full vim-python 是Vim的完整组件。

scite 是轻量级的编辑器,简体中文语言文件 locale.properties 放到 scite 安装目录下,一般为 /usr/share/scite,再附上我的用户配置文件 SciTEUser.properties 。

openoffice.org 大名鼎鼎的 openoffice,openoffice.org-gtk 可以使Ooo和Gnome主题保持一致,openoffice.org-l10n-zh-cn 是 openoffice 的简体中文语言包。

evince是PDF文档查看工具,xpdf xpdf-chinese-simplified xpdf-chinese-traditional三个组件用于解决部分中文PDF文档出现乱码的问题。

gimp 类似于Photoshop的东西,现在PS没有Linux版本。

wine 安装Windows程序必备。


sudo apt-get install amule filezilla firefox mozilla-firefox-locale-zh-cn thunderbird tsclient mplayer mozilla-mplayer vlc vlc-plugin-esd mozilla-plugin-vlc

amule 是Linux下的电骡。

filezilla 是FTP工具。

mozilla-firefox-locale-zh-cn 是 firefox 的简体中文包。

thunderbird 是和 Firefox 同出一源的电子邮件工具,不过我用它来阅读新闻组和RSS新闻,它是Linux下对中文新闻组支持最好的工具。

tsclient 是linux下的远程桌面工具。

mplayer Linux最强大的多媒体播放器,由于知识产权的原因,7.04的源中没有再提供其解码器w32codecs的下载,可以到其官网上下载 all-20061022.tar.bz2 和 windows-all-20061022.zip 两个包,解压后前者mv到 /usr/lib/codecs,后者mv到/usr/lib/win32目录中即可,这两个目录如果没有就建立它。

mozilla-mplayer firefox的mplayer插件,使FF支持播放网页中的内嵌媒体。

VLC 多媒体播放器,不过不支持 real 格式。


另外有一些软件,源上没有或者源上的版本较老或不好用的:

Opera:最好的网络浏览器,可到其官方网站下载。

Pidgin:原来叫Gaim,可到 getdeb 下载deb包,包括 pidgin 和 pidgin-data 。安装:

sudo dpkg -i package

Skype:不用说了吧。

MultiGet 图形界面的下载工具,现在更新换代了,开发代号为 monma ,这里下载。

Tux Commander 类似 Total Commander 的工具。


10. 结束

至此,自己定制的操作系统已经完成了,当然还可根据自己的需要继续安装其它软件。

Posted in 未分类 | Leave a comment

GRUB使用说明

一、GRUB的概述

  在Red Hat linux装载一个系统前,它必须由一个引导装载程序(boot loader,启动管理程序)中的特定指令告诉它去引导系统。这个程序一般是位于系统的主硬盘驱动器或是其他知道如何去开始linux内核的媒介驱动器上。

  如果说一个x86系统只安装了Red Hat Linux而且只有一个版本的linux内核,那么通过引导装载程序开始Red Hat Linux的特定过程就不重要了。Red Hat Linux安装程序允许用户快速方便地配置引导装载程序存放在主硬盘驱动的主引导记录中来引导操作系统。

  然而,为了能从多个linux内核或其他操作系统引导,那么就很有必要了解Red hat linux用于提供必要的引导选项的方法,以及理解引导的过程与如何去改变。

  本文是讨论GRUB,它是Red Hat Linux用来在x86系统上装载操作系统的默认方法。同时,本文也将详细介绍用于控制引导过程的各种命令和配置选项。

  GRUB的定义

  GNU GRUB(GRand Unified Bootloader)是一个将引导装载程序安装到主引导记录的程序,主引导记录是位于一个硬盘开始的扇区。它允许位于主引导记录区中特定的指令来装载一个GRUB菜单或是GRUB的命令环境。这使得用户能够开始操作系统的选择,在内核引导时传递特定指令给内核,或是在内核引导前确定一些系统参数(如可用的RAM大小)。

  x86的引导过程

  当一个x86机器启动后,系统BIOS开始检测系统参数,如内存的大小、日期和时间、磁盘设备、以及这些磁盘设备用于引导的顺序等。通常情况下,BIOS都是被配置成首先检查软驱或光驱(或两者都检查),然后再尝试从硬盘引导。如果在这些可移动的设备中,没有找到可引导的介质,那么BIOS通常是转向第一块硬盘最初的几个扇区,寻找用于装载操作系统的指令。这些最初的扇区-主引导记录-开始装载一个预选择操作系统的过程,一个操作系统选项贩GRUB菜单,或是一个执行特定选项的GRUB命令行接口。 

  装载GRUB和操作系统的过程,包括以下几个操作步骤:

  1、装载基本的引导装载程序,这通常是第一步。基本引导装载程序必须是位于主引导扇区中一个非常小的空间,少于512字节。因此,基本引导装载程序所做的唯一的事情就是装载第二引导装载程序。这主要是归结于在主引导扇区中没有足够的空间用于其他东西了。

  2、装载第二引导装载程序,这通常称为第二步。这第二引导装载程序实际上是引出更高级的功能 ,以允许用户装载入一个特定的操作系统。在GRUB中,这步是让用户显示一个菜单或是输入命令。

  3、装载在一个特定分区上的操作系统,如linux内核。一旦GRUB从它的命令行或是配置文件中,接到开始操作系统的正确指令,它就寻找必要的引导文件,然后把机器的控制权移交给操作系统。

注意

  在一些文件系统以及文件系统的配置中,可能需要一个1.5步的文件,用来连接基本引导程序与第二引导程序之间的差异。

  举个例子来说,如果第二步中的引导装载程序文件位于一个使用了第一步引导装载程序所不能访问的文件系统的分区中,那么就可能需要指示第一步引导装载程序,从1.5步文件中载入附加的指令来读取第二步引导装载程序的文件。更多相关的信息,请参考GRUB的信息页。

  前面所提到的引导方法被称为直接装载。因为这种方法中使用的是直接装载操作系统的指令,没有用到任何在引导装载程序和操作系统主文件(如内核)之间的中间代码。然而,不同操作系统所采用的引导过程可能会与上面提到的有一些细微的不同。例如,微软的DOS和Windows操作系统在安装时,倾趋于完全重写主引导记录,而不是合并当前的主引导记录的配置。这将破坏掉其他操作系统保存在主引导记录中的所有信息,如Red Hat Linux。微软操作系统,还有一些其他的专有操作系统,都是使用一种称为链式装载的引导方法来启动的。在这种方法中,主引导记录仅仅是简单地指向操作系统所在分区的第一个扇区。

  GRUB支持直接和链式装载的引导方法。GRUB能用于几乎所有操作系统,绝大多数流行的文件系统,以及几乎所有的系统BIOS所能识别的硬盘。

  GRUB的特性

  GRUB包含许多特性,这使得GRUB比其他可用的引导装载程序更加优越。下面列出一些比较重要的特性:
  ·GRUB在x86机器上,提供一个真正基于命令行的,先于操作系统(pre-OS)的环境。它对于用确定的选项装载操作系统或收集系统信息方面,提供了最大程度的适应性。许多非x86的体系结构已经使用先于操作系统环璄许多年了,它提供控制系统如何从一个命令行引导。当LILO或其他x86引导装载程序使用了一些命令特性的时候,GRUB已经包含了许多这方面的特性。
  ·GRUB支持逻辑块寻址(LBA)方式。LBA将用于寻找驱动器上文件的地址转换工作置于驱动器的硬件中,它被用在许多IDE和所有的SCSI硬盘中。在使用LBA之前,硬盘驱动器遇到一个1024柱面的限制,即BIOS不能找到在1024柱面后的文件(比如一个引导装载程序或是内核文件)。只要系统BIOS能支持LBA模式(大多数都支持),那么LBA就允许GRUB超越1024柱面的限制,引导操作系统。
  ·GRUB的配置能在每次系统引导时被读取。这就避免了用户每次改变引导选项时都要重写一次主引导记录。大多数的引导装载程序都不能很老道地读取配置文件,并使用它们来设置引导选项。比如说,用户必需改变一个LILO的配置文件,然后运行一个命令将新的配置数据重写回系统的主引导记录。这种方法比GRUB所采用 的方法更加危险,因为一个错误配置的主引导记录将让系统无法引导。在使用GRUB中,如果说配置文件被错误配置并且引导,那它也仅仅简单地转到一个默认的命令行,允许用户手工输入命令来运行操作系统。除开更新系统引导的第一步、第二步、或是菜单配置文件的位置,主引导记录是不会被触及到的,而这种情况是很少发生的。

  注意:

  当GRUB的配置文件发生改变时,没有必要重新启动GRUB。所有的改变都能被自动地检测到。如果GRUB被重新启动,那么用户将退回到命令行方式的GRUB外壳下。

  安装GRUB 

  如果在Red Hat Linux的安装过程中,GRUB没有被安装,下面将说明如何安装它,并将它设为默认的引导装载程序。

  注意:如果LILO已经被安装,并且是当前的系统引导装载程序,那并没有必要为了使用GRUB而删除它。GRUB一旦安装后,将做为系统默认的引导装载程序。

  首先,获取最新可用的GRUB包。在Red Hat Linux安装光盘上的GRUB包也可以使用。

  其次,在一个外壳提示下,运行命令/sbin/grub-install ,这里的是GRUB将要被安装的位置。比如说:/sbin/grub-install /dev/hda

  最后,重新引导系统。GRUB图形引导装载菜单将出现。  二、GRUB的术语

  在使用GRUB前,最重要的事情之一就是理解这个程序是如何引用设备的,如系统硬盘驱动器、分区等。对于配置GRUB实现多操作系统的引导,这方面的信息是很重要的。

  设备名称

  系统的第一个硬盘驱动器被GRUB称为(hd0)。在它上面的第一个分区被称为(hd0,0),第二个硬盘驱动器上的第5个分区被称为(hd1,4)。通常使用GRUB时,文件系统习惯上采用下面的方式命名:

  (,)
  在设备命名中,圆括号和逗号是很重要的。指出是一个硬盘(hd)还是一个软盘(fd)被指定。

  是依照系统BIOS而确定的设备号,从0开始。基本IDE硬盘被标为0,第二IDE硬盘被标为1。这个排序大体上等同于linux内核用字母安排设备的顺序,只是在hda中的a变成了0,hdb中的b变为了1,依次类推。

  注意:GRUB用于设备的命名系统是从0开始,而不是1。这常常是GRUB新手们常犯的最普遍的错误。
  指在一块硬盘上一个分区的编号。类似于,分区的编号也是从0开始。虽然大多数的分区可以用数字指定,但是如果系统使用的是BSD分区,那么它们还是用字母来指定,如a或c。

  GRUB在命名设备和分区时,使用下面的规则:

  ·系统使用IDE硬盘或SCSI硬盘,都没有关系。所有的硬盘都是用hd开始。软盘用fd开头。
  ·当指定整个硬盘,不考虑它的分区时,简单地将逗号和分区编号取消即可。当告诉GRUB配置一个特定硬盘的主引导扇区时,这一点很重要。比如,(hd0)指定第一个设备,(hd3)指定第四个设备。
  ·如果一个系统有多个驱动设备,知道由BIOS确定的驱动器顺序就很重要了。如果系统只有IDE或SCSI驱动器,那是相当简单的。但是如果有多个驱动器混合时,这就变得令人混乱了。  

  文件名称

  当在GRUB中输入包括文件的命令时,比如在多操作系统中使用一个菜单列表,文件名必须直接在设备和分区后指定。一个绝对文件名的格式如下:

  (,)/path/to/file

  大多数的时候,用户可以通过在分区上的目录路径后加上文件名来指定文件。这种方法是直接了当的。

  另外,我们也可以将不在文件系统中出现的文件指定给GRUB,比如在一个分区最初几块扇区中的链式引导装载程序。为了指定这些文件,需要提供一个块列表(blocklist),由它来一块一块地告诉GRUB文件在分区中的位置。当一个文件是由几个不同的块组合在一起时,需要有一个特殊的方式来写块列表。每个文件片断的位置由一个块的偏移量以及从偏移点起始的块数来描述,这些片断以一个逗号分界(comma-delimited)的顺序组织在一起。

  考虑下面的块列表:

  0+50,100+25,200+1

  上面这个块列表告诉GRUB使用一个文件,这个文件起始于分区的第一块,使用了第0块到第49块,第99块到124块,以及第199块。

  当使用GRUB装载诸如微软Windows这样采用链式装载方式的操作系统时,知道如何写块列表是相当有用的。如果从第0块开始,那么可以省略块的偏移量。作为一个例子,当链式装载文件在第一硬盘的第一个分区时,可以使用下面的命名:

  (hd0,0)+1

 下面给出一个带类似块列表名称的chainloader命令。它是在设置正确的设备和分区作为根后,在GRUB命令行中给出的。

  chainloader +1
  GRUB的根文件系统

  一些用户常困惑于GRUB中根文件系统(root filesystem)这一术语的用法。GRUB的根文件系统与Linux的根文件系统是没有关系的,这一点需要记住。

  GRUB的根文件系统是用于一个特定设备的根分区。GRUB使用这个信息来挂入(mount)这个设备并从它上面载入文件。

  在Red Hat Linux中,一旦GRUB载入它自己的包含Linux内核的根分区,那么kernel命令就可以将内核文件的位置作为一个选项来执行。一旦Linux内核引导,它就设定自己的根文件系统,此时的根文件系统就是大多数人用来与Linux联系的了。最初的GRUB根文件系统以及它的挂入都被去掉,它们仅存在于用来引导内核文件。

  关于根和内核命令的更多信息,可以参考后面的命令部分。
 三、GRUB的接口

  GRUB主要有三个强大的接口,它们提供了不同级别的功能。每个接口都允许用户引导操作系统,甚至可以在处于GRUB环境下的接口之间移动。

  菜单接口

  如果GRUB是由Red Hat Linux的安装程序自动配置的,那么它默认的显示接口是菜单接口。在系统第一次启动后,一个操作系统或内核的菜单(事先已经用它们各自的引导命令配置好)将一个按名称排列的列表保存在这个接口中。使用箭头键选择一个非默认选项,然后按回车键来引导它。如果不是这样,一个记时器可能已经被设置,那么GRUB将启动装载那个默认的选项。

  在菜单接口上,按[e]键,对高亮菜单项中的命令进行编辑。按[c]键载入一个命令行接口。

  菜单项目编辑器接口

  在引导装载菜单中按[e]键,就进入了菜单项目编辑器。用于项目的GRUB命令就显示在这里。在引导操作系统前,用户可以更改这些命令,添加(加在当前行后面,用[o]键;加在当前行前,用[0]),编辑(用[e]键),删除(用[d]键)。

  在所有的改变都完成后,用[b]键来执行这些命令,并引导操作系统。[Esc]键来放弃这些修改,将重新入标准的菜单接口。[c]键用来载入命令行接口。

  命令行接口

  命令行是GRUB最基本的接口,但它也是被授予了最大控制能力的接口。在命令行接口中,输入任何相关的GRUB命令,再回车就可以执行了。这个接口的功能有点类似于shell的功能,比如[Tab]键完成,前后文提示,输入命令时的[Ctrl]键组合,如[Ctrl]-[a]移到行的开头,[Ctrl]-[e]移到行的结尾。另外,箭头键,[Home],[End],[Delete]键与bash shell中一样用法。

  接口使用的顺序

  当GRUB环境开始载入第二步引导装载程序时,它寻找自己的配置文件。当找到配置文件后,它使用这个配置文件建立一个要载入的操作系统的菜单列表, 然后显示引导菜单接口。

  如果配置文件没有被找到,或者如果配置文件不能读取,那么GRUB将载入命令行接口,以允许用户手工输入必要的命令来启动操作系统。

  如果配置文件不是正确的,那么GRUB将显示出错误,并请求输入。这点是很有帮助的,因为用户将能够看到问题发生在文件中的什么地方,并修复它。按下任意键,重新载入菜单接口,根据GRUB报告的错误,编辑菜单选项并纠正问题。如果这个修正失败了,那么错误将被报告,且GRUB将再次开始。

  四、GRUB的命令

  GRUB包含了许多不同的命令,它们可以在命令行接口中以交互的方式执行。其中的一些命令能接在命令名后面的选项,这些选项用空格隔开。

  下面的列表给出了最有用的一些命令:

  ·boot - 引导先前已经被指定并载入的操作系统或链式装载程序。
  ·chainloader - 将指定的文件作为一个链式装载程序载入。为了获取在一个指定分区第一扇区内的文件,使用+1作为文件名。
  ·displaymem - 显示当前内存的使用情况,这个信息是基于BIOS的。这个命令有助于确定系统在引导前有多少内存。
  ·initrd - 使用户能够指定一个在引导时可用的初始RAM盘。当内核为了完全引导而需要某些模块时,这是必需的。
  ·install p - 安装GRUB到系统的主引导记录。这个命令允许系统重启时出现GRUB接口。

  警告:install命令将覆盖主引导扇区中的其他信息。如果命令被执行,那么除了GRUB信息之外的其他用于引导其他操作系统的信息都将丢失。在执行这条命令前,确定你对它有正确的了解。

  这条命令可以用几种不同的方式进行配置。然而,它都要求指定。表示一个设备,分区和文件,在那里可以找到第一个引导装载程序的映象,比如(hd0,0)/grub/stage1。另外,也指定了第一步引导装载程序应该被安装的硬盘,如(hd0)。
选项告诉第一步引导装载程序第二步引导装载程序位于什么地方,例如(hd0,0)/grub/stage2。p选项告诉install命令菜单配置文件被指定在部分,比如说(hd0,0)/grub/grub.conf。

  ·kernel - 当使用直接载入方式引导操作系统时,kernel命令指定内核从GRUB的根文件系统中载入。options选项是跟在kernel命令后面,在内核载入时传给内核。

  在Red Hat Linux中,一个kernel命令的例子看起来象下面的形式:

  kernel /vmlinuz root=/dev/hda5

  上面这行表明了vmlinuz文件是从GRUB的根文件系统载入的,如(hd0,0)。同时,一个选项也被传给了内核。它指出当Linux内核载入时,内核的根文件系统应该是位于hda5,第一个IDE硬盘的第五个分区。如果有必要的话,多个选项可以被放在这个选项后面。

  ·root - 将GRUB的根分区设置成特定的设备和分区,比如说(hd0,0)。并挂入这个分区,这样文件可以被读取。
  ·rootnoverify - 做root命令同样的事情,只是不挂入分区。

  除上面所述外,还有更多的命令可用。输入info grub,得到一个所有命令的完全列表。

  五、GRUB的菜单配置文件

  配置文件在GRUB菜单接口中,创建用于引导操作系统的列表。配置文件可以允许用户选择执行事先设置好的一组命令。这些命令既包括前面给出的命令,也包括一些只用于配置文件的命令。

  配置文件的专用命令

  下面这些命令只用于GRUB的菜单配置文件:

  ·color - 设定在菜单中使用的颜色,一种是作为前景色,一种作为背景色。可以简单地使用颜色名称,如red/black。比如:
  color red/black green/blue
  ·default
  ·fallback
  ·hiddenmenu - 这个命令被使用时,它不显示GRUB菜单接口,在超时时间过期后载入默认项。用户通过按[Esc]键,可以看到标准的GRUB菜单。
  ·password - 这个命令被使用时,它可以防止不知道口令的用户编辑菜单的项目。

  作为附加选项,可以在后面指定一个后备的菜单配置文件。因此,如果口令被知道,GRUB将重新启动第二步的引导装载程序,并使用这个后备的配置文件来建立菜单。如果这个后备文件不在命令中指出,那么知道口令的用户能够编辑当前的配置文件。

  ·timeout - 这个命令设定了在GRUB载入由default命令指定的项目前的时间间隔,以秒为单位。
 
  ·splashimage - 它指定在GRUB引导时所使用的屏幕图像的位置。
  ·title - 设定用来装载一个操作系统的一组特定命令的标题。

  字符#用来在菜单配置文件放置注释。
配置文件的结构

  设置GRUB菜单接口全局参数的命令被放在文件的顶部,接下来的是用于各个操作系统引导的不同项目。

  一个非常基本的用于引导Red Hat Linux或Microsoft Windows 2000的GRUB菜单配置文件可能如下所示:

  default=linux
  timeout=10
  color=green/black light-gray/blue
  # section to load linux
  title linux
  root (hd0,1)
  kernel /vmlinuz root=/dev/hda5
  boot
  # section to load Windows 2000
  title windows
  rootnoverify (hd0,0)
  chainloader +1

  这个文件告诉GRUB建立一个以Red Hat Linux为默认操作系统的菜单,设定10秒后自动引导。这里给出了2个部分,每个部分对应于一个操作系统项目,每个部分都包含了指向操作系统硬盘分区表的命令。

  在下面的附加资料中,将列出如何使用GRUB引导多种操作系统的参考资料。

  六、GRUB的附加资料

  这个部分只是对GRUB以及它的许多选项作一个介绍。如果想要更多的了解GRUB是如何工作的、如何在其他任务中配置它来引导非Linux操作系统,可以参考下面列出的一些资料。

  安装文档

  ·/usr/share/doc/grub-0.90 - /usr/share/doc/grub-0.90是GRUB文档在系统上的目录。
  ·在一个shell提示下,输入man grub命令可以查看GRUB的手册,它包括一个装载GRUB shell时所使用的选项的列表。
  ·在一个shell提示下,使用info grub命令可以得到GRUB的info页,它包括一个指南,一个用户参考手册,一个程序员参考手册,以及一个关于GRUB和它自己用法的FAQ文档。

  有用的一些站点

  ·http://www.gnu.org/software/grub - GNU GRUB 项目的主页。这个站点包含了GRUB发展状态的信息以及一个FAQ。
  ·http://www.uruk.org/orig-grub - 在这个项目被脱管到自由软件基金会进一步发展前的最初的GRUB文档。
  ·http://www.redhat.com/mirrors/LDP/HOWTO/mini/Multiboot-with-GRUB.html - 研究GRUB各种不同的用法,包括引导非Linux操作系统。
  ·http://www.linuxgazette.com/issue64/kohli.html - 一篇介绍性的文章,讨论在一个系统上GRUB配置,包括GRUB命令行选项的概述

Posted in 未分类 | Leave a comment

grub

重装Windows 时把GRUB覆盖掉,需要恢复GRUB(也称重装GRUB)。

    在Fedora/RHEL/CentOS 4.x下,有个简单的办法。用安装盘引导,启动画面出现后输入


    # linux rescue


    进入救援模式,其中会问是否挂载XXX ,选挂载。接着改变根目录“/ ”,并安装GRUB,完成后重启即可。


    # chroot /mnt/sysimage # grub-install /dev/hda


    (如果你的是SATA,上面的命令参数是/dev/sda)


    有时上面的方法可能不奏效。另外,新版的Fedora也用Live CD 了,上面的方法好像不能用。


    下面介绍的方法就更通用,对不同的发行版都一样,也还没遇到不可行的情况。(tipfoo@gmail_com


    用Live CD (Ubuntu的就是Desktop CD或者DVD )启动,打开终端(Applications→Accessory →Terminal),执行以下代码(是root用户就不用加sudo了):


    $ sudo grub grub> find /boot/grub/stage1 grub> root (hdX ,Y )


    grub> setup (hdX )


    grub> quit


    注意1 :这里的grub> 是grub环境的提示符,不用输入。


    注意2 :其中的X 、Y 是执行find /boot/grub/stage1命令后系统提示的。比如下面这种情况,X 就是0 ,Y 就是7.:


    grub> find /boot/grub/stage1(hd0 ,7 )


    注意3 :如果find命令,没返回可用的结果,那就是/boot 单独在一个分区中,用下面的命令可得到:


    grub> find /grub/stage1


    sudo grub ◆以root用户身份启动grub find /boot/grub/stage1 ◆寻找/boot 所在分区root(hdX ,Y )◆设置硬盘hdX 的根文件系统(“/ ”),实际就是设置/boot 所在的分区setup(hdX )◆安装GRUB到硬盘hdX. quit ◆退出GRUB

Posted in 未分类 | Leave a comment

font2 [转]

来自:linux宝库
联系:linuxmine#gmail.com
分类:[美化汉化]

以下步骤都是建立在XFree86-4.3.0.1 GTK+-1.2.10 GTK+-2.2.4 Pango-1.2.5 FreeType-2.1.5 Fontconfig-2.2.1 ,Locale=zh_CN.GB2312上.

一.添加TrueType字体.用到了Windows下simsun.ttf tahoma.ttf tahomabd.ttf
安装完XFree86后,会自动生成了一个TrueType字体目录:
/usr/X11R6/lib/X11/fonts/TTF.这个目录已经包含了一些TrueType字体并且已经配置完毕.
您可以复制其他TrueType字体到这个目录中.也可以在/usr/X11R6/lib/X11/fonts/
目录下建立一个新目录然后把您的TrueType字体放到进去.

创建文件 fonts.scale 和 fonts.dir :

现在进入你放置TrueType字体的目录,然后运行:
mkfontscale &&
mkfontdir
注意:由于SimSun是可缩放字体,你应该要先运行mkfontscale。(XFree4.3才支持的).详情见: http://www.xfree86.org/4.3.0/fonts2.html

另外:你可能需要手动修改这两个文件。参考:

http://fractal.csie.org/~eric/wiki/Fontconfig#fonts.conf

http://freedesktop.org/software/fontconfig

修改XF86Config以加载支持TrueType的模块

"Module"部份应该是这样:

Section "Module"
...
Load "freetype"
...
EndSection

修改XF86Config中的FontPath部分加入TrueType目录

"Files"部份应该像这样:

Section "Files"
...
FontPath "YOUR FONTS DIR"
...
EndSection

更新字体缓存文件

最后,更新在 /etc/fonts/fonts.conf
文件中指明的所有字体的缓存文件,命令如下:

fc-cache

现在XFree86在重起后可以使用TrueType字体了. 您可以使用 xlsfonts 或
xfontsel 程序来查看一下是否已经有了新字体.

注: 在增加或减少了 TrueType字体后,你必须再次运行 mkfontscale 和
mkfontdir.不管增加和减少的是不是 TrueType字体,你必须再次运行 fc-cache.

二.GTK1中程序字体的设置(包括XMMS,Mplayer等).
中文字体主要修改文件/etc/gtk/gtkrc.zh_CN,以下是我的,你也可以在前面两个 * 处指定字体,如-adobe-helvetica,-misc-simsun等.用 * 可以让程序自己选择字体。‘14’则表示字体大小。后面为对应的Locale设置。

style "gtk-default-zh-cn" {
fontset = "-*-*-medium-r-normal--14-*-*-*-*-*-iso8859-1,\
-*-*-medium-r-normal--14-*-*-*-*-*-gb2312.1980-0,*-r-*"
}
class "GtkWidget" style "gtk-default-zh-cn"

style "gtk-default-zh-cn" {
fontset = "-microsoft-Tahoma-medium-r-normal--14-*-*-*-*-*-iso8859-1,\
-misc-SimSun-medium-r-normal--14-*-*-*-*-*-gb2312.1980-0,*-r-*"
}
class "GtkWidget" style "gtk-default-zh-cn"

三.GTK2中程序字体的设置(如,gaim,gqview等)
中文字体主要修改文件/etc/gtk-2.0/gtkrc,以下是我的供参考

style "default"
{
font_name = "Tahoma,SimSun 12"
}

widget_class "*" style "default"

英文字体要在前面,不然英文中文都会用SimSun显示。

最后,在Gnome,Xfce4等WM选择Tahoma字体。
这样中英文显示效果都不错。

参考:
一部分: www.linuxfromscratch.org ; www.xfree86.org
三部分: http://www.ajgenius.us/gnome/gnome2-gtk2-themes.html

Posted in linux | 8 Comments

font

版權聲明
在保留此版權聲明及原作者的情況下, 本文可以被任意轉錄。有關於本文更詳細的條件 請見: http://creativecommons.org/licenses/by-nc-sa/1.0/ -- EricCheng

引言
「為什麼我把 xxx 升了之後字就變難看了?」

「X 的字真是又醜又難設」

「Fontconfig Xft Freetype 到底是什麼關係啊!?!?」

螢幕上的字是用電腦的人整天會看到的,而用螢幕上有限的像素來有效顯示文字,又要提高文字的可讀性一直不容易。除了點陣字外,早在 80 年代就有的 anti-alias 也使得情況變得很複雜,即使已經過了 20 年,由於

各人的視覺喜好不同 - 沒有一種樣式可以使每一個人都滿意
不同的操作環境與平台以及顯示用的裝置 (CRT || LCD)
多國語言文字的同時顯示
所以能夠隨著自己的喜好而設定的字型是挺重要的。在各家 X desktop, toolkit 與瀏覽器的戰國時代,前後出現了許多解決方案,而 Fontconfig 是到目前為止,算是廣為被支援的一種新的不錯的方式,姑且一試,也許它還不能完全令你滿意,不過比起從前是來得有彈性多了。

Fontconfig
晚近的 XFree86 除了有了 freetype 的內建,加強了對於 TrueType 等向量字型的支援外,最近 Keith Packard 的 Xft 與 Fontconfig 也是一個對於字型整合所做的嘗試,在最新的 XFree86 4.3.x 與 freetype/Xft2/Fontconfig 的支援下,X 下的程式對於一個統一的字型選擇與繪製介面又進了一步。

雖然 XFree86 本身包含 Fontconfig, Fontconfig 事實上是一個可以獨立出來的 介面,它是一個 library 不是一套 user app, 它所做的就是提供一套 font matching 的機制,讓使用 Fontconfig 的程式可以不必自己實作一套字型的選取 方法。如此只要使用 Fontconfig 的程式愈多,單一的一套設定檔就可以被用在愈 多的應用程式,應用程式本身可以利用 Fontconfig 所得到的字型名稱去畫字,也 可以架構在自己原先的字型選擇架構之上 (如 Qt), 以達成對舊的設定的一定的向 後相容性。

Fontconfig 有許多好處,例如:

字型的安裝。與其把要用的字型拿來放在一個目錄, 然後用 ttfmkdir / defoma / ttfm 等東西生出 fonts.dir 再指給 xtt/freetype, 再重新啟動 X font server 或 xset fp rehash, 現在只要把字型丟或 symlink 到 ~/.fonts 或任何其他經過指定的目錄, 就可以 _立即_ 開始使用了。當然在使用沒有支援 Fontconfig 的程式時, 仍然要用傳統的方法。Fontconfig 除了可以吃 TrueType, 也可以吃 Type1 或 pcf 等等傳統的點陣字。
字型 matching 的設定。雖然 Fontconfig 已經附上了一套不錯的設定檔讓在未被設定的情況下也都能夠有一個可以使用的系統,但其實對於個別字型的設定更有彈性。這個是透過 Fontconfig 所使用的 xml 設定檔達成的。稍後再說。
Fontconfig 會儘可能找出一套字,可以滿足顯示不同語言的需求。
Xft
Xft 也是一套 library, 它使用 Fontconfig match 到了所要的字型之後, 來決定 該如何畫這些字。Xft 會看情況而決定要不要使用 core protocol 或 XRender 來 畫字。XRender 是 XFree86 4.x 新增的 extension, 我認為這是為了保留 X 的向 後相容性所新增的一個 hack, 不過因為它可以用來畫 anti-aliased 的字,目前 的使用愈來愈廣泛。不過 anti-aliased text 只有在使用向量字型的時候有用, 繪製點陣字的時候就要使用 core lib. Core library(以 x-truetype 或 freetype 作為 backend)自然也是可以畫向量字,只不過畫出來的就不能有 anti-aliased 的效果了。

有時當 XRender 不能使用時(如你是透過網路用一個舊的 X server 來執行 X apps), Xft 也可以使用 core lib 來畫字。應用程式不必為這些問題操心,達到 資訊隱藏、各謀其政的目的。

Freetype
Freetype (http://www.freetype.org) 是一個很棒的畫字函式庫,XFree86 4.3 內含了 2.1.2. Freetype 提供 Xft 如何畫字的資訊,包括處理 anti-aliasing 或 hinting. 因此 freetype 的改變會影響到 Xft 畫出來的字,而 Fontconfig 的改變會影響到 Xft 如何去選字來畫。

fonts.conf
這裡所講的就是最新的 Fontconfig 與 Xft2 的設定。對於舊的 Xft1.0 的 ~/.xftconfig 就不提了。

如果你裝了 fontconfig, 那麼它應該已經附上了一套預設的設定檔。可以到 /etc/fonts/ (一些 Linux distributions) 或 /usr/X11R6/etc/fonts (一些 BSD flavors) 底下找找看 fonts.conf 這個檔案。

fonts.conf 是簡單的 xml 格式,在 etc/ 裡面的 fonts.conf 是 system-wide 的設定,一般不建議直接更改它,可以更改 local.conf 或是自己家目錄下面的 ~/.fonts.conf . 關於 fonts.conf 的各種語法,由於 manpage 裡頭已經寫得很 詳盡,所以這裡只是提及比較重要的一些部份,有興趣者可以 man fonts-conf. 所有的設定都放在 與 之間,而其中可以包含許多 tags, 詳細的 tags 可以參照 fonts.dtd 或者是 manpage.

裡面是一個路徑,fontconfig 會自己遞迴地去找這個路徑裡頭的所有字型,如: /foo/bar/myfonts

可以把其他的設定檔引進來,它們的格式是一樣的。

其中最重要的 element 應該是 了。match 主要有兩種用法, 一種是 pattern match, 另一種是 font match. 前者會把所有的字型 match 出來,所以 針對它的更改會套用到所有的字型的選擇方式上。為什麼要更改字型的屬性? 因為 這樣可以針對個別的字型告訴 Fontconfig 該如何去處理這些字型,或是告訴 renderer 該如何去畫這些字型。這裡是一些常用到屬性的列表,關於所有的屬性 請洽 manpage:

family - String - 就是一般所看到的字型的名稱了, 如 Arial
style - String - 字型的 style, 像是 Regular, Bold, Italic...
spacing - Int - 字型的寬度, Proportional 是有不同的寬度, monospace 是單一的寬度 (如 terminal 的字型)
antialias - Bool - 決定該字型是否要被 anti-alias 繪製; 只能用在向量字型上
hinting - Bool - 決定該字型是否要打開 hinting
autohint - Bool - 決定是否要用 Freetype 自己的 hint 方法來 hint 字型, 還是用預設的方法來 hint
rgba - Bool - 決定是否要用 subpixel 的方式來畫字, 可以是 none (只用灰階), rgb, bgr, vrgb, vbgr
Hinting 用來最佳化字型顯示的方法。由於螢幕的像素有限,向量字型的縮放需要 有更多的考量, 例如當一條線位在兩個像素格子中間時, 該取左邊的格子還是右邊 的格子? 如果這方面的控制沒有做好,就常常會出現字型的襯線沒有對齊,或是小 字歪七扭八的情況。 Hinting 是額外的資訊, 它告訴 renderer 該如何處理這些 細節的部份,使得向量字在小字的時候能夠好看。也因此 Hinting 是非常費時費 人力的工作,TrueType 字型很多,但是有良好 Hinting 的字型不多。拙劣的 Hinting 就會讓字變得很難看。

為了稍微改善這個問題,freetype 有 autohint 的功能,可以自動為沒有 hint 的字型做 hinting 的工作。另外由於 TrueType 的 hinting 是有專利的,不能完 全自由地使用, autohint 就不受這個限制。autohint 自然無法做得像人力的 hint 一樣好,不過至少比沒有 hint 要好些。話雖如此,對於許多筆劃複雜的文 字 (如中文) 目前 freetype 的 autohint 還做得不甚完美,而因為建立完整的 hinting 的難度,即使是英文字,原本就很高,內建有 hinting 的中文字型就少 之又少了。所以常常有人抱怨中文字在螢幕上很難看,就是沒有理想 hinting, 或 者是使用了 autohinter 所造成的一些反效果。

Anti-alias 是將字型在幕後先以數倍的大小來繪製,然後再縮成想要的大小,未 滿一格的格子用灰階補點。由於原本 X 所支援的 logic 運算不敷使用,所以才用 XRender 的 extension 來達成目的。除了一般的 Anti-alias 之外,Xft 還支援 了為 LCD 所設計的 subpixel rendering.

什麼是 subpixel rendering? 如果你用放大鏡去看 LCD, 會發現一個正方形的像素是由三個長方形小像素構成的。這排 列通常是紅綠藍,也就代表如果液晶螢幕的水平解析度是 1024 個像素,它其實有 1024x3 = 3072 個點,只不過這些點是 rgbrgbrgb... 依序排列的。以白底黑字為 例,如果需要滿格的像素,rgb 三格就需是全關 (0,0,0), 如果只是右邊三分之二 部份, 就關掉 g 和 b, 留下最左邊的 r 開著。這樣子理論上就會有原來三倍的水 平像素可以使用,大幅增加了液晶螢幕的解析度。但由於只開著紅色或黃色或其他 顏色,會有很明顯的光暈,所以一般會採用 filtering 的方式,把一個次像素的 值往左右兩格分散(因為無論對哪一格次像素來說,它的左右兩格的顏色和本身都 是不同的,所以往左右兩格分散可以均勻影響亮度),成為 1/3, 1/3, 1/3 分佈 ;但這樣的壞處是會顯得太模糊了一點,於是再多一層,把原先三格分成 5 格, 但權重改為 1/9 2/9 3/9 2/9 1/9。3/9 那一格就是原本的次像素,而鄰近的格子 就用這樣的方法分散後和原來該次像素格子的光度值相加,達到像素往中央集中, 卻又不太模糊的效果。Windows XP 有個 ClearType 選項可以打開對液晶螢幕顯示 最佳化,其基本原理就是 subpixel rendering. Xft 也有這樣的功能,不過 Xft 做得更多,除了 subpixel 外,還加上了 anti-aliasing。Fontconfig 的 rgba 選項就是設定液晶螢幕次像素的排列方式,一般都是 rgb, v 開頭的表示三種顏色 是縱向排列。如果好奇的話可以拿放大鏡仔細瞧瞧,或用數位相機近拍下來放大觀 察。

很多問題是出在 hinting, 因為許多時候, distribution 會把 freetype 的 bytecode hinting 打開,代表使用字型內部的 bytecode 來做 hinting 修正,如 果像 freetype 預設沒有打開或是使用 freetype 裡頭的 autohinter, 有時效果 不錯,有時卻不盡人意。另外 hinting 費時費力,大部分的字型設計師在做 hinting 的時候都只有針對點陣字的顯示做 hinting 的工作,這表示如果我們在 顯示小字又用 anti-aliasing 的話,通常是不在字型設計師最佳化的範圍內的; 當 hinting 不當的時候,小字 anti-aliasing 就會顯得非常難看(如歪七扭八或 擠成一團)。關於這方面 freetype 做了很多的努力, autohinter 也就是讓程式 自己做 hinting 的演算法。由於 hinting 實在是個很棘手的問題,Mac OS X 對 於 anti-aliasing 字型就都不使用 hinting. 好在 fontconfig 可以讓我們調整 這些細部的設定,讓我們針對個別的字型做不同的處理。

話題回到 pattern match: 要使用 pattern match, 只需要加入如下的 pattern, 它就會對所有的字型作用:

...

中間放的可以是一連串的 test, 然後是一連串的 edit. test 的用法是:

any 指的是說, 只要字型的該屬性 list 之中有一項有符合要 test 的值, test 就會成立。all 的話要 list 之中所有的都符合,first 要第一個符合, not_first 要除了第一個以外有符合的。通常只會用到 any, 預設也是 any. name 裡面填的就是前面所提的屬性, 如 name="family". compare 是比較的條件, eq 是相等, less 是小於, 以此類推。 所包住的那個值就是要用來比較的值 ,包括: int, double, string, matrix, bool 等等。一旦 test 的條件都成立, 就會進行到 edit 的階段,代表編輯符合條件上述 test 條件的屬性:

注意在 fontconfig 中, 屬性 (property) 可以是一個 list, 亦即一個屬性可有 許多的值。 assign 是說把 match 到的值取代掉, assign_replace 是說把該 list 的所有值取代成指定的值, prepend 則是插在 list 中被 match 到的那個值 的前頭, 以此類推。

fonts.conf 裡面有一個範例:

true

Times

Times New Roman

這個 pattern match 是說, 當 prefer_outline 的值是 true 的時候, 而且字型 的 family 又叫做 Times, 那麼就把它的 family list 前面加入 Times New Roman。這樣做的原因是, Times 本身是點陣字, 如果希望在許多應用程式指定用 Times 顯示時, 不要用點陣字顯示, 而要用 Times New Roman 這個 TrueType 字 型顯示, 這樣可以把 Times New Roman 的優先權提在 Times 的前面。 Font matching 是另一種 match 方法,它的用法和 pattern matching 差不多 ,只是它是針對個別字型的屬性作修改,用法是:

...

舉個例子,如果我想讓所有字型預設能夠打開 anti-aliasing, hinting 並且使用 subpixel rendering, 我就寫:

true
rgb
true

但是我可能覺得 Luxi Mono 這個字型在某些時候, subpixel 不太好看, 我就寫:

Luxi Mono
none

FAQ
Q. 我手上有很多 ttf, 我要怎麼裝它們?

前面說過啦, 把它們全部丟到 ~/.fonts/ 裡頭去吧。做 symbolic link 也可以。丟完之後就跑一下 fc-list 列出所有已安裝的字型看看有沒有在裡面。
Q. 我裝好了字型, 可是我的程式 (rxvt, aterm, gtk1.x) 卻不能使用它們?

因為這些程式是使用 X 的 core fonts, 不是使用 fontconfig 也沒有支援 Xft, 就沒有辦法享受這樣的便利,不過還是可以透過傳統的方式來裝這些字型。新的 gtk2, Gnome2, mlterm, Mozilla (Firebird), Qt3.x 都支援了 fontconfig。
Q. 我想要使用新細明體,可以嗎?

可以, 把 mingliu.ttc 丟到 ~/.fonts 就行了。
Q. 我想要像 Windows 上小字那樣的新細明體,那是怎樣辦到的呢?為什麼在一些大小,新細明體的筆劃會破碎呢?

(新)細明體在 11, 12, 13, 15, 16, 20 點的大小有特別做內嵌的點陣字,換句話說,由於中文字的 hinting 不易,有時點陣字會比較有效。又因為新細明體使用了 bytecode 來組合筆劃, 沒有編進 bytecode interpreter 的 freetype 版本在 render 的時候,就會碎掉。請確定您系統上 freetype2 的 source 之中, include/freetype/config/ftoption.h 裡面的 #defineTT_CONFIG_OPTION_BYTECODE_INTERPRETER 是不是有打開。也不可以使用內建的 autohinter. 由於是上述幾個特定的大小是內建點陣字型,所以沒有被 bytecode interpreter 影響。
確定了 freetype 有編進 bytecode interpreter 之後, 設定讓新細明體在這些大小時顯示內建的點陣字而不要用 anti-aliased, 可以在 ~/.fonts.conf 加入:

PMingLiU
true
true
false

PMingLiU
12
false
true

Q. 我的細明體 (MingLiU) 的英文字和中文字會等寬?

因為 MingLiU 宣稱自己是 monospaced 字型,但實際上它有兩種寬度:中文的全形以及英文的半形。於是 freetype 就被騙了; 同樣的事情也發生在其他華康的一些字型上。Freetype 有個 globaladvance 的 flag:

MingLiU
false

萬一因為不明的原因, 這樣做沒有用, 那麼還可以改 spacing:

MingLiU
0

0 是 proportional 的 spacing, 100 是 mono, 110 是 charcell.
如同上面的解釋, 其實說起來這也不是 fontconfig 或 freetype 的錯, 解決問題最根本的方法還是動手把 MingLiU 的設定改對. 問題在於 MingLiU 字型檔頭的 post table 中的 isFixedPitch 設成了 1(monospace), 把它改成 0 問題就解決了.
修改方式可以參考這裡的文件: http://developer.apple.com/fonts/TTRefMan/RM06/Chap6.html
不想查太多文件的人可以拿任何的十六進位編輯器出來, 尋找 "post" 這樣就可以找到 post table 的 index, 這個 index 的第 9~12 bytes 就是 post table 在檔案中的絕對位址, 找到 post table 之後修改裡面的第 16 byte 填成 0 就完成了.
Q. 我想要把 Gnome2 選單的中英文字型分開設。

Gtk2 可以使用兩組特殊的 alias: Sans 和 Serif. Sans 是無襯線的意思,也就是如 Arial, Verdana 等等邊緣是方的字。Serif 則是有襯線的字,如 Times. 由於 fontconfig 有字型取代的機制, 可以修改 /etc/fonts/fonts.conf 裡面的這一段:
相關:

Screenshot (http://fractal.csie.org/~eric/fontconfig/fontconfig_1.png)

Bitstream Vera Sans
Helvetica
Arial
Verdana
Nimbus Sans L
Luxi Sans
Kochi Gothic
PMingLiU
AR PL KaitiM GB
AR PL KaitiM Big5
Baekmuk Dotum
SimSun
sans-serif

與這一段:

sans-serif

Bitstream Vera Sans
Verdana
Nimbus Sans L
Luxi Sans
Arial
Helvetica
Kochi Gothic
PMingLiU
AR PL KaitiM GB
AR PL KaitiM Big5
Baekmuk Dotum
SimSun

把想要加入替換 list 的字型加進去。排愈前面的字型, 在當他有符合要顯示的語言的文字的時候就會被用上,如我把 PMingLiU 設在文鼎字型前面,PMingLiU 就會在需要顯示中文的時候優先被選到。當然嚴格來說,PMingLiU 並不能算是 Sans-serif 而要算是 serif, 但因為我要跟 Bitstream Vera Sans 搭配,故放在一起。
Q. 我遇到了奇怪的問題,可是不知從何找起,怎麼辦?

XFT_DEBUG 這個環境變數可以顯示不同的偵錯資訊,打開一個 terminal, 把 XFT_DEBUG 設在要執行的程式之前,也許它可以幫助你找到問題。其中可以設的數值有:
XFT_DBG_OPEN 1
XFT_DBG_OPENV 2
XFT_DBG_RENDER 4
XFT_DBG_DRAW 8
XFT_DBG_REF 16
XFT_DBG_GLYPH 32
XFT_DBG_GLYPHV 64
XFT_DBG_CACHE 128
XFT_DBG_CACHEV 256
XFT_DBG_MEMORY 512

要同時開啟某幾個偵錯選項,就把它們的值相加就可以了。如 XFT_DEBUG=3 mozilla 就是以開啟第一和第二選項的模式來開啟 mozilla. 有趣的是,當 GLYPH 和 GLYPHV 同時開啟時, Xft 會在 console 用 ascii art 印出它所畫的字 :)
Q. 我手上的字型都很難看。有什麼比較不錯的字型?

英文字型來說, Bitstream Vera Sans, Bitstream Vera Serif, Bitstream Vera Mono 都是高品質又是 free 的字型。Bitstream Cyberbit 可以免費取得(現在已經不是免費的了),又有頗完整的 Unicode coverage, 包含中日韓等等的字集。另外 Microsoft 和 Monotype 買的 Verdana, Times New Roman 等等也都具有漂亮的 hinting; Kochi Gothic 和 Kochi Mincho 是高品質的 free 日文字型。Arial Unicode MS 的 Unicode coverage 也很大,只是這套字型為了這麼大的 coverage, 相對地在許多地方,如筆劃與外觀,就必須做出一些犧牲。如果要拿來看中文的小字的話,目前最好把 hinting 關掉(中文字型大部分把 hinting 關掉會有比較令人高興的外觀,除了新細明體是一定要打開以外)
目前Firefly利用文鼎字改出新宋體,俗稱Firefly Sung,不會有破碎的問題。

Q. 這份 FAQ 實在太沒有幫助了。我要找的問題都找不到。很多地方都寫錯了。

如果有寫錯的地方,為免再造成誤導,也請不吝指正。這裡是 wiki, 也可以直接點上面的 Edit this page 來加入自己的修改。
Q. 我照著這些方法設卻不能動。一切都太麻煩了!

要讓一切合自己的意要付出一定的代價。或許你可以找到一個會設的人,請他吃一頓飯或什麼的,然後找他來幫你照你的意思設。

Posted in linux | Leave a comment

gnome菜单编辑解决方案

  怎样在rh8 gnome里面编辑菜单呢?
  (我在此将 菜单栏里面的 其他 以及其它里面的子目录以外的菜单栏 通称为一级目录,比如图像,互联网都是一级目录。)
  和gnome菜单显示相关的有三个个目录:/usr/share/applications,
  /usr/share/gnome/apps和
  /etc/X11/applnk/
  对于前者即/usr/share/applications里面都是
  以desktop为后缀的文档;对于后者/usr/share/gnome/apps和/etc/X11/applnk/里面是一些目录,它们可以是
  Network,
  Office,
  Graphics,
  AudioVideo,
  System,
  Development,
  Utility,
  Settings等
  一般在这些目录里面也是以desktop为结尾的文件这些文件对应的菜单项一般是让它们在其它里面显示(我想也应该可以在第一级目录里面显示,呵呵没有试过).对于/usr/share/applications里面的文件,既可在其它里面显示也可在第一级菜单里面显示。
  下面来看一下以.desktop结尾的文件的格式,低下是一个模板:
  
  [Desktop Entry]
  Name=
  Name[zh_CN]=
  Icon=
  Terminal=
  Type=
  Categories=Application;;;
  Encoding=UTF-8
  Comment=
  Comment[zh_CN]=
  OnlyShowIn=
  X-Desktop-File-Install-Version=0.3
  
  
  对上面的每一项我逐一解释:
  Name--你原意给程序取的名字
  Name[zh_CN]--程序对应local为中文是的名字
  Exec要执行的应用程序路径
  Icon你想要显示的图标路径
  Type程序的种类,一般为Application即可。
  下面的Categories是关键,注意上面的几个分号,第一个之前一般为Application即可
  第二个之前可以为Network,
  Office,
  Graphics,
  AudioVideo,
  System,
  Development,
  Utility,
  Settings
  之一。
  它们分别对应如下:
  互联网 Network
  办公 Office
  图像 Graphics
  声音和视频 AudioVideo
  系统工具 System
  编程 Development
  辅助选项 Utility
  首选项 Settings。
  也就是说如果这一项是Network就会在互联网栏里面显示,这一项是Utility,你创建的菜单项就会在辅助选项里面显示,如此类推。
  第二个分号之后的内容可以为X-Red-Hat-Base加X-Red-Hat-Base-Only或者X-Red-Hat-Extra。(注意只要加了X-Red-Hat-Base就不会在其他里面显示了)对于
  X-Red-Hat-Base加X-Red-Hat-Base-Only
  将在一级菜单里面显示,对于X-Red-Hat-Extra将在其它里面显示。
  下面看我的两个个实例:
  
  [Desktop Entry]
  Name=redoffice
  Name[zh_CN]=红色办公Office
  Exec=redoffice
  Icon=/usr/share/pixmaps/redhat-word-processor.png
  Terminal=false
  Type=Application
  Categories=Application;Office;X-Red-Hat-Extra;
  Encoding=UTF-8
  Comment=RedOffice1.2
  Comment[zh_CN]=Office工具
  X-Desktop-File-Install-Version=0.3
  
  将在 其他 的 办公 里面显示我的菜单.
  
  [Desktop Entry]
  Name=redoffice
  Name[zh_CN]=红色办公Office
  Exec=redoffice
  Icon=/usr/share/pixmaps/redhat-word-processor.png
  Terminal=false
  Type=Application
  Categories=Application;Office;X-Red-Hat-Base;X-Red-Hat-Base-Only;
  Encoding=UTF-8
  Comment=RedOffice1.2
  Comment[zh_CN]=Office工具
  X-Desktop-File-Install-Version=0.3
  
  
  将在第一级菜单 [b]办公[/b ]里面显示我的菜单
  如下的几个是编码和说明以及是否在终端运行。OnlyShowIn指的是在kde里面还是gnome里面显示其值为GNOME或KDE
  另外kde里面的菜单和/usr/share/applnk/的文件有关当然对应有[Kde Desktop Entry]我是用的gnome,没有试KDE.
  
  
  因此,对于gnome用户在/usr/share/applications/目录里面新建一个以desktop为后缀的文件,在里面指定相应的参数是最好不过了。.当然也可以在另外的那些目录里面指定.我个人感觉到在/usr/share/applications/下面比较好。
  
  
  l另外在编辑文件的是后用gedit,否则中文无法显示
  
  对于上面的解决方案,有些参数还可以取其他的值,我没有试过,不过对于大家一般的应用也就够了。呵呵,还望赐教!
  
  
  
  如果大家对菜单的编辑有兴趣,希望多了解一些参数,我建议大家看看
  /etc/X11/desktop-menus下面以menus结尾的几个文件,可以从那里了解到
  更多的参数和它们的用法。
  
  
  
  运行gnome-desktop-item-edit --create-new /usr/share/applications/
  就可以创建你想要的应用程序了
  运行gnome-desktop-item-edit /usr/share/applications/xxxx.desktop
  就可以编辑你指定的项目
  不过可惜的是产生的菜单不能在菜单里面显示
  因为没有Categories。希望下一个版本的gnome-panel会有改进

Posted in linux | Leave a comment