FreeBSD的坏损硬盘修复工具──recoverdisk(1)

2008硬盘磨损年,你需要这个工具,是的,即使你有备份,只要那备份不是实时的,你还是会需要这个工具。

recoverdisk(1)是FreeBSD 7.0新引入基本系统(/sbin!)的磁盘复制工具,这个工具对于修复硬盘、光盘、存在坏盘上的文件等各种情形都能非常有效地进行迅速修复:它首先尝试以1MB的块尺寸读取和写入数据,随后是64K和512字节(1扇区),遇到错误时会自动跳过,从而最大限度地从损坏的磁盘上恢复数据(如果是用 dd(1) 来恢复数据,通常在遇到坏区时会丢掉整个block,而recoverdisk则是先跳过,然后回过头来用较小的块尺寸重新读取直到失败,而此时主要的数据都已经恢复了)。

原文链接:https://blog.delphij.net/2008/04/freebsdrecoverd.html

TCP最大连接数限制

TCP最大连接数限制

一直以来,有很多技术人员都有”TCP的最大连接数有65535的限制”的这种误解。今天在这边向大家解释一下。

在FreeBSD中有一个设置kern.ipc.maxsockets可以对系统中最大的描述符做限制。只要这个值可以超过65535,那么最大连接数为65535的限制就不攻自破了。
那么这个值到底是int32还是int16呢?

FreeBSD 7.2 p4 /usr/src/sys/kern/uipc_socket.c中写的很明白

uipc_socket.c:164
int    maxsockets;

uipc_socket.c:243
static void
init_maxsockets(void *ignored)
{
TUNABLE_INT_FETCH(“kern.ipc.maxsockets”, &maxsockets);
maxsockets = imax(maxsockets, imax(maxfiles, nmbclusters));
}

maxsockets很明显是int32,一个32位的整形数字。

原文链接:http://ray.bsdart.org/archives/221.raymond

gcc预定义宏

gcc预定义宏

gcc在编写跨平台的项目时需要用到以下的定义宏:

#if defined (__FreeBSD__) || defined (linux) \
|| defined (__hpux) || defined (sun) || defined (_AIX) \
|| defined (__OS2__) || defined (__EMX__)

要查看gcc定义的所有预定义宏,使用命令:cpp -dM /dev/null

#define __DBL_MIN_EXP__ (-1021)
#define __FLT_MIN__ 1.17549435e-38F
#define __DEC64_DEN__ 0.000000000000001E-383DD
#define __CHAR_BIT__ 8
#define __WCHAR_MAX__ 2147483647
#define __DBL_DENORM_MIN__ 4.9406564584124654e-324
#define __FLT_EVAL_METHOD__ 0
#define __DBL_MIN_10_EXP__ (-307)
#define __FINITE_MATH_ONLY__ 0
#define __DEC64_MAX_EXP__ 384
#define __SHRT_MAX__ 32767
#define __LDBL_MAX__ 1.18973149535723176502e+4932L
#define __UINTMAX_TYPE__ long unsigned int
#define __DEC32_EPSILON__ 1E-6DF
#define __unix 1
#define __SCHAR_MAX__ 127
#define __USER_LABEL_PREFIX__
#define __STDC_HOSTED__ 1
#define __DEC64_MIN_EXP__ (-383)
#define __DBL_DIG__ 15
#define __FLT_EPSILON__ 1.19209290e-7F
#define __LDBL_MIN__ 3.36210314311209350626e-4932L
#define __DEC32_MAX__ 9.999999E96DF
#define __unix__ 1
#define __DECIMAL_DIG__ 21
#define __LDBL_HAS_QUIET_NAN__ 1
#define __GNUC__ 4
#define __MMX__ 1
#define __FLT_HAS_DENORM__ 1
#define __FreeBSD_cc_version 700003
#define __DBL_MAX__ 1.7976931348623157e+308
#define __DBL_HAS_INFINITY__ 1
#define __DEC32_MIN_EXP__ (-95)
#define __LDBL_HAS_DENORM__ 1
#define __DEC32_MIN__ 1E-95DF
#define __DBL_MAX_EXP__ 1024
#define __DEC128_EPSILON__ 1E-33DL
#define __SSE2_MATH__ 1
#define __amd64 1
#define __LONG_LONG_MAX__ 9223372036854775807LL
#define __GXX_ABI_VERSION 1002
#define __FLT_MIN_EXP__ (-125)
#define __x86_64 1
#define __DBL_MIN__ 2.2250738585072014e-308
#define __LP64__ 1
#define __DBL_HAS_QUIET_NAN__ 1
#define __DEC128_MIN__ 1E-6143DL
#define __REGISTER_PREFIX__
#define __DBL_HAS_DENORM__ 1
#define __NO_INLINE__ 1
#define __DEC_EVAL_METHOD__ 2
#define __DEC128_MAX__ 9.999999999999999999999999999999999E6144DL
#define __FLT_MANT_DIG__ 24
#define __VERSION__ “4.2.1 20070719 [FreeBSD]”
#define __DEC64_EPSILON__ 1E-15DD
#define __DEC128_MIN_EXP__ (-6143)
#define unix 1
#define __SIZE_TYPE__ long unsigned int
#define __DEC32_DEN__ 0.000001E-95DF
#define __ELF__ 1
#define __FLT_RADIX__ 2
#define __LDBL_EPSILON__ 1.08420217248550443401e-19L
#define __FreeBSD__ 7
#define __SSE_MATH__ 1
#define __k8 1
#define __LDBL_DIG__ 18
#define __KPRINTF_ATTRIBUTE__ 1
#define __x86_64__ 1
#define __FLT_HAS_QUIET_NAN__ 1
#define __FLT_MAX_10_EXP__ 38
#define __LONG_MAX__ 9223372036854775807L
#define __FLT_HAS_INFINITY__ 1
#define __DEC64_MAX__ 9.999999999999999E384DD
#define __DEC64_MANT_DIG__ 16
#define __DEC32_MAX_EXP__ 96
#define __DEC128_DEN__ 0.000000000000000000000000000000001E-6143DL
#define __LDBL_MANT_DIG__ 64
#define _LONGLONG 1
#define __DEC32_MANT_DIG__ 7
#define __k8__ 1
#define __WCHAR_TYPE__ int
#define __FLT_DIG__ 6
#define __INT_MAX__ 2147483647
#define __FLT_MAX_EXP__ 128
#define __DBL_MANT_DIG__ 53
#define __DEC64_MIN__ 1E-383DD
#define __WINT_TYPE__ unsigned int
#define __SSE__ 1
#define __LDBL_MIN_EXP__ (-16381)
#define __amd64__ 1
#define __LDBL_MAX_EXP__ 16384
#define __LDBL_MAX_10_EXP__ 4932
#define __DBL_EPSILON__ 2.2204460492503131e-16
#define _LP64 1
#define __GNUC_PATCHLEVEL__ 1
#define __LDBL_HAS_INFINITY__ 1
#define __INTMAX_MAX__ 9223372036854775807L
#define __FLT_DENORM_MIN__ 1.40129846e-45F
#define __FLT_MAX__ 3.40282347e+38F
#define __SSE2__ 1
#define __FLT_MIN_10_EXP__ (-37)
#define __INTMAX_TYPE__ long int
#define __DEC128_MAX_EXP__ 6144
#define __GNUC_MINOR__ 2
#define __DBL_MAX_10_EXP__ 308
#define __LDBL_DENORM_MIN__ 3.64519953188247460253e-4951L
#define __STDC__ 1
#define __PTRDIFF_TYPE__ long int
#define __DEC128_MANT_DIG__ 34
#define __LDBL_MIN_10_EXP__ (-4931)
#define __GNUC_GNU_INLINE__ 1

原文链接:http://ray.bsdart.org/archives/172.raymond

Ports的make参数说明

FreeBSD::ports::make参数说明,哈哈,很多地方都用到哦

make fetch # 只抓取软件包
make extract # 只解开软件包
make patch # 解开软件包并补上官方的patch
make install # 安装一个新port
make clean # 清除中间生成的文件
make package # 将安装完的软件做成package
make distclean # 全部删除,包括/usr/ports/distfiles下的源码包
make all-depends-list  # 显示所有相关的依赖
make pretty-print-build-depends-list  # 显示编译期间所需要的依赖
make pretty-print-run-depends-list  # 显示执行时需要的依赖
make deinstall # 删除软件
make deinstall-depends # 连同依赖一起删除
pkg_version -c # 列出所有可升级的ports
make PREFIX=/usr/local/XXX # 指定一个安装路径
make showconfig make rmconfig
make search key=XXXX # 查找ports
make index # 更新index
make fetchindex # 更新index
make readmes # 网页的方式察看

原文链接:http://ray.bsdart.org/archives/166.raymond

基于libfdk库的FreeBSD系统优化

基于libfdk库的FreeBSD系统优化

1> kern.ipc.maxsockets

设定系统最大可以开启的 socket 数目。与libfdk中session管理的最大客户端数目。

然而,这个值必须在系统一开机就设定好,所以如果要修改这项设定,我们必须修改 /boot/loader.conf 才行。例如,我们要将它改成最多同时可以有 16424 个 socket,则必须在 /boot/loader.conf 中加入下列这一行:

kern.ipc.maxsockets=”16424”

2> net.inet.ip.portrange.*

libfdk中的UDP服务器框架有可能使用到工作端口范围4000-8000,所以我们必须手动调整一下 net.inet.ip.portrange.last 这个值,将它调为 10000、20000、甚至 40000 都是合理的。如果要在一开机就调整这个值,我们可以修改 /etc/sysctl.conf,并增加下列这一行:

net.inet.ip.portrange.last=40000

3> kern.ipc.shm_use_phys

kern.ipc.shm_use_phys 这个选项预设为 0 (关闭),我们可以将它设为 1 (打开)。如果我们将它设成 1,这个功能允许内核通过将共享内存页锁定在核心存储中而消除大量的内部内存管理和页面跟踪的开销,使得它们不可被换出,如果我们有大量的程序 (数百个) 需要共同分享一个小的共享内存空间,或者是共享内存空间很大时,我们可以将这个值打开。

这个值可以在开机完成后才设定,因此只要放在 /etc/sysctl.conf 中即可:

kern.ipc.shm_use_phys=1

4> vfs.vmiodirenable

这个选项预设被设为 1,也就是打开的状态。它被用来决定一个目录中的结构 (目录下的其它文件名称等等) 被快取在内存中的行为。一般的目录结构可能都不大,而这些目录结构会被快取在物理内存中。物理内存中所存放的目录结构快取有限,所以不管我们的物理内存有多大,预设都只会快取一定大小的目录结构。如果我们将这个选项打开,系统将 buffer cache 放在虚拟内存的快取中,目录结构也就会被存放在虚拟内存中。这样的好处是所有的内存空间都可以被拿来做目录的快取,而缺点是最小用来存放目录结构的快取会从 512 bytes 变成 4K。

如果您的系统物理内存空间有限,建议您将这个选项关闭。但如果您的系统需要进行大量档案操作,例如 proxy、多人使用的邮件服务器、或是 news server 等,建议将这个选项打开。

5> vfs.write_behind

这个选项预设为 1,也就是打开的状态。在打开时,在系统需要写入数据在硬盘或其它储存设备上时,它会等到收集了一个 cluster 单位的数据后再一次写入,否则会在一个暂存区空间有写入需求时就立即写到硬盘上。这个选项打开时,对于一个大档案写入速度非常有帮助。但如果您遇到有很多行程延滞在等待写入动作时,您可能必须关闭这个功能。

6> vfs.hirunningspace

这个值决定了系统可以将多少数据放在写入储存设备的等候区。通常使用默认值即可,但当我们有多颗硬盘时,我们可以将它调大为 4MB 或 5MB。但必须注意的是,太大的值反而会造成效能低落。

7> net.inet.tcp.sendspace 及 net.inet.tcp.recvspace

这二个选项分别控制了网络 TCP 联机所使用的传送及接收暂存区的大小。预设的传送暂存区为 32K,而接收暂存区为 64K。如果需要加速 TCP 的传输,可以将这二个值调大一点,但缺点是太大的值会造成系统核心占用太多的内存。如果我们的机器会同时服务数百或数千个网络联机,那么这二个选项最好维持默认值,否则会造成系统核心内存不足。但如果我们使用的是 gigabite 的网络,将这二个值调大会有明显效能的提升。传送及接收的暂存区大小可以分开调整,例如,假设我们的系统主要做为网页服务器,我们可以将接收的暂存区调小一点,并将传送的暂存区调大,如此一来,我们就可以避免占去太多的核心内存空间。

还有要注意的是,除了这二个选项可以控制网络传输暂存区大小外,route 这个指令也可以用来依路由路径的不同指定暂存区大小。另外 ipfw 等防火墙软件也可以用来限制每个联机所能使用的网络频宽。

如果我们将传送或接收的暂存区设为大于 65535,除非我们的服务器本身及客户端所使用的操作系统支持 TCP 协议的 windows scaling extension (请参考 RFC 1323 文件)。FreeBSD 预设已支援 rfs1323 (即 sysctl 的 net.inet.tcp.rfc1323 选项)。

8> net.inet.tcp.always_keepalive

当这个选项打开时,系统会定期送出「keepalives」以检查一个 TCP 联机是否中断。在打开的状况下,所有运作的网络程序都会有定时检查联机是否中断的功能,否则只有当应用程序本身支持时才有此功能。这个选项打开的好处是让系统更便于管理网络联机,尤其是当我们系统中常有一些莫名其妙就中断联机的使用者时。例如,当一个使用者利用拨接连到系统时,很可能在完成一个完整的 TCP 联机之前,就因为拨接中断而造成联机异常中断。当然,在某些情况下,也有可能会造成系统误判网络联机已中断而结束这个 TCP 联机。

9> net.inet.tcp.delayed_ack

TCP 协议有一个特性,就是当收到客户端的数据时,会传回一个 ACK (acknowledgement) 的封包,以确认已收到数据。然而,我们也可以将 ACK 封包和所要回传的资料一起送出。例如,当我使用 telnet 进入系统时,在输入指定时,当我们在键盘上敲打一个字符,系统会送回一个表示已接收到该字符的 ACK 封包,并传回一个含有该字符的封包以在终端机上显示。当 net.inet.tcp.delayed_ack 打开时,系统会将 ACK 和显示该字符的封包一传送,而不需分成二个封包。所以这个选项打开时,可以将封包数量减少一半,以加速网络传输。其它的网络服务,例如,WWW、 SMTP、POP3 等也都具有这种特性。
在高速网络和低负载的情况下会略微提高性能,但在网络连接较差的时候,对方计算机得不到应答会持续发起连接请求,反而会降低性能。

10> kern.ipc.somaxconn

这个选项控制了 TCP 联机等候区最多可以等待的联机数量,其默认值为 128,不过这个值对于一台忙碌的服务器而言可能小了点。例如大型的网页服务器、邮件服务器,我们可以将它设为 1024。要注意的是在一些网络服务的程序中,如 Apache 及 sendmail 也有自己的等待数量设定,我们可能也要在那些软件上做一些设定才会让 kern.ipc.somaxconn 发生作用。将这个选项的值调大一点还有一个好处,就是在面对 Denial of service 的攻击时,有较好的防卫能力。

11> kern.maxfiles

这个选项控制了系统中支持最多开启的档案数量,这个值通常是几千个档,但对于一台忙碌的数据库系统或是会开启许多档案的服务器而言,我们可以将它调高为一、二万。

12> kern.maxusers

这是用来控制系统内部表格(internal system tables)大小的参数,它的值大约是您期望系统同一时间会上线使用的使用者数量。我们在核心设定档中有一个 maxusers 的选项,如果您使用的是 FreeBSD 4.5 以上的版本,建议您只要在核心设定档中将它 0 即可,系统会在一开机时自动依您的内存大小调整这个值。如果我们使用的是 FreeBSD

4.5 以后的版本,要调整这个值时,我们可以在 /boot/loader.conf 中加入该选项的设定,例如:

kern.maxusers=256

如果您使用 FreeBSD 4.4 以前的版本,则只能重新编译核心以改变这项设定。

这个值一定要设定大于四,maxusers 的值决定了处理程序所容许的最大值,20+16*maxusers 就是你将得到的所容许处理程序。系统一开机就必须要有 18 个处理程序 (process),即便是简单的执行指令 man 又会产生 9 个 process,所以将这个值设为 64 应该是一个合理的数目。如果你的系统会出现 proc table full 的讯息的话,可以就把它设大一点,例如 128。除非您的系统会需要同时开启很多档案,否则请不要设定超过 256。

13> kern.ipc.nmbclusters

这个值用来调整系统在开机后所要分配给网络 mbufs 的 cluster 数量,由于每个 cluster 大小为 2K,所以当这个值为 1024 时,也是会用到 2MB 的核心内存空间。我们可以简单的估计出大约需要的大小,例如,假设我们的网页同时约有 1000 个联机,而 TCP 传送及接收的暂存区大小都是 16K,则最糟的情况下,我们会需要 (16K+16K) * 1024,也就是 32MB 的空间,然而所需的 mbufs 大概是这个空间的二倍,也就是 64MB,所以所需的 cluster 数量为 64MB/2K,也就是 32768。对于内存有限的机器,建议值是 1024 到 4096 之间,而当拥有海量存储器空间时,我们可以将它设定为 4096 到 32768 之间。我们可以使用 netstat 这个指令并加上参数 -m 来查看目前所使用的 mbufs 数量。

当我们要修改这个值是,必须在一开机就修改,所以只能在 /boot/loader.conf 中加入修改的设定,例如:

kern.ipc.nmbclusters=16384

14> net.inet.ip.fastforwarding

如果打开的话每个目标地址一次转发成功以后它的数据都将被记录进路由表和arp数据表,节约路由的计算时间,但会需要大量的内核内存空间来保存路由表。

原文链接:http://ray.bsdart.org/archives/142.raymond

FreeBSD下KDE桌面系统配置与使用

FreeBSD下KDE桌面系统配置与使用

作为一个自由软件爱好者,出于系统性和稳定性考虑,选择FreeBSD做为我的基本系统,我钟意KDE桌面环境给我带来的方便和使用上的乐趣。在我看来FreeBSD+KDE是一个很好的学习平台,这个组合提供了很多界面友好、功能强大的工具软件可以让我把注意力集中在想要学习的内容上,而不是纠缠在某个具体的操作细节。

FreeBSD+KDE这个组合可以汇集大量的资料让我边学习边操作,我觉得这是学习FreeBSD非常好的一种方法——边学习边使用。而且相当重要的一点是我喜欢KDE给我带来的一致性美感,这和FreeBSD本身是一脉相承的。尤其目前FreeBSD桌面化在KDE与FreeBSD结合上研究探索的进展,诸如PC-BSD,更让人看到一种希望,那就是FreeBSD桌面系统可以和Windows一样的易用,进而可以成为一种选择,我想这对FreeBSD也是一件好事。

接触KDE时间越长,越觉得KDE的强大,使用KDE越多,越觉得自己掌握的东西太少。虽说可以通过个人努力,解决一些问题,但是学习中更多的体会是别人的点滴经验可以让你的学习事半功倍,也正是出于这个出发点,弄了这篇文章,想法只有一个,就是与大伙一起学习、交流,一起努力对“FreeBSD环境下KDE桌面系统配置与使用”的经验与网络资源做一些力所能及的整理与汇总,减少一些重复劳动。真诚期待大伙参与,一起共享学习中的体会和使用上的经验!
主要范围是以下几个:
1、FreeBSD下KDE的安装
2、FreeBSD系统针对KDE的系统优化、配置
3、KDE的中文化配置
4、KDE软件介绍与使用配置 选择[Configure]->[Distributions]->[X.Org],如下图:截图一

接下来会出现一个菜单让你选择所需要安装的X.Org的包,如下图所示,请进入每一个选项里选取ALL.截图二 截图三

接着选择Exit回到选择安装来源.您可以选择CD/DVD为安装本源,放入第一张CD即可开始安装.

安装KDE:
leo# sysinstall
选择[Configure]->[Packages]->[kde],选择kde-3.5.1如下图:

截图四

选择OK,然后Install会有提示要求您放第二张光盘.这里需要等比较长的时间.安装完就退出.运行
xorgcfg –textmode

截图五

配置xorg
本机上所生成的/etc/X11/xorg.conf文件内容如下
leo# cat /etc/X11/xorg.conf
Section “ServerLayout”
Identifier “Layout0″
Screen 0 “Screen0″ 0 0
InputDevice “Keyboard0″ “CoreKeyboard”
InputDevice “Mouse0″ “CorePointer”
EndSection

Section “Files”
EndSection

Section “Module”
Load “freetype”
# Load “xtt”
Load “extmod”
Load “glx”
Load “dri”
Load “dbe”
Load “record”
Load “xtrap”
Load “type1″
Load “speedo”
EndSection

Section “InputDevice”
Identifier “Mouse0″
Driver “mouse”
Option “Protocol” “Auto”
Option “Emulate3Buttons”
Option “Device” “/dev/sysmouse”
EndSection

Section “InputDevice”
Identifier “Keyboard0″
Driver “kbd”
Option “XkbModel” “pc101″
Option “XkbLayout” “us”
EndSection

Section “Monitor”

### Comment all HorizSync and VertSync values to use DDC:
Identifier “Monitor0″
### Comment all HorizSync and VertSync values to use DDC:
HorizSync 31.5 – 57.0
VertRefresh 50.0 – 90.0
EndSection

Section “Device”
Identifier “Card0″
Driver “vmware”
EndSection

Section “Screen”
Identifier “Screen0″
Device “Card0″
Monitor “Monitor0″
DefaultDepth 24
SubSection “Display”
Viewport 0 0
Depth 24
Modes “1024×768″ “800×600″
EndSubSection
EndSection在 /root 目录下 编辑 .xinitrc 文件:.(注:用edit 编辑一个 .xinitrc 文件)
加入下面行
exec /usr/local/bin/startkde
然后执行
startx
即可进入KDE

截图六

接着我们要将KDE 汉化,如果要在X-Window 中看到中文的菜单,必须先装中文字体kcfont(国乔字体)及arphicttf(文鼎字体),以及中文信息档(i18n)
# cd /usr/ports/chinese/kcfonts
# make install clean
# cd /usr/ports/chinese/arphicttf
# make install clean
# cd /usr/ports/chinese/kde3-i18n-zh_CN
# make install clean
# cd /usr/ports/chinese/koffice-i18n-zh_CN
# make install clean
接着编辑/etc/X11/xorg.conf
leo# vi /etc/X11/xorg.conf
在Section “Files”之间加入下面三行,以使X-Window能找到正确的字体路径,如下:
Section “Files”
FontPath “/usr/X11R6/lib/X11/fonts/TrueType”
FontPath “/usr/X11R6/lib/X11/fonts/local”
FontPath “/usr/X11R6/lib/X11/fonts/misc”
EndSection
更改保存后进入KDE。
找到Setting->Desktop Setting Wizard进行设置:

截图七

按Next一直到最后即可。如果您想要有Windows的字体,可以到将Win上面的字体COPY到下面的目录
#cd /usr/X11R6/lib/X11/fonts/TrueType
然后打开“控制中心”->外观和主题->字体,里面设置你所需要的字体和字体大小。我是把windows下面的simsun.ttc和tohoma.ttf拷贝到了FreeBSD上面,然后应用windows的字体,这样感觉比较舒服,毕竟是平时看惯了windows的字体了。看其它字体感觉怪怪的。
-rw-r–r– 1 root wheel 10507340 May 14 19:07 simsun.ttc
-rw-r–r– 1 root wheel 379856 May 14 19:07 tahoma.ttf

截图八

中文输入法安装:
cd /usr/ports/chinese/scim-tables/
make install

cat >> /etc/csh.cshrc << OK
setenv LANG zh_CN.eucCN
setenv LC_CTYPE zh_CN.eucCN
setenv XMODIFIERS @im=SCIM
setenv GTK_IM_MODULE scim
OK
另外在进入X之前需要执行(在~/.xinitrc中加入)
exec scim -d &
此行一定要放在exec /usr/local/bin/startkde之前
leo# cat /root/.xinitrc
exec scim -d &
exec /usr/local/bin/startkde

重新启动KDE就可以输入中文了。    概要:以KDE桌面环境为例,试析Fontconfig的运作机制
一、Fontconfig在桌面系统中的作用

KDE是类Unix系统中建立在X基础上的一个主流桌面环境,对用户来说,它提供了良好的图形界面和语言切换机制,用以满足来自不同国家、使用不同语言的用户的使用需求,这种机制简称“国际化”。主要包括界面文字的翻译,多种语言字体的管理、显示的支持以及输入法等等。这其中系统层面字体的管理和显示的支持直接关系到文字的显示效果,因此显得尤为重要。在KDE系统中,字体管理、显示的支持采用的是如下框架。

Fontconfig(字体配置)——–>Freetype(字库操作)————–>xft(字体渲染)

Fontconfig : 管理系统安装的字体,根据应用程序的字体配置,match(匹配)一种字体,填充match字体的各种属性。

Freetype : 以Fontconfig匹配到的字体为参数,根据应用程序需要读取相应的字库。

xft: 对需要显示的语言文字进行渲染

二、X系统中字体的管理

作为KDE底层支持的X,它使用字体服务器(xfs)对安装的字体进行管理,也称之为“核心字库管理系统”,基本配置原理是xfs使用可维护的字体安装目录和fonts.dir文件对字体进行操作。

X为之提供了一些工具来完成管理操作。诸如 :

mkfontdir,mkfontscale 用来生成安装字体的 fonts.dir和fonts.scale。

xlsfonts 用来显示安装的字体。

xfd 用来显示指定字库的信息。

xset 用来管理字体服务器。

对于FreeBSD,在安装了xorg 7.2并且X server运行的情况下,字体安装目录可用 xset q来查询

shell>xset q
上面显示的是X系统安装时定义的字体目录。在这些目录中,都有利用mkfontdir生成的fonts.dir(对于true type 字体需要使用mkfontscale 生成 fonts.scale,然后拷贝到fonts.dir中)。fonts.dir是个文本文件,里面保存的是所在目录的字体信息。关于这些信息的具体含义,可以参见X的man手册,这里不再赘述。

Font Path:
/usr/local/lib/X11/fonts/misc/,/usr/local/lib/X11/fonts/TTF/,
/usr/local/lib/X11/fonts/OTF,/usr/local/lib/X11/fonts/Type1/,
/usr/local/lib/X11/fonts/100dpi/,/usr/local/lib/X11/fonts/75dpi/,
/home/dbhrscom/.fonts

如果准备把一个字体安装到X系统中,并且使用Xfs进行管理,大致需要以下过程:

1、建立一个目录,并且把字库文件拷贝到这个目录下

2、运行mkfontdir或者mkfontscale,生成安装字库的fonts.dir文件。

3、运行“mkfontdir -e 系统编码目录” 生成encodings.dir 文件(可选)

4、运行 “xset +fp 字体目录” 或者 “xset fp+ 字体目录”,把字体目录添加到xfs的字体目录列表中。需要注意的是当字体目录没有fonts.dir这个文件时,这种添加字体目录操作会失败。

5、运行“xset rehash”进行更新,确保新添加的字体可用。

注意:作为一种X系统的约定,安装字体最方便的做法是把字体文件拷贝到“$HOME/.fonts/“目录下,这样省去了添加字体目录的操作,而且xset +fp 是针对当前会话有效,如果准备系统启动时有效,还要修改相关的配置文件。

三、Fontconfig的字体管理

简单的说Fontconfig是使用字体缓存的机制来进行字体管理的。这个Xfs有所不同。fontconfig提供fc-cache来建立这个缓存。

shell >fc-cache -v
fc-cache的运行原理是扫描fontconfig的配置文件中定义的字体目录,然后利用扫描的结果生成系统字体缓存。在这个fc-cache -v的运行结果中可以看到,它所扫描的路径已经涵盖了xfs所管理的系统字体路径。但这并不表示fontconfig和xfs的继承关系,fontconfig扫描这些目录,完全是因为在配置文件fonts.conf中有这样的定义!

/usr/local/lib/X11/fonts: skipping, 0 fonts, 12 dirs
/usr/local/lib/X11/fonts/100dpi: skipping, 398 fonts, 0 dirs
/usr/local/lib/X11/fonts/75dpi: skipping, 398 fonts, 0 dirs
/usr/local/lib/X11/fonts/Fonts: skipping, 4 fonts, 0 dirs
/usr/local/lib/X11/fonts/OTF: skipping, 23 fonts, 0 dirs
/usr/local/lib/X11/fonts/TTF: skipping, 13 fonts, 0 dirs
/usr/local/lib/X11/fonts/Type1: skipping, 29 fonts, 0 dirs
/usr/local/lib/X11/fonts/bitstream-vera: skipping, 10 fonts, 0 dirs
/usr/local/lib/X11/fonts/cyrillic: skipping, 0 fonts, 0 dirs
/usr/local/lib/X11/fonts/encodings: skipping, 0 fonts, 1 dirs
/usr/local/lib/X11/fonts/encodings/large: skipping, 0 fonts, 0 dirs
/usr/local/lib/X11/fonts/local: skipping, 0 fonts, 0 dirs
/usr/local/lib/X11/fonts/misc: skipping, 55 fonts, 0 dirs
/usr/local/lib/X11/fonts/util: skipping, 0 fonts, 0 dirs
/home/dbhrscom/.fonts: skipping, 0 fonts, 0 dirs
/var/db/fontconfig: not cleaning unwritable cache directory
/home/dbhrscom/.fontconfig: cleaning cache directory
fc-cache: succeeded

<!– Font directory list –>
fc-cache所作的扫描都是基于以上的<dir></dir>定义。

<dir>/usr/local/lib/X11/fonts</dir>

<dir>~/.fonts</dir>

<!– Font cache directory list –>

<cachedir>/var/db/fontconfig</cachedir>
<cachedir>~/.fontconfig</cachedir>

这个配置文件在fontconfig最新版本中,默认放在下面的目录中

/usr/local/etc/fonts/

而生成的字体缓存按照系统和当前用户,分别存放到

/var/db/fontconfig
~/.fontconfig
这两个目录中,诸如下面所看到的
0c3f6abf7a2705d2e8570f7f70e9302d-x86.cache-2
1e99991e6eeb0b3e05d4185c886f4b19-x86.cache-2
2550ddc31d0b62d94bc27b0fea358aba-x86.cache-2
55cbb48b13195d29d336fd465f155e7b-x86.cache-2
75ff5e8ddb5aa19e5f229f72d89c73db-x86.cache-2
.cache-2 就是fc-cache的运行记号,fontconfig通过这个缓存来管理系统安装的字体,也因为这种机制在系统中安装字体变得非常简单,只要把字体文件放到fonts.conf定义的目录中,然后运行一下fc-cache。

甚至fc-cache一下也不需要,因为在fonts.conf中定义了刷新时间:
<!–
Rescan configuration every 30 seconds when FcFontSetList is called
–>
<rescan>
<int>30</int>
</rescan>
由此看出,fontconfig和xfs相比,fontconfig提供了更加灵活的字体管理机制,目前系统中保持xfs和fontconfig并行工作的理由,只能是为必须使用xfs机制的程序提供一种支援。而作为KDE,它使用的就是fontconfig进行字体管理。举例来说,KDE的控制中心有个“字体安装”模块,通过分析可知它进行字体安装的原理就是自定义一个安装路径,放到fontconfig的配置文件中,然后把字体拷贝到自定义的目录。    四、Fontconfig配置文件的结构

在2.4.2以后的版本中,Fonfconfig的配置文件采用了模块化的结构。配置文件由以下文件组成
/usr/local/etc/fonts/fonts.conf
/usr/local/etc/fonts/conf.avail/*.conf
/usr/local/etc/fonts/conf.d/*.conf
/usr/local/etc/fonts/conf.d/ 目录下的文件大多数是 conf.avail/ 目录下的连接,大致是如下这些:
20-fix-globaladvance.conf
20-lohit-gujarati.conf
20-unhint-small-vera.conf
30-amt-aliases.conf
30-urw-aliases.conf
40-generic.conf
49-sansserif.conf
50-user.conf
51-local.conf
60-latin.conf
65-fonts-persian.conf
65-nonlatin.conf
69-unifont.conf
80-delicious.conf
90-synthetic.conf
前面的数字用来控制执行的先后顺序,从名称上就可以看出,每个.conf文件都有针对性的字体特性进行处理。

而实现这种模块化,所借助的就是 /usr/local/etc/fonts/fonts.conf 文件。

<!–
Load local system customization file
–>
<include ignore_missing=”yes”>conf.d</include>
分析/usr/local/etc/fonts/conf.d 目录下的文件,并通过打开Fontconfig的调试功能,可知这些配置文件的执行顺序:
Loading config file /usr/local/etc/fonts/fonts.conf
Scanning config dir /usr/local/etc/fonts/conf.d
Loading config file /usr/local/etc/fonts/conf.d/20-fix-globaladvance.conf
Loading config file /usr/local/etc/fonts/conf.d/20-lohit-gujarati.conf
Loading config file /usr/local/etc/fonts/conf.d/20-unhint-small-vera.conf
Loading config file /usr/local/etc/fonts/conf.d/30-amt-aliases.conf
Loading config file /usr/local/etc/fonts/conf.d/30-urw-aliases.conf
Loading config file /usr/local/etc/fonts/conf.d/40-generic.conf
Loading config file /usr/local/etc/fonts/conf.d/49-sansserif.conf
Loading config file /usr/local/etc/fonts/conf.d/50-user.conf
Loading config file /home/dbhrscom/.fonts.conf
Loading config file /usr/local/etc/fonts/conf.d/51-local.conf
Loading config file /usr/local/etc/fonts/conf.d/60-latin.conf
Loading config file /usr/local/etc/fonts/conf.d/65-fonts-persian.conf
Loading config file /usr/local/etc/fonts/conf.d/65-nonlatin.conf
Loading config file /usr/local/etc/fonts/conf.d/69-unifont.conf
Loading config file /usr/local/etc/fonts/conf.d/80-delicious.conf
Loading config file /usr/local/etc/fonts/conf.d/90-synthetic.conf
五、Fontconfig所提供的调试功能
Fontconfig提供了调制功能,用来诊断字体配置运行时的信息,使用调制功能非常简单,在KDE环境下用模拟终端定义 FC_DEBUG 这个环境变量的值即可:

例如:csh环境下

setenv FC_DEBUG 1

在模拟终端中启动相应的程序,就可以查看设定的调试信息。可以按照下面Fontconfig用户手册介绍的说明设定具体显示的调试信息。
MATCH 1 Brief information about font matching 字体匹配信息
MATCHV 2 Extensive font matching information
EDIT 4 Monitor match/test/edit execution 显示match/test/edit信息
FONTSET 8 Track loading of font information at startup
CACHE 16 Watch cache files being written
CACHEV 32 Extensive cache file writing information
PARSE 64 (no longer in use)
SCAN 128 Watch font files being scanned to build caches
SCANV 256 Verbose font file scanning information
MEMORY 512 Monitor fontconfig memory usage
CONFIG 1024 Monitor which config files are loaded 显示配置文件装载信息
LANGSET 2048 Dump char sets used to construct lang values
OBJTYPES 4096 Display message when value typechecks fail    六、Fontconfig的字体匹配

Fontconfig的字体匹配模块是它的功能核心,设计的目标是确保根据“使用Fontconfig的应用程序所题出来的字体要求”能在系统安装的字体中找到一个匹配的字体,并为后续的字体渲染、字体显示填充一些用户可以控制的属性。字体匹配的原理简单的说就是“字体之间属性距离的计算”,通过比较应用程序所要求的字体与Fontconfig所管理的字体一些属性之间的距离,来确保可以找到一个字体,理想的字体匹配是“完全满足应用程序的要求”,但一般情况下,因为受系统中安装字体种类的限制、用户审美取向的不同以及Fontconfig配置文件的具体设定等因素的影响,只能依据“综合距离最小”的原则匹配到一种字体。然后根据Fontconfig配置文件中对具体字体的设定,以及后续字体渲染的一些要求,最终“加工”出一个“具有完整属性”的字体。

在整个字体匹配过程中,Fontconfig提供了一种非常灵活的控制字体匹配的机制,它通过可定制的的配置文件(fonts.conf)生成可对字体匹配造成影响的匹配规则,利用这些规则,用户可以替换字体,可以对可用字体进行排序,可以针对不同语言环境进行优化调整,甚至可以针对一种字体的不同大小,进行字体渲染的微调,这一切都可以利用Fontconfig的配置文件来调整,这一切也都是利用配置文件来控制,而这正符合Unix应用哲学中的“高可定制性”,因此想要掌握桌面系统的字体匹配,首先必须要了解掌握的就是Fontconfig的配置文件—fonts.conf和conf.d下的所有配置文件。

在第一部分已经提到了目前fonts.conf的一种发展趋势,就是模快化设计,但是fontconfig系统运行时,是加载全部的配置文件。

为了更深层次的对fontconfig的字体匹配机制进行分析,先明确几个概念性的东西:

(一)字体的属性

在fontconfig中定义了35种字体属性,在fontconfig的用户手册中有所介绍,现摘录如下:

截图九

每个属性都有一个或多个值,用来描述字体的某方面特征。如 lang,它保存的是字体所支持的语言字符串,里面可以有多个值, 如 hinting ,它保存的是该字体在显示时是否进行hint渲染,值只能是 true 或 fasle。

从属性的功用上分,大致可以分为三类:

1、为后续的字体渲染所定义,fontconfig可以对这些属性进行设定,影响后续的字体显示动作。如:antialias、hinting、hintstyle、rgba 等等

2、为字体匹配所定义,这些属性用来完成字体匹配的运算。如:family、style 、lang

3、为标识字体所定义,这部分属性一般不参与字体匹配与字体渲染的操作,但用来标识字体的信息。如 fontversion。

一个具体的例子:simsun的字体属性,部分属性是根据fontconfig的配置文件生成。

family: “SimSun”(s) :字体家族名
familylang: “en”(s) :家族语言
style: “Regular”(s) :正常风格
stylelang: “en”(s) :语言风格
slant: 0(i)(s) :倾斜
weight: 80(i)(s) :一些字体参数
width: 100(i)(s)
size: 12(f)(s)
pixelsize: 12.5(f)(s)
spacing: 90(i)(s)
foundry: “unknown”(s) :出品公司
antialias: FcTrue(w) :可antialias
hintstyle: 2(i)(w) :hint风格
hinting: FcTrue(w) :可hinting
verticallayout: FcFalse(s) :纵向输出
autohint: FcFalse(s) :不antohint
globaladvance: FcTrue(s) :高级控制可用
file: “/usr/local/lib/X11/fonts/Fonts/simsun.ttc”(s) :字体位置
index: 0(i)(s) :索引
outline: FcTrue(s) :可outline
scalable: FcTrue(s) :可scalable
dpi: 75(f)(s) :DPI值
rgba: 5(i)(w) :rgba方式
scale: 1(f)(s) :缩放方式
charset: 0000: 00000000 ffffffff ffffffff 7fffffff 00000000 ffffffff ffffffff ffffffff (这里删去很多)
lang: aa|ast|ay|bg|bi|br|ch|co|da|de|en|es|eu|fj|fo|fr|fur|fy|gd|gl|gv|ho|ia|id|ie|io|is|it|kum|lb|mg|nb|nds|nl|nn|
no|oc|om|os|pt|rm|ru|sel|sma|smj|so|sq|sv|sw|tn|ts|vo|wa|xh|yap|zh-cn|zh-sg|zu(s) :支持zh-cn语言
fontversion: 131072(i)(s) :字体版本
capability: “otlayout:hani”(s) :兼容
fontformat: “TrueType”(s) :字体格式
embeddedbitmap: FcTrue(s) :位图字体增强
decorative: FcFalse(s) :可修饰
(二)、pattern

pattern是fontconfig字体匹配的核心数据结构,所有的匹配操作都是围绕着pattern来完成的,pattern可以理解成为一个在流水线上制造的汽车,汽车的用户需求相当于应用程序提出的字体要求,可以非常简单,比如sans serif字体,大小12号,这也是pattern的最初形态 ,Fontconfig相当于制造流水线,根据配置文件中所定义的匹配规则,对这个最初的pattern进行加工,随着工序的逐步完成,pattern变得有模有样,无论是功能还是外形,都按照匹配规则的定义进行了设定,最终当fontconfig的所有流水作业完成时,pattern已经被武装成了一种具体的字体 ,并添加了控制后续字体显示,渲染的属性参数。

这就是pattern,它最终表示的是一种设置周全的字体,满足应用程序,或者说用户的要求。

(三)、匹配规则

就是Fontconfig的配置文件中定义的那些规则,在进行字体匹配时fonts.conf和conf.d目录下的配置文件都要被fontconfig读取、分析,然后形成匹配规则列表,匹配规则可以分为三类

1、与pattern相关,这些规则用于进行字体匹配运算,最终可以得到一种字体

这种类型的规则在配置文件中大都以下面的形式进行定义:

<match target=”pattern”>
<test qual=”any” name=”family”>
<string>sans</string>
</test>
<edit name=”family” mode=”assign”>
<string>sans-serif</string>
</edit>
</match>
简单说明一下:这个语句块的作用是,对pattern进行匹配操作,当pattern中的family属性中包含有sans时,匹配成功,执行下面的操作 —— 把pattern 中 family 属性中的 sans字体 替换成 sans-serif 字体。这里不对语句快中的具体参数进行解释,可以参看fontconfig的用户手册。

2、与font相关,这些规则主要是对匹配得到的字体进行进一步调整,满足用户的需求

<match target=”font”>
<test name=”family”>
<string>SimSun</string>
</test>
<edit name=”hinting”>
<bool>false</bool>
</edit>
</match>
简单说明一下:这个语句块的作用是,对匹配到的字体pattern进行字体匹配,如果这个字体pattern中的family属性是SimSun,则对这个匹配到的pattern做如下修改:把hinting的属性设定成false ,整个语句块的作用就是把simsun的hinting设定成假,如果匹配到的字体是simsun,那么这个设定就生效。如果没有匹配到simsun这个字体,这个匹配操作无效。

3、与字体渲染属性相关,这些规则主要是按照用户的需求,对字体的显示作一些定义。

<match target=”font” >
<edit mode=”assign” name=”antialias” >
<bool>true</bool>
</edit>
</match>
简单说明一下:这个语句块是对fontconfig匹配到的字体,无论是什么字体,都修改antialias属性为true,这个语句块摘自用户目录下的.fonts.conf文件,由KDE控制中心的字体配置中进行设定。1、安装xorg kde,以freebsd 6-stable为例,在保证网络联通的情况下,可用下面命令安装:

pkg_add -r xorg ;安装xorg
pkg_add -r kde ;安装kde
2、运行xorgcfg命令,在用户目录下生成 xorg.conf.new
cp ~/xorg.conf.new /etc/X11/xorg.conf
3、在用户目录下生成 .xinitrc 文件,文件的内容是
exec startkde
可以用如下命令生成 .xinitrc 文件
echo “exec startkde”>~/.xinitrc
4、运行startx命令,如果xorg.conf和.xinitrc文件正确,应该可以进入kde了

5、安装中文字体和输入法,可以输入和显示中文。推荐的方法是使用ports

cd /usr/ports/chinese/auto-cn-i10n
make install ;安装
make clean ;清除编译时产生的文件
6、安装kde中文包,界面中文化

pkg_add -r kde3-i18n-zh_CN
7、设置区域:

K菜单–>设置->区域和辅助功能->国家地区以及语言->添加语言->选择“简体中文”,并放到最上面,确定之后,可以显示中文界面
8、调整用户的locale,主要是设置LANG变量,以startx方式启动kde为例:

如果shell是csh,在用户目录下找到 .cshrc 任意位置填入 setenv LANG zh_CN.UTF-8
以上是建立kde中文桌面的大致过程,基本上就可以实现KDE桌面环境的中文化了。以前用Fctix就可以工作,今天装了Scim进入系统那个键盘标为灰色的,按Ctrl+space也不管用。
最终解决方法:重装了一下Scim

如果shell是sh,在用户目录下找到.profile 任意位置输入 export LANG=zh_CN.UTF-8

环境变量在.profile中设置一下。就行了。
.profile
代码:
export LANG=zh_CN.eucCN
export LC_ALL=zh_CN.eucCN
export LC_CTYPE=zh_CN.eucCN
.xinitrc
代码:

export XIM=”scim”
export XMODIFIERS=”@im=scim”
export GTK_IM_MODULE=”scim”

cat .xinitrc
export LANG=”zh_CN.eucCN”
export LC_CTYPE=”zh_CN.eucCN”
export LC_ALL=”zh_CN.eucCN”
export XMODIFIERS=’@im=scim’
exec scim -d&
exec gnome-session
pkg_info |grep scim
scim-1.4.4_2 Smart Common Input Method platform
scim-table-imengine-0.5.6_2 SCIM table based input method engine
zh-scim-tables-0.5.4_3 SCIM table based Chinese input methods
分析:
出问题有可能是升级了内核后需要重装一下Scim从windows转到KDE来的,可能一开始会不习惯,想找几个在windows里用的比较的顺手的软件。这里就推荐几个:
一、“我的电脑”->“系统”
从windows过来,可能要习惯性地找“我的电脑”,我的电脑里,基本上可以找到系统的一切。在KDE的世界里,这个变了名字,叫做“系统”了,当然,位置还没变,还在桌面的左上角。
当然,如果你愿意,完全可以把它改名为“我的电脑”,但是,改名的时候注意哦,在windows中,单击名称可以改名,但是在KDE中,单击是打开程序。
当然这个鼠标行为是可以改掉的,KDE中还有很多在windows中不可能改的东西都可以改。(这是后话,先知道有这么回事就行了)
进了“我的电脑”了,咦?C盘和D盘到哪儿去了?对不起,这是Unix,没有C盘和D盘的概念,在Unix中,所有的文件,都是统一在根(root,用“/”表示,斜杠,不是DOS里的把斜杠)目录下面的,不论你有几个硬盘,所有分区都在根(/)下面。而在根(/)下面,有几个目录是必须有的,你自己想建目录,最好别在根下面建,到/home里建最好,因为那个是你自己的地盘。
注意看两个地方:菜单栏和下半部分左边。菜单栏可以折行。左边部分显示了本机常用的资源,从网络到设备。在Unix中,还要有个概念,就是所有的设备也是一个文件,所以,没有“系统设备”那一个说明,看系统中有什么设备,到/dev/里面看一下就行了。可能一开始看懂,接触多了就能看懂一部分,到看懂所有的设备文件,就成为“大师”了。^_^
在最右边,还有一个kde的图标,这个表示开启一个新的窗口。
其它的方面,都和windows下差不多,注意默认情况下,单击是打开程序,而不是选择。
二、”记事本”->“kedit“,“UltraEdit”->“Kate”
进了系统,也许第一件事就是打几个字过过瘾了。在windows中,最简单的是“记事本”,在KDE中,则是“K菜单”->“实用工具”->“编辑器”->“Kedit 简单文本编辑器”。
这个编辑器,只有最简单的功能。基本上和“记事本”差不多。想要点高级点的功能,那就看一下“K菜单”->“实用工具”->“编辑器”->“Kate 高级文本编辑器”,这个功能多了很多,但是,不要把它等同于”写字板”。“写字板”可以进行简单的文字编辑,改一改字体、颜色、大小什么的。这个“Kate”可不能,想要实现那个功能,去看“koffice”。这个“Kate”是个编辑器,那么它编辑什么呢?最善长的就是源程序,你写的C、JAVA、PERL等程序,都可以在这儿写,说白了,就相当于“UltraEdit”之类的工具,但是不具备16进制编辑。
既然提到16进制编辑,那么KDE下用什么来实现16进制编辑呢?在“K菜单”->“实用工具”->文件->“KHexEdit”,这个功能比“UltraEdit”还要强大哦!(当然,某些方面,^_^)
对了,在Unix里面,你可能要面对一个很严肃的问题:中文编码。也许你意识不到在Windows里还有编码的事,但是在Unix里面,就不行了,如果编码不对,将显示乱码。“Kate”就可以让你切换字符编码。设置的地方在”工具里面“。
三、“开始菜单”->“K菜单”及“任务栏”
进来半天了,还没仔细看一下“开始菜单”和“任务栏”吧。如果你用习惯了“WindowsXP”的“开始菜单”,你可能又觉得“K菜单”不习惯了。“K菜单”和Windows2000的开始菜单差不多,功能也相似,感觉就像是只换了一个图标而已。
“任务栏”也差不多,只有两个地方不太一样:第一个就是多了“一、二、三、四”字样,第二个就是最右边多了个小小的箭头(不仔细看还看不到!)。
“一、二、三、四”表示是四个“虚拟桌面”,你最多可以设置到20个桌面,在每个桌面上可以运行不同的程序,每个桌面还可以单独命名,比如把它们命名成为“上网”、“打字”、“电影”、“程序”、“图片”……这样,在干大活的时候,就不至于在桌面上堆满乱七八糟的窗口了。
“任务栏”最右边,是一个小箭头,按一下,看下效果。怎么样?吃了一惊吧!“任务栏”没有了!看你怎么操作计算机!不过没关系,再点一下仅余的一点点小箭头,任务栏又回来了。
这个有什么用呢?搞过多媒体的都知道,干活的时候,经常嫌屏幕小了,多了这么一行屏幕空间,有很多时候也是非常有用的。“寸屏寸金”啊!
也许你觉得这个跟“自动隐藏”差不多,其实它也可以“自动隐藏”的,在“任务栏”的空白处或栏交界处“右击”->“配置面板”,打开看一下,肯定吓你一跳,这里面有很多Windows里不可以想像的选项,比如说把“任务栏”变短变窄,注意:可不是windows意义上的变窄哦!
多在里面逛逛吧!你会发现,KDE里,比Windows里更自由!
四、“画图”->“KolourPaint”,“Photoshop”->“Krita”
想画个图试试吗?“K菜单”->“图像”->“KolourPaint 绘图程序”。这个绘图程序应该比Windows里自带的“画图”功能更多一些。经常有人说,Windows的“画图”仅仅是初学者的学习之地,而”KolourPaint”则有一定的实用价值。按下“ctrl+M”(或菜单“图像”-“更多效果”),可以调出“更多效果”面板,这里,可以有“柔化”“亮度”“对比度”等简单的功能,如果不是进行大的修改,一般的图片都可以在这儿进行。
谈到图像,马上就想起PhotoShop来。Unix下面没有Photoshop(更正:这提法其实不对,因为Mac系统就是FreeBSD,但是普通意义上讲还可以说得通),想用Photoshop的强大功能怎么办呢?那么就试试krita吧,打开路径是:“K菜单”->“图像”->“Krita 绘图和图像编辑”,这个图像功能更强大一些,包括很多滤镜在内。由于本人不是图像狂热爱好者,所以也没法试用所有功能,但是,对于一般人来说,虽然跟不上 Photoshop,平时用应该足够了。具体用法,还是去看一下帮助吧,可能开始会不习惯。

原文链接:http://jswz.jiashanedu.net/wordpress/?p=7

FreeBSD 8.0 Gnome桌面安装笔记

一,安装FreeBSD系统
安装系统并升级到8.0 release
编译内核,以便获得显卡,声卡,无线网卡等支持
我的电脑是IBM R52,编辑内核文件:
# ATI drives
device    drm
device    radeondrm
# Sound drives
device sound
device snd_ich
# Intel Wireless
device          iwi

编译内核,重启电脑

二、无线网卡设置
vi /boot/loader.conf
legal.intel_iwi.license_ack=1

vi /etc/rc.conf
wlans_iwi0=wlan0
ifconfig_wlan0=”ssid linksys wepmode on weptxkey 1 wepkey 1:0xFFFFFFFFFF DHCP”

三、升级ports
cp /usr/share/examples/cvsup/ports-supfile /root/.
csup -L 2 -h cvsup.cn.freebsd.org /root/ports-supfile

四、安装xorg
vi /etc/make.conf
MASTER_SITE_OVERRIDE=ftp://ftp.FreeBSDChina.org/pub/FreeBSD/distfiles/${DIST_SUBDIR}/
USE_LINUX_BASE_PORT=f10
USE_LINUX_NONBASE_PORTS=f10
OVERRIDE_LINUX_BASE_PORT=f10
OVERRIDE_LINUX_NONBASE_PORTS=f10

cd /usr/ports/x11/xorg
make install clean

五、安装gnome2
cd /usr/ports/x11/gnome2
make install clean

六、安装输入法
1,安装SCIM输入法主程序
cd /usr/ports/textproc/scim
make install clean

2,安装五笔插件
cd /usr/ports/chinese/scim-tables
make install clean

3,安装拼音插件
cd /usr/ports/chinese/scim-pinyin
make install clean

七、配置汉化Gnome
Xong -configure
cp /root/xong.conf.new /etc/X11/xong.conf

mkdir /usr/X11R6/lib/X11/fonts/TypeFonts
把WINDOWS系统字体文件复制到/usr/X11R6/lib/X11/fonts/TypeFonts
包括mingliu.ttf
simhei.ttf
simsun.ttf(simsun.ttc重命名即可)
tahoma.ttf
tahomabd.ttf
执行命令:
fc-cache -v

vi /etc/profile
LANG=zh_CN.UTF-8
LC_ALL=zh_CN.UTF-8
export LANG LC_ALL
exec scim -d &

vi /etc/rc.conf
hald_enable=”YES”
dbus_enable=”YES”
# 开机自动启动gnome
gdm_enable=”YES”

vi /etc/fstab
proc    /proc    procfs    rw    0    0

八、其它常用软件安装
1,QQ
vi /boot/loader.conf
linux_load=”YES”

vi /etc/rc.conf
linux_enable=”YES”

vi /etc/sysctl.conf
compat.linux.osrelease=2.6.16

cd /usr/ports/emulators/linux_base-f10
make install clean

cd /usr/ports/net-im/qq
make install clean

如果不能中文输入,执行:
/compat/linux/usr/bin/localedef -i zh_CN -f UTF-8 zh_CN

2,Firefox
cd /usr/ports/www/firefox35
make install clean

3,firefox flashplayer插件
cd /usr/ports/www/nspluginwrapper
make install clean

cd /usr/ports/www/linux-f10-flashplugin10
make install clean

ln -s /usr/local/lib/npapi/linux-f10-flashplugin/libflashplayer.so /usr/local/lib/browser_plugins/

安装插件
nspluginwrapper -v -a -i

vi /etc/fstab
linproc    /usr/compat/linux/proc    linprocfs    rw    0    0

原文链接:http://garey.bsdart.org/2009/12/freebsd-8-0-rc1-gnome%E6%A1%8C%E9%9D%A2%E5%AE%89%E8%A3%85%E7%AC%94%E8%AE%B0/

FreeBSD Name Server配置

FreeBSD系统自带BIND软件,我们编辑/etc/namedb/named.conf即可设置BIND。

把默认的named.conf作个备份
cp /etc/namedb/named.conf /etc/namedb/named.conf.default

修改named.conf
options选项增加
allow-query     { any; };
recursion       no;        // 不提供递归服务
去掉
listen-on       { 127.0.0.1; };

域名记录增加
zone “bsdartbsdart.org” {
type master;
file “bsdart/bsdart.org.db”;
};

zone “23.51.210.in-addr.arpa” {
type master;
file “bsdart/bsdart.org.rev”;
};

新建bsdart目录
mkdir /etc/namedb/bsdart
chown -R bind:wheel /etc/namedb/bsdart

cd /etc/namedb/bsdart
vi bsdart.org.db
$TTL 3600
bsdart.org.     IN      SOA     dns.bsdart.org. admin.bsdart.org. (
2009070901      ; Serial
10800           ; Refresh
3600            ; Retry
604800          ; Expire
300 )           ; Negative Reponse TTL
; DNS Servers
IN      NS      dns.bsdart.org.
; MX Records
IN      MX 10   mail.bsdart.org.

IN      A       210.51.23.23
; Machine Names
localhost       IN      A       127.0.0.1
mail            IN      A       210.51.23.23
dns             IN      A       210.51.23.23
; Aliases
www             IN      CNAME   bsdart.org.

vi bsdart.org.rev
$TTL 3600
23.51.210.in-addr.arpa. IN SOA dns.bsdart.org. admin.bsdart.org. (
2009070901      ; Serial
10800           ; Refresh
3600            ; Retry
604800          ; Expire
300 )           ; Negative Reponse TTL
IN      NS      dns.bsdart.org.
23      IN      PTR     mail.bsdart.org.

vi /etc/rc.conf
新增
named_enable=”YES”

原文链接:http://garey.bsdart.org/2009/12/freebsd-name-server%E9%85%8D%E7%BD%AE/

使用FreeBSD默认的csh替代bash

使用FreeBSD默认的csh替代bash

一直以来,都习惯了bash的风格,比如命令补全、历史命令编辑、nohup后台运行,等等。

现在基本上只使用FreeBSD,而FreeBSD默认的shell并不是bash,而且bash ports是安装在/usr/local/bin/bash的,我一般都把/usr/local从根分区分离出去,这样的话,如果系统有问题需要进入单用户模式的时候,bash是不可用的。

研究了一下,如果csh经过一定的设置,也是很好用的。

1、设置命令补全,修改/etc/csh.cshrc文件:
set autolist

2、显示类似 [dirk@trinity /usr/local/etc]# 这样的提示符,修改/etc/csh.cshrc文件:
set prompt = ‘[%B%n@%m%b %B%~%b%]#’

3、让ls命令显示目录的时候带/斜杠区分普通文件,修改/etc/csh.cshrc文件:
alias ls ls -F

4、让csh具有历史命令编辑功能,还是/etc/csh.cshrc文件:
bindkey “^W” backward-delete-word
bindkey -k up history-search-backward
bindkey -k down history-search-forward

5、最后,使用script命令替代nohup命令:
script -a script.log “command”

原文链接:http://www.dirk.pdx.cn/blog/diary,266894.html

教你如何理解FreeBSD的分区

教你如何理解FreeBSD的分区

FreeBSD 的分区很简单:

假设你机器上只在IDE 0口安装了一块硬盘,跳线为Master。
/dev/ad0——————————- 代表此硬盘,如是多块硬盘,根据内核配置和连接接口不同,会有 0,1,2,3 的变化。
/dev/ad0s—————————— s为分割(slice)。
/dev/ad0s1—————————- 此硬盘下第一个分割slice,可以理解为是个Win/Dos/Linux 使用的扩展分区(也就是种特殊的主分区)。
/dev/ad0s1a————————— 第一个分割里的第一个分区label,可以理解为是个(Win/DOS/Linux用的)逻辑分区,默认约定为文件系统/ 使用。
/dev/ad0s1b————————— 第一个分割里的第二个分区label.约定为SWAP 交换分区,此命名不可更改。
/dev/ad0s1c,d ———————— 都被系统默认保留,不可使用。
/dev/ad0s1e ————————– 可由用户自行可控制用于/挂载哪个文件系统。(除过/ 和 swap 类型)

因为普通的PC的BIOS默认使用MBR型分区表只支持 4个主分区,所以 一块硬盘最多只能有 “分割 s 0-3 ” 这4个分割,每个分割最多只能有a – h 这8个分区—-lable。
因此,一块硬盘,最多只能有 32 个BSD 的 分区–label(Win/DOS/Linux 用的逻辑分区)。

win 用的分区与 BSD 的分区最大的不同:在win 分区,一块硬盘只能有一个扩展分区(这个扩展分区可有多个逻辑分区);而BSD分区系统,一块硬盘可以有4个BSD 分割 slice(每个slice 都可以有8个分区 label )。