[ 上一页 ] [ 目录 ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ] [ 13 ] [ 14 ] [ 15 ] [ A ] [ 下一页 ]


Debian 参考手册
第 9 章 - Debian 系统微调


本章讲述了基本的基于命令行界面的系统配置方法。在学习本章前,你需要先阅读 Debian 系统安装提示, 第 3 章.

如是你很关心安全方面的信息,你应该阅读 Securing Debian Manual,它在 harden-doc 软件包中。


9.1 系统初始化

Debian 使用 System V 的 init 脚本系统。参阅 init 程序, 第 2.4.1 节的介绍。


9.1.1 自定义 init 脚本

最简单的控制 init 脚本的方法是改变 /etc/default 目录下,与 init 脚本同名的文件里的环境变量设置。 [39] 例如,/etc/default/hotplug 可以控制 /etc/init.d/hotplug 的行为。文件 /etc/default/rcS 可以用来定制 motdsulogin 等为默认启动。

如果你不能通过设置这些变量来得到你所需要的行为,你可以去修改 init 脚本:它们都是配置文件。


9.1.2 自定义系统日志

可通过 /etc/syslog.conf 配置系统日志记录方式。如果想为日志文件上色可安装 colorize 软件包。参阅 syslogd(8)syslog.conf(5)


9.1.3 硬件存取优化

有一部分硬件优化的配置工作 Debian 留给了系统管理员。

使用 noatime 选项挂载文件系统可有效提高文件的读取速度。参阅 fstab(5)mount(8)

通过 proc 文件系统,Linux 内核可直接调节某些硬件参数。参阅通过 proc 文件系统调整内核, 第 7.3 节

Debian 中有许多专门的硬件配置工具包。其中有不少是针对笔记本电脑的。这儿有一些有趣的软件包:

ACPI 是一种比 APM 更新的电源管理系统。

某些软件包需要专门的内核模块。它们已经包含在许多最新的内核源码中。如果遇此问题,则需要手动打上最新的内核补丁。


9.2 访问限制(Restricting access)


9.2.1 用 PAM 来控制登录

PAM(Pluggable Authentication Modules 可嵌入认证模块)允许你控制用户是如何登录的。

     /etc/pam.d/*             # PAM 管理文件
     /etc/pam.d/login         # PAM 登录管理文件
     /etc/security/*          # PAM 模块参数
     /etc/securetty           # 管理通过控制台进行的 root 登录(login)
     /etc/login.defs          # 管理登录行为(login)

如果想在控制台终端不用密码直接登录系统,可按下面的方法修改 /etc/pam.d/login 文件的内容,风险自负。

     #auth       required   pam_unix.so nullok
     auth       required   pam_permit.so

该方法亦可用于 xdmgdm,实现无密码 X 控制台。

相反,如果你希望强化密码政策,可安装 cracklib2 并按下面的方法修改/etc/pam.d/passwd

     password required       pam_cracklib.so retry=3 minlen=6 difok=3

使用一次性登录密码激活帐户也很有用。要实现该功能,在 passwd 命令后加上 -e 参数,参阅 passwd(1)

要设置系统最大进程数,可在 Bash shell 中设定 ulimit -u 1000 或设置 PAM 的 /etc/security/limits.conf 文件。其它参数如 core 等的设置方法与之类似。PATH 的初始值可在 /etc/login.defs 中先于 shell 启动脚本设置。

PAM 的文档位于 libpam-doc 软件包内。其中 The Linux-PAM System Administrator's Guide 一文涵盖了 PAM 配置、可用模块等内容,文档中还包括了 The Linux-PAM Application Developers' GuideThe Linux-PAM Module Writers' Guide


9.2.2 “为什么 GNU su 命令不支持 wheel group”

这是 Richard M. Stallman 的一句名言,位于旧版 info su 页面末尾。别担心:在 Debian 中,当前版本的 su 使用 PAM,因此你可以用 /etc/pam.d/su 下的 pam_wheel.so 来限制任何用户组使用 su 的能力。下面的操作将在 Debian 系统中赋予 adm 用户等同于 BSD wheel 用户组的权限,而且该组成员不需要密码就能使用 su 命令。

     # anti-RMS configuration in /etc/pam.d/su
     auth       required   pam_wheel.so group=adm
     
     # Wheel members to be able to su without a password
     auth       sufficient pam_wheel.so trust group=adm

9.2.3 各标准用户组的目的

一些有趣的用户组:

完整列表参阅 Securing Debian Manual 的“FAQ”章节,亦见于 Woody 中的 harden-doc 软件包。新的 base-passwd (>3.4.6)软件包亦包含了权威列表:/usr/share/doc/base-passwd/users-and-groups.html


9.2.4 更安全地工作 – sudo

使用 sudo 最主要的目的是保护自己少做蠢事,我认为使用系统时使用 sudo 比总是使用 root 帐号更好。

安装 sudo 然后编辑 sudoers 中有关选项激活它。还可在 /usr/share/doc/sudo/OPTIONS 中查看 sudo 的用户组特性。

样例中的配置,设定“staff”用户组成员可通过 sudo 执行任何 root 权限的命令而“src”用户组成员只可执行规定的一部分 root 权限的命令。

使用 sudo 的好处在于只需一个普通用户密码登录,并且所有的活动都受到监控。用它为低级别的系统管理员赋权是个好主意。例如:

     $ sudo chown -R myself:mygrp .

当然,如果你知道 root 密码(绝大部分在家安装系统的用户都会知道),就可以在普通用户下执行任何 root 命令:

     $ su -c "shutdown -h now"
     Password:

(我想我该严格限制 admin 帐号的 sudo 特权,但对于家中的服务器,就不用考虑那么多了。)

想了解其它允许普通用户执行 root 权限命令的程序,可以看看 super 软件包。


9.2.5 服务的访问限制

对于 Internet 超级服务器inetd 会在系统启动时通过 /etc/rc2.d/S20inetd(for RUNLEVEL=2)加载,S20inetd 是一个指向 /etc/init.d/inetd 的符号链接。本质上,inetd 允许一个运行中的守护进程(daemon)调用其它多个守护进程,以减轻系统的负载。

当某个服务请求到达,系统会查询 /etc/protocols/etc/services 中的数据库,确定该请求所指定的相关协议和服务,接着 inetd 会在 /etc/inetd.conf 数据库中查找普通 Internet 服务或 /etc/rpc.conf 中查找基于 Sun-RPC 的服务。

为了系统安全,请在 /etc/inetd.conf 中关闭所有不用的服务。涉及到 NFS 和其它基于 RPC 的程序时需要激活 Sun-RPC 服务。

有时,inetd 并不直接打开请求的服务,而是在 /etc/inetd.conf 中将该服务名作为的参数,打开 tcpd TCP/IP 守护进程包装程序。这时,tcpd 首先登记请求并使用 /etc/hosts.deny/etc/hosts.allow 进行附加的检查,然后再运行相应的服务程序。

如果新版的 Debian 系统进行远程访问时出现问题,可以在 /etc/hosts.deny 中注释掉“ALL: PARANOID”,如果有该行的话。

更多信息参阅 inetd(8)inetd.conf(5)protocols(5)services(5)tcpd(8)hosts_access(5)hosts_options(5)

有关 Sun-RPC 的更多信息参阅 rpcinfo(8)portmap(8)/usr/share/doc/portmap/portmapper.txt.gz


9.2.6 集中式验证 – LDAP

使用轻形目录访问控制协议(LDAP) 参阅:


9.3 刻录机

ATAPI/IDE 接口的刻录机是时下非常流行的配件,它是极好的系统备份工具,特别是对于那些单个文件容量一般 < 640 MB 的家庭用户。更多权威的信息,请参阅 LDP CD-Writing-HOWTO


9.3.1 概述

首先需要说明的是,在向刻录机发送数据过程中,任何数据中断都会对光盘造成无法挽回的损坏。所以应选购缓冲区尽可能大的刻录机。如果资金充裕,就别再考虑 ATAPI/IDE 型的,买台 SCSI 型的没错。如果可以连接 IDE 接口,就使用 PCI 总线(例如,在主板上)而别用 ISA 总线(SB16 声卡使用的就是它)。

当刻录机连接到 IDE,驱动它的通常是 IDE-SCSI 驱动而非旧式的 IDE CD 驱动,所以,需要激活 SCSI 通用驱动。有两种方法激活它,假设系统使用的是较新版本的内核(如 2001 年三月的版本)。

对于 Linux 2.6 的内核,你应该使用 IDE 驱动并直接使用 /dev/hdx 这些设备名称来访问。这种方式你可以使用 DMA。


9.3.2 方法一:modules + lilo

如果使用的是 Debian 原装内核,将下面的内容添加到 /etc/lilo.conf,如果有多个选项,列出时要将它们用空格分隔开:

     append="hdx=ide-scsi ignore=hdx"

在此,刻录机使用 ide-scsi 驱动访问,hdx 就代表它,其中 x 代表下列任何一种设备:

     hda          接第一个 IDE 接口作主盘
     hdb          接第一个 IDE 接口作从盘
     hdc          接第二个 IDE 接口作主盘
     hdd          接第二个 IDE 接口作从盘
     hde ... hdh  接扩展 IDE 接口或 ATA66/100 IDE 接口

完成上述配置工作后以 root 身份运行下列命令激活设备

     # lilo
     # shutdown -h now

9.3.3 方法二:重编译内核

Debian 用 make-kpkg 创建新内核,使用 make-kpkg 时加上新的 --append_to_version 参数可创建多重内核镜像。参阅 Debian 下的 Linux 内核, 第 7 章

make menuconfig 后执行下列步骤:


9.3.4 配置步骤

下列步骤可让系统在启动时激活内核对刻录机的支持:

     # echo ide-scsi >>/etc/modules
     # echo sg       >>/etc/modules
     # cd /dev; ln -sf scd0 cdrom

手工激活可以这样做:

     # modprobe ide-scsi
     # modprobe sg

重启以后,用下列方法检查安装情况:

     $ dmesg|less
     # apt-get install cdrecord
     # cdrecord -scanbus

[Per Warren Dodge]如果机器上同时有 CD-ROM 和 CD-R/RW,这时 ide-scsiide-cd 可能会产生冲突,请试试在 /etc/modutils/aliases 中加上下面的内容,然后运行 update-modules 并重启系统。

     pre-install      ide-scsi      modprobe ide-cd

上述指令指示系统在加载 ide-scsi 前先加载 IDE 驱动。IDE 驱动 ide-cd 接管所有 ATAPI CD-ROM——对指明忽略的设备除外。剩下的设备才由 ide-scsi 来管理。


9.3.5 光盘镜像文件(可引导光盘)

target-directory/ 下的文件制作成光盘镜像文件 cd-image.raw(可引导系统、Joliet TRANS.TBL-enabled 格式的光盘;如果不需要引导系统功能,可去掉 -b-c 选项),在第一个软驱中插入启动软盘然后执行:

     # dd if=/dev/fd0 target-directory/boot.img 
     # mkisofs -r -V volume_id -b boot.img -c bootcatalog -J -T \
             -o cd-image.raw target_directory/

一个有趣的黑客尝试是制作一盘 DOS 引导光盘。如果上述的 boot.img 文件中包含了通用 DOS 引导软盘镜像,光盘就可以象插在软驱(A:)中的 DOS 软盘一样引导 DOS 系统。如果再加上 freeDOS 就更有趣。

想检查该光盘镜像文件,可以在回送设备(loop device)上加载它。

     # mount -t iso9660 -o ro,loop cd-image.raw /cdrom
     # cd /cdrom
     # mc
     # umount /cdrom

9.3.6 刻录光盘(R,R/W):

首先进行设备测试(假设是双倍数刻录)

     # nice --10 cdrecord -dummy speed=2 dev=0,0 disk.img

如果测试通过,执行下面的命令刻录 CD-R

     # nice --10 cdrecord -v -eject speed=2 dev=0,0 disk.img

或执行下面命令刻录 CD-RW

     # nice --10 cdrecord -v -eject blank=fast speed=2 dev=0,0 disk.img

某些型号的 CD-RW 刻录机用下面的命令更好

     # nice --10 cdrecord -v blank=all speed=2 dev=0,0 disk.img

接下来执行

     # nice --10 cdrecord -v -eject speed=2 dev=0,0 disk.img

分两步做是必要,这可以防止在刻录时遇到数据空白产生 SCSI 超时错误。nice参数可时也要做一些调整。


9.3.7 制作光盘镜像文件

某些 CD-R 和商业光盘在数据末尾追加了空白扇区(junk sectors),使用 dd 无法拷贝这些光盘(Windows98 CD 就是其中之一)。cdrecord 软件包中有一个 readcd 命令,用它可以将任何光盘内容拷贝成镜像文件。对于数据盘,先挂载,运行 df 查看它的实际大小,再将显示的数字(in blocks, = 1024 bytes)除以 2 得到实际光盘扇区数(2048 bytes),带参数运行 readcd 用该硬盘镜像文件烧制 CD-R/RW。

     # readcd dev=target,lun,scsibusno # select function 11

其中,大部分情况下命令行中三个参数都为 0。有时 readcd 给出的扇区数会偏多!此时使用前面用挂载镜像的方法得出的大小值来对上述参数赋值效果更好。

应该提醒的是,如果你对 CD-ROM 使用 dd 的话,会有不少问题。第一次执行 dd 时可能会产生错误信息并丢失光盘镜像末端的一些数据。再次执行 dd 时,如果没有指定镜像的大小的话,在一些系统上会产生一个过大光盘镜像,其末端都是垃圾。只有第二次运行 dd 时,使用正确的镜像大小并在看到错误信息之后不弹出光盘,才能避免这些问题。例如,假设用 df 得到镜像的大小为 46301184 blocks,则执行两次下面的命令可以得到正确的镜像(这是我的经验):

     # dd if=/dev/cdrom of=cd.img bs=2048 count=$((46301184/2))

9.3.8 Debian 安装盘镜像

有关 Debian CDs 的最新信息,请浏览 Debian CD site

如果有较快的 Internet 连接,可考虑用下面的引导方法从网络安装系统:

如果没有较快的 Internet 连接,可考虑从光盘出售商处购买安装光盘。

请不要浪费带宽来下载标准光盘镜像(即使是使用新的 jigdo 方式),除非你是光盘镜像测试员。

有一个很有名的光盘镜像 KNOPPIX - Live Linux Filesystem On CD。该光盘可以启动一个全功能的 Debian 系统而且不需要在硬盘上安装。


9.3.9 将系统备份到 CD-R

想要将重要的配置文件和数据备份到 CD-R,可使用 backup 中的“backup”脚本。亦可参阅差量备份与数据同步, 第 8.4 节


9.3.10 将音乐 CD 刻录到 CD-R

我没测试过:

     # apt-get install cdrecord cdparanoia
     # cdparanoia -s -B
     # cdrecord dev=0,0,0 speed=2 -v -dao -eject defpregap=1 -audio *.wav

     # apt-get install cdrdao #disk at once
     # cdrdao read-cd --device /dev/cdrom --paranoia-mode 3 my_cd # read cd
     # cdrdao write --device /dev/cdrom --speed 8 my_cd    # write a new CD

cdrdao与拷贝不同(如没有数据间隙,等...)。


9.3.11 刻录 DVD-R、DVD-RW 和 DVD+RW

刻录 DVD 光盘有两种方式:


9.4 X

X 窗口系统由 XFree86 提供。Debian 系统中 X 服务器有两个主要版本:XFree86 Version 3.3 (XF3)和 XFree86 Version 4.x series (XF4),它们都是基于 X.Org 制定的 X11R6 标准。

想了解 X 的基础知识,可参阅 X(7),LDP XWindow-User-HOWTORemote X Apps mini-HOWTO。对 Debian 用户专门的指南,可阅读 xfree86-common 软件包中提供的 /usr/share/doc/xfree86-common/FAQ.gz,其中 Branden Robinson 有一些关于 key binding 的有趣且权威的讨论。

X 服务器, 第 9.4.3 节

该程序存在于那些需要在用户显示器(CRT,LCD)上显示 X 窗口和桌面并接收键盘和鼠标输入的本地主机上。

X 客户端, 第 9.4.4 节

该程序存在于那些需要运行与 X 兼容的应用程序的(本地或远程)主机上。

这正好将常规的“服务器”和“客户机”关系倒转过来。

有几种途径让“X server”(显示端)接收远程“X client”(应用端)的连接请求:

除了 ssh,所有的远程连接方式,都需要X服务器开启 TCP/IP 连接。参阅在 TCP/IP 中使用 X, 第 9.4.6 节


9.4.1 X 软件包

在 Woody 中提供了下列几个(meta)软件包来简化 X 的安装。

x-window-system-core

该综合包提供一些基本组件,用于在单一工作站上运行 X Window 系统,其中包括 X 函数库、一个 X 服务器(xserver-xfree86)、一套字体、一组基本的 X 客户端及工具。

x-window-system

该综合包提供 XFree86 项目开发的所有 X Window 系统的组件,以及一套经久不衰的辅助程序。(注意,它包含了 x-window-system-coretwmxdm 等组件,故安装了它就不用再安装 x-window-system-core 了。)

xserver-common-v3

XFree86 3.x X服务器(X3)相关的程序和工具。

xserver-*

XF3 服务器软件包的补充包,包含了对那些新的 XF4 服务器(xserver-xfree86)不支持的硬件的支持。如 XF4 不支持某些老式的 ATI mach64 卡,某些视频卡在 Woody 版的 XF4 中无法工作等等。(要获得可用软件包,可执行apt-cache search xserver-|less。所有这些 XF3 服务器均是基于 xserver-common-v3 的。)

大多数情况下,应该安装 x-window-system(如果要通过控制台登录,需禁用 xdm,具体方法参阅“我不想直接启动到 X!”, 第 8.1.4 节。)


9.4.2 X 服务器的硬件侦测

在安装 X 系统之前安装下列软件包,就能在 X 配置阶段实现硬件侦测:


9.4.3 X 服务器

有关 X 服务器的信息,参阅 XFree86(1x)

从本地控制台调用 X 服务器:

     $ startx -- :<display> vtXX
     e.g.:
     $ startx -- :1 vt8 -bpp 16
     ... start on vt8 connected to localhost:1 with 16 bpp mode

--后面的参数用于设置 X 服务器。

注意,在使用 ~/.xserverrc 脚本定制 X 服务器启动进程时,请确保 exec 调用的是真正的 X 服务器。如果没这么做会导致 X 服务器启动缓慢及退出。例如:

     #!/bin/sh
     exec /usr/bin/X11/X -dpi 100 -nolisten tcp

9.4.3.1 配置 X 服务器(版本 4)

(重新)配置 XF4 服务器,

     # dpkg-reconfigure --priority=low xserver-common
     # dpkg-reconfigure --priority=low xserver-xfree86

该命令会生成 /etc/X11/XF86Config-4 文件并调用 dexconf 脚本来配置X。


9.4.3.2 配置 X 服务器(版本 3)

(重新)配置 XF3 服务器。例如,针对 ATI mach64,

     # dpkg-reconfigure --priority=low xserver-common-v3
     # dpkg-reconfigure --priority=low xserver-mach64

该命令会生成 /etc/X11/XF86Config 文件并调用 xf86config-v3 脚本来配置X。


9.4.3.3 手工配置 X 服务器

在 Woody 系统上,往文件 /etc/X11/XF86Config-4 中添加用户自定义内容时,不要在配置文件的定义段落中进行编辑

     ### BEGIN DEBCONF SECTION
     [snip]
     ### END DEBCONF SECTION

正确是做法是将用户定义内容加在定义段落之前。例如,要添加自定义视频卡,可在文件开头添加类似下面的内容:

     Section "Device"
       Identifier        "Custom Device"
       Driver            "ati"
       Option            "NoAccel"
     EndSection
     
     Section "Screen"
       Identifier  "Custom Screen"
       Device      "Custom Device"
       Monitor     "Generic Monitor"
       DefaultDepth 24
       Subsection "Display"
         Depth       8
         Modes       "1280x960" "1152x864" "1024x768" "800x600" "640x480"
       EndSubsection
       Subsection "Display"
         Depth       16
         Modes       "1280x960" "1152x864" "1024x768" "800x600" "640x480"
       EndSubsection
       Subsection "Display"
         Depth       24
         Modes       "1280x960" "1152x864" "1024x768" "800x600" "640x480"
       EndSubsection
     EndSection
     
     Section "ServerLayout"
         Identifier        "Custom"
         Screen            "Custom Screen"
         InputDevice       "Generic Keyboard" "CoreKeyboard"
         InputDevice       "Configured Mouse" "CorePointer"
     EndSection

对于 Sarge(撰写本文时是 testing),如果你希望在升级的时候保留用户的自定义的 /etc/X11/XF86Config 设置,请用 root 运行下列命令:

     # cp /etc/X11/XF86Config-4 /etc/X11/XF86Config-4.custom
     # md5sum /etc/X11/XF86Config-4 > /var/lib/xfree86/XF86Config-4.md5sum
     # dpkg-reconfigure xserver-xfree86

如果想美化字体,请按照 X 下的 TrueType 字体, 第 9.4.13 节中的说明来修改 /etc/X11/XF86Config-4

请同时检查 X 设置中的其他部分。不良的显示器设置甚至比难看的字体更让人头痛,所以请确保你设置的刷新率是你显示器能处理的最高刷新率(85 Hz 很好,75 Hz 还可以,60 Hz 就很糟糕了)。


9.4.4 X 客户端

绝大多数 X 客户端程序都可以用类似下面的命令启动:

     client $ xterm -geometry 80x24+30+200 -fn 6x10 -display hostname:0 &

命令行中各参数的含义如下:

默认的 X 客户端程序(应用端)的 displayname 可通过 DISPLAY 环境变量来设置。例如:在运行某 X 客户端程序之前,执行下列命令之一就可以完成设置工作:

     $ export DISPLAY=:0 
             # 默认情况下,本地机器使用第一个 X 屏幕
     $ export DISPLAY=hostname.fulldomain.name:0.2
     $ export DISPLAY=localhost:0

程序启动方式可以在~/.xinitrc中进行自定义。例如:

     xrdb -load $HOME/.Xresources
     xsetroot -solid gray &
     xclock -g 50x50-0+0 -bw 0 &
     xload -g 50x50-50+0 -bw 0 &
     xterm -g 80x24+0+0 &
     xterm -g 80x24+0-0 &
     twm

正如自定义 X 会话, 第 9.4.5.1 节中所描述的,当使用 startx 启动 X 时,该脚本将重载 Xsession 所做的所有常规操作,通常用 ~/.xsession 来代替,而该方法仅作为最后的手段使用。参阅 xsetroot(1x)xset(1x)X 资源, 第 9.4.10 节


9.4.5 X 会话

X 会话(X 服务器 + X 客户端)可使用下列方法启动:

想使用控制台参阅“我不想直接启动到 X!”, 第 8.1.4 节


9.4.5.1 自定义 X 会话

默认的启动脚本 /etc/X11/Xsession/etc/X11/Xsession.d/50xfree86-common_determine-startup/etc/X11/Xsession.d/99xfree86-common_start 的高效的结合体。

/etc/X11/Xsession 的执行会受 /etc/X11/Xsession.options 的影响,从本质上讲,它使用 exec 命令执行系统中按下面的次序排序,排在第一位的程序:

  • ~/.xsession or ~/.Xsession,如果它被定义。

  • /usr/bin/x-session-manager,如果它被定义。

  • /usr/bin/x-window-manager,如果它被定义。

  • /usr/bin/x-terminal-emulator,如果它被定义。

  • Debian 选择系统(Debian alternative system )对这些命令的确切定义进行了描述,参阅Alternative 命令, 第 6.5.3 节。例如:

         # update-alternatives --config x-session-manager
         ... 或
         # update-alternatives --config x-window-manager
    

    如果想定义某 X 窗口管理器为默认窗口管理器,同时保留已安装的 GNOME 和 KDE 会话管理器,可用 http://bugs.debian.org/168347 中第二个错误报告所附的文件替换 /etc/X11/Xsession.d/50xfree86-common_determine-startup 文件(我希望它能早日加到发行版中),然后按下面的方法编辑 /etc/X11/Xsession.options 来禁用 X 会话管理器:

         # /etc/X11/Xsession.options
         #
         # configuration options for /etc/X11/Xsession
         # See Xsession.options(5) for an explanation of the available options.
         # Default enabled
         allow-failsafe
         allow-user-resources
         allow-user-xsession
         use-ssh-agent
         # Default disabled (enable them by uncommenting)
         do-not-use-x-session-manager
         #do-not-use-x-window-manager
    

    如果不想按上述方法修改系统,由于 gnome-sessionkdebase 软件包包含了那些 X 会话管理器。所以删除它们,X 窗口管理器就成了默认窗口管理器了。(废话,还更好的主意吗?)

    对于那些 /etc/X11/Xsession.options 中仅包含一行 allow-user-xsession 的系统,任何定义了 ~/.xsession~/.Xsession 的用户,均可以自定义 /etc/X11/Xsession 的行为。

    ~/.xsession 文件中排在最后的命令,其格式应该为 exec some-window/session-manager,用来启动你喜欢的 X 窗口/会话管理器。

    /usr/share/doc/xfree86-common/examples/xsession.gz 给出了一个不错的 ~/.xsession 脚本样例。

    我使用它来为每个用户设置窗口管理器、屏幕访问和语言支持。参阅针对用户启动 X 会话, 第 9.4.5.2 节X 下获取 root 权限, 第 9.4.12 节多语言的 X 窗口系统范例, 第 9.7.9 节

    如果你希望一些 X 客户端程序能自动启动,参阅 X 客户端, 第 9.4.4 节 的范例并将其写在 ~/.xsession 而不是 ~/.xinitrc

    用户自己添加的 X 资源保存在 ~/.Xresources,而系统级的 X 资源保存于/etc/X11/Xresources/*。参阅 xrdb(1x)

    用户可以在 ~/.xmodmaprc 中自定义键盘布局和鼠标按键布局,参阅 xmodmap(1x)


    9.4.5.2 针对用户启动 X 会话

    遵循自定义 X 会话, 第 9.4.5.1 节中描述的原则,要激活用户特定的 X 会话/窗口管理器,需要安装相应的软件包并在 ~/.xsession 文件末尾添加如下内容(我爱用 blackbox/fluxbox,它简单快捷。):

    参阅 Window Managers for X.


    9.4.5.3 配置 KDE/GNOME

    要配置完整的 KDE 或 GNOME 环境,下列的综合包很有用:

    请使用能操作 Recommends 类软件包的安装工具安装这些软件包,如 dselectaptitude,比起 apt-get 它们能提供更丰富的软件供你选择。

    如果想从控制台登录,必须禁用 X 显示管理器,例如 kdmgdmwdm 这会牵扯到一些关联问题,有关信息参阅“我不想直接启动到 X!”, 第 8.1.4 节

    如果想将系统的默认环境由 KDE 换成 GNOME,请用 Alternative 命令, 第 6.5.3 节中所述的方法配置 x-session-manager


    9.4.6 在 TCP/IP 中使用 X

    由于不加密的远程 TCP/IP 套接字连接易受到窃听攻击,新版的 Debian 安装 X 时默认是禁用 TCP/IP 套接字口的。建议使用 ssh 进行远程 X 连接(参阅联接远程的 X 服务器 – ssh, 第 9.4.8 节)。

    通常不推荐使用本节所述的方法,除非系统处于防火墙之后且所处网络中全是绝对可信任的用户。使用下面的命令检查当前X服务器的 TCP/IP 套接字口的设置:

         # find /etc/X11 -type f -print0 | xargs -0 grep nolisten
         /etc/X11/xinit/xserverrc:exec /usr/bin/X11/X -dpi 100 -nolisten tcp
    

    删除 -nolisten 就可以恢复X服务器对 TCP/IP 的监听。


    9.4.7 联接远程的 X 服务器 – xhost

    xhost 允许通过主机名访问。该方式极不安全。下面的方法将关闭主机验证功能,只要 TCP/IP 套接字连接功能是打开的(参阅在 TCP/IP 中使用 X, 第 9.4.6 节)本机就会接收来自任何地方的连接请求。

         $ xhost +
    

    要重新打开主机验证功能可执行:

         $ xhost -
    

    xhost 无法区分远程主机上不同的用户,而且远程连接的主机名(实际上是地址)也可以是伪造的。

    如果处于一个不可信的网络环境(例如通过 PPP 拔号连接到 Internet),即使在网络中成为主机受到一定标准的限制,也应尽量避免使用该连接方式。参阅 xhost(1x)


    9.4.8 联接远程的 X 服务器 – ssh

    使用 ssh 可以在本地主机和远程应用服务器之间建立一个安全的连接通道。

    该连接方式使得远程 X 客户机上的屏幕输出,看上去就好象是通过本地 UNIX 域套接字的方式连接到服务器的客户机输出。


    9.4.9 X 终端模拟器 – xterm

    学习 xterm 可以去 http://dickey.his.com/xterm/xterm.faq.html


    9.4.10 X 资源

    许多老式的 X 程序,如 xterm,使用 X 资源数据库配置它们的外观。~/.Xresources 文件用于保存用户资源定义。登录后该文件自动合并到默认的 X 资源中。系统范围的缺省配置存储在 /etc/X11/Xresources/* 中,应用程序缺省的配置存储在 /etc/X11/app-defaults/*。使用这些设置作为学习的起点。

    这儿是一些有用的设置,可加到~/.Xresources文件中:

         ! Set the font to a more readable 9x15
         XTerm*font: 9x15
         
         ! Display a scrollbar
         XTerm*scrollBar: true
         
         ! Set the size of the buffer to 1000 lines
         XTerm*saveLines: 1000
         
         ! Large kterm screen
         KTerm*VT100*fontList: -*-fixed-medium-r-normal--24-*,\
          -*-gothic-medium-r-normal--24-*,\
          -*-mincho-medium-r-normal--24-*
    

    要使上述设置立即生效,可用下面的命令将它们合并到数据库:

         xrdb -merge ~/.Xresources
    

    参阅 xrdb(1x)


    9.4.11 X 中键盘和指针按钮的映射

    xmodmap 程序用来编辑和显示键盘修订表和按键映射表的,客户端程序用它们来把按键代码事件(event keycodes)转换成 X 中的 keysyms。

         $ xmodmap -pm 
          ... 显示当前按键修订表
         $ xmodmap -pk | pager
          ... 显示当前按键映射表
         $ xmodmap -e "pointer = 3 2 1" # 设置为惯用左手鼠标
         $ xmodmap ~/.xmodmaprc # 用 ~/.xmodmaprc 中的描述设置键盘
    

    通常从用户的会话中启动脚本,从 ~/.xsession 中执行。

    要获得按键代码(keycode),请在 X 中运行 xev 并按键。要想获得 keysym 的含义,请从宏定义文件 /usr/include/X11/keysymdef.h 中查找。该文件中所有的 #define 声明都用 XK_ 命名,伪装成 keysym 的名字。

    参阅 xmodmap(1x)


    9.4.12 X 下获取 root 权限

    如果运行 GUI 程序时需要 root 权限,请用下面的步骤在用户的 X 服务器上显示程序输出。千万不要直接使用 root 帐号启动 X 服务器以避免承担不必要的安全风险。

    以普通用户身份启动 X 服务器,开一个 xterm 控制台窗口,执行:

         $ XAUTHORITY=$HOME/.Xauthority
         $ export XAUTHORITY
         $ su root
         Password:*****
         # printtool &
    

    非 root 用户以 su 方式运用该技巧时,要确保该非 root 用户所在用户组对 ~/.Xauthority 文件有读权限。

    想要系统自动执行该命令序列,请在用户帐号下创建 ~/.xsession 文件,编辑文件如下:

         # This makes X work when I su to the root account.
         if [ -z "$XAUTHORITY" ]; then
                 XAUTHORITY=$HOME/.Xauthority
                 export XAUTHORITY
         fi
         unset XSTARTUP
         # If a particular window/session manager is desired, uncomment following
         # and edit it to fit your needs.
         #XSTARTUP=/usr/bin/blackbox
         # This starts x-window/session-manager program
         if [ -z "$XSTARTUP" ]; then
           if [ -x /usr/bin/x-session-manager ]; then
             XSTARTUP=x-session-manager
           elif [ -x /usr/bin/x-window-manager ]; then
             XSTARTUP=x-window-manager
           elif [ -x /usr/bin/x-terminal-emulator ]; then
             XSTARTUP=x-terminal-emulator
           fi
         fi
         # execute auto selected X window/session manager
         exec $XSTARTUP
    

    接着在用户的 xterm 窗口中运行 su(不是su -)。现在从该 xterm 启动的 GUI 程序就可以在该用户的 X window 环境中显示以 root 权限运行的程序输出。只要执行了默认的 /etc/X11/Xsession,就可以使用该方法。如果用户使用 ~/.xinitrc~/.xsession 来配置自定义环境,需要将上面提到的环境变量 XAUTHORITY 加到这些脚本中去。

    还有一种方法,sudo 可用于自动执行上面的命令序列:

         $ sudo xterm
         ... 或
         $ sudo -H -s
    

    这时 /root/.bashrc 中应包含:

         if [ $SUDO_USER ]; then
             sudo -H -u $SUDO_USER xauth extract - $DISPLAY | xauth merge -
         fi
    

    即使对那些 home 目录位于 NFS 上的用户,它也能正常工作。因为 root 不用读 .Xauthority 文件。

    还有一些用于该目的的专用软件包:kdesugksugksudognome-sudoxsu。其它方法也可以达到同样的目的:如在 /root/.Xauthority 和相应用户文件之间创建一个符号链接;使用 sux 脚本;或对 root 初始化脚本执行“xauth merge ~USER_RUNNING_X/.Xauthority”。

    更多方法参阅 debian-devel mailing list


    9.4.13 X 下的 TrueType 字体

    XFree86-4 中标准的 xfs 能完美地驱动 TrueType 字体,如果你使用的是 XFree86-3,就得安装第三方字体服务器如 xfs-xtt

    不论什么应用程序,如果要使用 TrueType 字体,就要与 libXft 或 libfreetype 建立链接(如果你使用的是已编译好的 .deb 包,就不用在这方面操心了)。

    首先进行字体支持的基础设置:

    然后安装 DFSG 字体软件包:

    由于供自由使用的字体有时很有限,Debian 用户也可以安装或共享某些商业 TrueType 字体。为了简化安装这类字体的工序,于是产生了一些方便的软件包:

    请慎重选择 TT 字体,以免自由系统受到不自由字体的污染。

    所有这些 Debian 字体软件包不用设置就能工作,并且对于使用“core”字体系统的 X 程序来说,它都是可用的。包括 Xterm、Emacs 和其他一些非 KDE 和 gnome 的程序。

    现在运行 xfontsel,在 fndry 菜单中选中任何一个 TrueType 字体,你可以在 “fmly”菜单中看到很多项目。

    对于 KDE2.2 和 GNOME1.4(搭配 libgdkxft0 使 GTK 1.2 能对字体进行反锯齿的渲染),同样的你需要配置 Xft1。Xft1 非常的过时了,基本上只有 GNOME1.4 和 KDE2.2 在使用。编辑 /etc/X11/XftConfig 文件,在其他“dir”之前加入下面这一行东西。

             dir "/var/lib/defoma/x-ttcidfont-conf.d/dirs/TrueType"
    

    [42]

    对于 GNOME2 和 KDE3(Sarge 之后的版本),你需要设置 fontconfig,Xft2 用它来查找字体。 [43] 你不必为此再安装其他额外的软件包,因为所有用到 fontconfig 的软件包都会依赖与它的。

    首先,查看 /etc/fonts/fonts.conf。里面应该有如下的一行内容。如果没有,就打开 /etc/fonts/local.conf,在 <fontconfig> 行后面添加这些内容。

             <dir>/var/lib/defoma/x-ttcidfont-conf.d/dirs/TrueType</dir>
    

    Fontconfig 应该能直接获得字体信息,“fc-list”能列出你的新字体。另外一个 fontconfig 的特色是,你能把字体放在 ~/.fonts/ 中,而所有字体可设置的程序都能立即访问它们。

    如果你在 X 中手动安装了新的一个 TrueTyep 字体,而没有使用 Debian的软件包,运行

         # xset fp rehash
    

    让 XFree86 重新检查目录下面的内容并找到新的字体。


    9.4.14 X 中的网页浏览器

    Sarge 发行版中包含了下面这些拥有图形处理能力的网页浏览器:

    testingunstable 中,将会遇到 mozilla 变体浏览器的版本匹配问题,因为这些变体浏览器需要匹配共享库的版本。

    安装诸如 mozilla 浏览器的插件,可手工将“*.so”装到 plug-in 目录下,然后重启浏览器。

    Plug-in 资源:


    9.4.15 X 图形界面下的邮件客户端(MUAs)

    在 Sarge 发行版下,有几个客户端软件包有图形显示界面:


    9.5 SSH

    SSH(Secure SHell)是在 Internet 中建立连接的安全途径。OpenSSH 是一个自由的 SSH 实现软件,它包含 在Debian 的 ssh 软件包中。


    9.5.1 SSH 基础

    首次安装 OpenSSH 服务器和客户机。

         # apt-get update && apt-get install ssh
    

    要运行 OpenSSH 服务器,还得屏蔽掉 /etc/ssh/sshd_not_to_be_run

    SSH 有两个验证协议:

    如果系统正迁移到 Woody 或使用非 Debian 系统,请注意版本差异。

    更多信息请参阅 /usr/share/doc/ssh/README.Debian.gzssh(1)sshd(8)ssh-agent(1)ssh-keygen(1)

    下面是一些关键的配置文件:

    下面的操作将从客户机建立一个 ssh 连接。

         $ ssh username@hostname.domain.ext
         $ ssh -1 username@hostname.domain.ext # Force SSH version 1
         $ ssh -1 -o RSAAuthentication=no -l username foo.host
             # force password on SSH1
         $ ssh -o PreferredAuthentications=password -l username foo.host
             # force password on SSH2
    

    在用户眼里,ssh 的功能相当于一个更灵巧更安全的 telnet(will not bomb with ^])。


    9.5.2 发送端口 SMTP/POP3 微调

    在本地机器上执行下面的命令,可以建立一个连接本地主机 4025 端口和远程服务器 25 端口的管道,以及一个连接本地主机 4110 端口和远程服务器 110 端口的 ssh 连接。

         # ssh -q -L 4025:remote-server:25 4110:remote-server:110 \
                    username@remote-server
    

    在 Internet 上可使用该方法建立与 SMTP/POP3 服务器的安全连接。记得在远程主机的 /etc/ssh/sshd_config 中设置 AllowTcpForwarding 值为 yes


    9.5.3 用更少的密码建立连接 – RSA

    使用 RSAAuthentication(SSH1协议)或 PubkeyAuthentication(SSH2协议)可不必记住每个远程系统的连接密码。

    在远程系统上,在 /etc/ssh/sshd_config 中分别设置“RSAAuthentication yes”或“PubkeyAuthentication yes”。

    然后在本地生成验证密匙,在远程系统上安装公共密钥:

         $ ssh-keygen          # RSAAuthentication: RSA1 key for SSH1
         $ cat .ssh/identity.pub | ssh user1@remote \
                 "cat - >>.ssh/authorized_keys"
         ...
         $ ssh-keygen -t rsa   # PubkeyAuthentication: RSA key for SSH2
         $ cat .ssh/id_rsa.pub | ssh user1@remote \
                 "cat - >>.ssh/authorized_keys"
         ...
         $ ssh-keygen -t dsa   # PubkeyAuthentication: DSA key for SSH2
         $ cat .ssh/id_dsa.pub | ssh user1@remote \
                 "cat - >>.ssh/authorized_keys"
    

    今后可用“ssh-keygen -p”来改密码。最后记得检查一下设置,可做个连接测试,如遇问题,执行“ssh -v”。

    你可以通过在 authorized_keys 里添加选项来限制主机及运行指定的命令。详情参阅 sshd(8)

    注意 SSH2 有 HostbasedAuthentication,要使它工作,必须同时在服务器端的 /etc/ssh/sshd_config 文件中和客户机端的 /etc/ssh/ssh_config$HOME/.ssh/config 文件中设置 HostbasedAuthenticationyes


    9.5.4 处理外来的 SSH 客户端

    下面是其它一些非类 Unix 平台的免费 SSH 客户端。

    Windows

    puTTY (GPL)

    Windows (cygwin)

    SSH in cygwin (GPL)

    Macintosh Classic

    macSSH (GPL) [注意 Mac OS X 包含 OpenSSH;在终端应用程序中使用 ssh]

    参阅 SourceForge.net的站点文档,“6. CVS Instructions”。


    9.5.5 设置 ssh-agent

    使用 passphrase 来保护 SSH 认证密匙会更安全,如果还没有设置,可使用 ssh-keygen -p 来设置。

    用更少的密码建立连接 – RSA, 第 9.5.3 节中描述了如何使用一个基于密码的远程主机连接,将公共密钥(例如~/.ssh/id_rsa.pub)放入远程主机的 ~/.ssh/authorized_keys

         $ ssh-agent bash # 或者用 zsh/tcsh/pdksh 这些程序代替。
         $ ssh-add ~/.ssh/id_rsa
         Enter passphrase for /home/osamu/.ssh/id_rsa:
         Identity added: /home/osamu/.ssh/id_rsa (/home/osamu/.ssh/id_rsa)
         $ scp foo user@remote.host:foo
          ... no passphrase needed from here on :-)
         $^D
          ... terminating ssh-agent session
    

    对于 X 服务器,普通 Debian 启动脚本会将 ssh-agent 作为一个父进程执行。所以只需执行一次 ssh-add 即可。

    详情参阅 ssh-agent(1)ssh-add(1)


    9.5.6 SSH 问题处理

    如果遇到问题,检查一下配置文件的访问权限,并使用“-v”选项运行 ssh

    如果是 root 身份,遇到连接防火墙出错的情况,可使用“-P”选项;它规定 ssh 使用服务器的1 – 1023 以外的端口。

    如果与远程站点的 ssh 连接突然停止工作,很可能是因为系统管理员修补系统造成的,host_key 在系统维护过程中被更改。在查明了事情真象并确定并不是有人试图冒充远程主机非法入侵之后,从本地机器的 $HOME/.ssh/known_hosts 中删除 host_key 项目就可以恢复连接了。


    9.6 邮件

    邮件系统配置分为三类:


    9.6.1 邮件传输代理(MTAs)

    对于全功能的 MTA 来说,请在 Woody 中使用 exim,在 Sarge 中使用 exim4。 [44] 参考资料:

    如果你对安全性有高要求的话,唯一一个可替代的 MTA 是 postfix。Debian 软件包还提供了 sendmailqmail,但并不推荐你使用它们。

    有时并不需要 MTA 的所有功能,如在一个卫星系统中的一台笔记本电脑,可以考虑下列几种轻量级软件包:

    此刻,我发现 exim 对于我作为个人工作站的笔记本电脑再合适不过了。

    如果要安装这些软件包必须先删除 exim,它们有冲突:

         # dpkg -P --force-depends exim
         # apt-get install nullmailer         # or ssmtp
    

    9.6.1.1 Smarthost

    如果你在一台通过用户级别的服务连接的机器上运行 exim4exim,请确保在发信的时候通过 ISP 或者其他人提供的 smarthost。 [45] 这样做有许多好处:

    唯一可能的坏处是:


    9.6.1.2 Exim 的基础设置

    为了将 exim 作为 MTA,可按下列步骤进行配置:

         /etc/exim/exim.conf     使用“eximconfig”创建及编辑(exim)
         /etc/exim4/*		使用“dpkg-reconfigure exim4-config”创建及编辑(exim4)
         /etc/inetd.conf         注释掉 smtp,将 exim 作为 daemon 运行
         /etc/email-addresses    添加伪来源地址列表
    

    检查邮件过滤器可使用 exim4exim 搭配 -brw, -bf, -bF, -bV, ... 等等


    9.6.1.3 在 Exim 下设置一个收集不存在的邮件地址的容器

    /etc/exim/exim.conf 文件(Woody 或后继版本)的 DIRECTORS 部分的末尾(localuser:director 之后)添加一个 catch-all director,将所有前面的 director 无法解析的地址收集到一起(per Miquel van Smoorenburg):

         catchall:
           driver = smartuser
             new_address = webmaster@mydomain.com
    

    如果要为每个虚拟域指定更精细的处理方法或其它什么的,可在/etc/exim/exim.conf末尾添加(我没仔细测试过):

         *@yourdomain.com ${lookup{$1}lsearch*{/etc/email-addresses} \
                 {$value}fail} T
    

    接着在/etc/email-addresses中加上一行“*”。


    9.6.1.4 在 Exim 下设置寄出邮件的地址重写

    可用 exim 为发出的邮件指定特定的“From:”信头,在 /etc/exim/exim.conf 文件的末尾编辑:

         *@host1.something.dyndns.org \
           "${if eq {${lookup{$1}lsearch{/etc/passwd}{1}{0}}} {1}  \
            {$0}{$1@something.dyndns.org}}"  frFs
    

    该语句将作用于所有符合*@host1.something.dyndns.org的邮件。

    1. /etc/password 中搜索,以确定 local part($1)是否为本地用户。

    1. 如果是本地用户,它将用第一个域($0)中的内容重写地址

    1. 如果不是本地用户,重写域部分。


    9.6.1.5 在 Exim 中设置 SMTP 认证

    某些 SMTP 服务如 yahoo.com 需要 SMTP 认证。可用下面的方法配置 /etc/exim/exim.conf

         remote_smtp:
           driver = smtp
           authenticate_hosts = smtp.mail.yahoo.com
         ...
         
         smarthost:
           driver = domainlist
           transport = remote_smtp
           route_list = "* smtp.mail.yahoo.com bydns_a"
         ...
         
         plain:
           driver = plaintext
           public_name = PLAIN
           client_send = "^cmatheson3^this_is_my_password"
    

    别忘了最后一行的双引号。


    9.6.2 收取邮件 – Fetchmail

    fetchmail 以 daemon 方式运行,用 ISP 提供的 POP3 帐号将邮件收到本地邮件系统。配置:

         /etc/init.d/fetchmail   
         /etc/rc?.d/???fetchmail run update-rc.d fetchmail default priority 30
         /etc/fetchmailrc        configuration file (chown 600, owned by fetchmail)
    

    在 Potato 中,有关如何在 init.d 脚本中配置 fetchmail 以 daemon 方式运行的信息,十分混乱,Woody 解决了这个问题。参阅 example scripts/etc/init.d/fetchmail/etc/fetchmailrc 样例文件。

    如果你的邮件信头被 ISP 的邮件工具以^M污染,可在 $HOME/.fetchmailrc 中添加“stripcr”选项:

         options fetchall no keep stripcr
    

    9.6.3 处理邮件 – Procmail

    procmail是一个本地邮件分发过滤程序。使用时,需要为每个使用它的用户创建$HOME/.procmailrc,样例:_procmailrc


    9.6.4 用 crm114 处理垃圾邮件

    crm114 软件包提供了 /usr/share/crm114/mailfilter.crm 脚本。该脚本是用 CRM114 撰写的,提供了非常有效的垃圾信件过滤器,并可以通过喂食垃圾邮件来调节它的处理能力。

    CRM114 是一种专门为写过滤器设计的小语言,可以把它当做拥有超能力的 grep 版本。参阅 crm(1)


    9.6.5 阅读邮件 – Mutt

    mutt 做用户邮件代理(MUA)与 vim 结合使用。使用 ~/.muttrc 进行自定义;例如:

         # use visual mode and "gq" to reformat quotes
         set editor="vim -c 'set tw=72 et ft=mail'"
         #
         # header weeding taken from the manual (Sven's Draconian header weeding)
         #
         ignore *
         unignore from: date subject to cc
         unignore user-agent x-mailer
         hdr_order from subject to cc date user-agent x-mailer
         auto_view application/msword
         ....
    

    /etc/mailcap$HOME/.mailcap 中添加下列内容,就能显示 HTML 邮件和内嵌的 MS Word 附件:

         text/html; lynx -force_html %s; needsterminal;
         application/msword; /usr/bin/antiword '%s'; copiousoutput;
         description="Microsoft Word Text"; nametemplate=%s.doc
    

    9.7 本地化(localization)

    Debian 是国际化的操作系统,它所支持的语言和地区惯例的数目正在不断增加。接下来的部分列出了当前 Debian 对各种差异形式的支持,接着再讨论本地化,该过程负责定制你的工作环境,根据你所选的语言确定当前系统的输入输出方式,并按照你所在地区的惯例转化日期、数字、货币格式以及系统中其它相关方面。


    9.7.1 本地化基础

    定制系统的本地化和国家语言支持包括以下几个方面。


    9.7.1.1 键盘本地化

    Debian 发布版中包含了二十多种键盘布局方案。在 Woody 中重新配置键盘可使用:


    9.7.1.2 资料文件本地化

    绝大多数 Debian 软件包都能使用 non-US-ASCII 字符,它们通过 glibc 中的 locale 技术,用 LC_CTYPE 环境变量来操作这些字符。


    9.7.1.3 显示本地化

    X 可以显示包括 UTF-8 在内的许多编码并支持所有的字体。列表中包含了所有的 8-bit 字体和 16-bit 字体诸如中文、日文或韩文。其他 X 输入法, 第 9.7.10 节 机制支持多字节输入法。参阅多语言的 X 窗口系统范例, 第 9.7.9 节支持 UTF-8 的 X 终端机, 第 9.7.12 节

    kon2 软件包可实现在 (S)VGA 图形化控制台中显示日文 EUC 编码。另一个替代品是 jfbterm,它也使用 FB 控制台。在控制台环境里,必须由应用程序来提供对日文输入的支持。所以要为 Emacs 加装 egg 软件包,可使用日文化的 jvim 软件包作为 Vim 环境。

    安装非 Unicode 字体到 X 就能在 X 下显示任何编码的文件。所以不用太担心字体的编码问题。


    9.7.1.4 信息和文档的本地化

    许多在 Debian 系统中显示的文本信息和文档被翻译成了各种译本,如出错信息、标准程序输出、菜单以及帮助页面。当前 Debian 支持德语、西班牙语、芬兰语、法语、匈牙利语、意大利语、日语、韩语、波兰语、葡萄牙语、汉语以及俄语帮助页面,可通过安装 manpages-LANG 软件包实现这些支持(此处 LANG 代表双位的 ISO 国家代码。使用 apt-cache search manpages-|less 获得可用的 Unix 帮助页面列表。)

    要访问 NLS 帮助页面,用户必须将环境变量 LC_MESSAGES 设置成相应的字串。例如,要访问意大利语的帮助页面,需要将 LC_MESSAGES 设置成 it,这时 man程序会在/usr/share/man/it/ 目录下搜索帮助页面。


    9.7.2 Locales

    Debian 支持 locale 技术。locale 机制允许程序按照该地区惯例来提供输出和其它特殊功能如字符集、日期时间显示格式,货币符号等等。该机制使用环境变量来确定其相关的行为。例如,假设你同时在系统上安装了美式英语和法语 locales,许多程序的出错信息都以双语显示:

         $ LANG="en_US" cat foo
         cat: foo: No such file or directory
         $ LANG="de_DE" cat foo
         cat: foo: Datei oder Verzeichnis nicht gefunden
    

    Glibc 以函数库的形式向程序提供该功能的支持。参阅 locale(7)


    9.7.3 Locales 简介

    完整的 locale 描述包括三个部分:xx_YY.ZZZZ

    关于语言代码和国家代码,请参阅 info gettext 中的相关描述。

    请注意,为了完成跨平台的兼容性,这个编码集部分可能被“内部标准化”。移除了所有 -,把所有字符都转化成小写的。典型的编码集:

    询问基本编码系统术语的意思:

    ISO-8859-?、EUC、ISO-10646-1、UCS-2、UCS-4 和 UTF-8 对于 7 位的字符使用和 ASCII 相同的编码。 EUC or Shift-JIS uses high-bit characters (0x80-0xff) to indicate that part of encoding is 16 bit. UTF-8 also uses high-bit characters (0x80-0xff) to indicate non 7 bit character sequence bytes and this is the most sane encoding system to handle non-ASCII characters.

    Please note the byte order difference of Unicode implementation:

    See 使用 recode 转化文本文件, 第 8.6.12 节 for conversion between various character sets. For more see Introduction to i18n.


    9.7.4 激活 locale 支持

    Debian 并在系统中编译所有可用的 locales,检查 /usr/lib/locale 确定哪个 locales(除了默认的“C”)已在系统上编译安装。如果所需的 locale 并不在其中,有两个解决办法:


    9.7.5 激活特定 locale

    相关的环境变量按如下次序将特定 locale 值赋给程序:

    1. LANGUAGE:该环境变量由一个用冒号分隔、以优先级排序的地区名称列表组成。仅当 POSIX 地区值与“C”地区值相异时才使用到它[在 Woody 中;在 Potato 版本中通常其优先级高于 POSIX locale]。(GNU 扩展名)

    1. LC_ALL:如果为非空值,其值将作用于所有 locale 项目。(POSIX.1)通常为“”(空值)。

    1. LC_*:如果为非空值,其值将作用于相应的 locale 项目。(POSIX.1)通常为“C”。

      LC_*变量有:

    1. LANG:如果为非空值且 LC_ALL 也没有定义,则该值作用于所有没有定义的 LC_*地区项目。(POSIX.1)通常为“C”。

    注意,有些应用程序(例如Netscape 4)忽略LC_*设置。

    locale 程序可显示当前激活的地区设置和可用的 locale;参阅 locale(1)。(注意:locale -a 将列出系统已知的所有的 locales;这并代表它们都已在系统中编译了!参阅激活 locale 支持, 第 9.7.4 节。)


    9.7.6 ISO 8601日期格式

    名为 en_DK “丹麦英语的” locale 提供了对国际标准日期格式 yyyy-mm-dd(ISO 8601日期格式)的支持(听起来有点搞笑:-))。它仅工作于 ls 的控制台屏幕。


    9.7.7 US(ISO-8859-1)例子

    将下列语句添加到 ~/.bash_profile

         LC_CTYPE=en_US.ISO-8859-1
         export LC_CTYPE
    

    9.7.8 带 Euro 符号的 France(ISO-8859-15)的例子

    将下列语句添加到 ~/.bash_profile

         LANG=fr_FR@euro
         export LANG
         LC_CTYPE=fr_FR@euro
         export LC_CTYPE
    

    键盘本地化, 第 9.7.1.1 节中描述的方法,将键盘设置成 French "AZERTY"。安装 manpages-fr 包添加法语帮助页面。US 中的 Right-Alt 键在 Europe 中称为Alt-Gr,它与其它键组成的组合键可用于输出大量特殊字符,例如 Alt-Gr+E 可以输出欧元符号。

    可使用类似的方法配置绝大多数西欧语言环境。

    参阅 Debian Euro HOWTO 了解有关对新欧洲货币方面的支持,有关对法语环境的支持请参阅 Utiliser et configurer Debian pour le français


    9.7.9 多语言的 X 窗口系统范例

    让我们来创建一个多语言 X 窗口系统,能在不同的控制台中搭配 EUC、UTF-8 和 ISO-8859-1 来同时支持日语、英语、德语和法语。

    我会向你展示用 Debian menu 系统进行的自定义设置。Debian menu 系统的详细信息参阅 /usr/share/doc/menu/html/index.html。在例子中,我也创建了 mozilla 网络浏览器的快捷键。 [46]

    关于其他 CJK 语言的支持,参阅下面的章节和 SuSE pages for CJK


    9.7.10 其他 X 输入法

    还有许多其他可用的 X 输入法支援软件包:

         Language   LC_CTYPE     XIM server XMODIFIERS              Start key
         Japanese   ja_JP*       kinput2    "@im=kinput2"           Shift-Space
         Korean     ko_KR*       ami        "@im=Ami"               Shift-Space
         Chinese(T) zh_TW.Big5   xcin       "@im=xcin-zh_TW.big5"   Ctrl-Space
         Chinese(S) zh_CN.GB2312 xcin       "@im=xcin-zh_CN.GB2312" Ctrl-Space
    

    日语输入法 kinput2 由软件包 kinput2-canna-wnnkinput2-cannakinput2-wnn 提供。输入法还需要例如 cannafreewnn-jserver 这样的字典服务器才能使用。


    9.7.11 X 终端模拟机

    还有许多 X 终端机支持 8-bit 编码,安装相应的字体就能正常显示:

    在 UTF-8 编码的情况下,xterm 提供多编码的 X 终端的支持(支持 UTF-8 的 X 终端机, 第 9.7.12 节)。其他传统编码的支持还在开发中(2003 年时)。下面的软件包都提供了传统编码的支持:

    对于 kterm(和其他终端),你可以通过在菜单上按下 Ctrl+鼠标中键来激活 XIM。


    9.7.12 支持 UTF-8 的 X 终端机

    XFree86 4.x 的软件包 xterm 中的 X 终端机 uxterm 提供了对 UTF-8 的支持。它支持所有语言。它是 xterm(1) 程序的一个 wrapper,使得启动的 xterm 使用了“UXTerm”的 X 资源集。

    例如,为了提供英文、俄文、日文、中文和韩文大字体的完美显示,需要在安装相应的字体后在 ~/.Xresources 中添加下列内容:

         ! set large font
         UXTerm*font: -misc-fixed-medium-r-normal-*-18-120-100-100-c-90-iso10646-1
         ! Use XIM for Japanese
         *inputMethod: kinput2
    

    然后按照 X 资源, 第 9.4.10 节 中描述的,运行 xrdb -merge ~/.Xresources 来更新 X 资源。

    虽然大部分的终端程序,例如 vimmuttemacs 都已经能兼容 UTF-8 了(Woody-Sarge)。但是还有不少 mc 这样的程序不兼容 UTF-8,只支持 8-bit 编码。如果你编辑未知或者混合编码文件的 7-bit ASCII 部分,使用 locale 不敏感的支持 8-bit 的编辑器比较安全。

    参阅 The Unicode HOWTO


    9.7.13 FB 控制台下 UTF-8 的例子

    debian-installerbterm 提供了在 FB 控制台对 UTF-8 的支持。


    9.7.14 超越 locales

    当你第一次在系统上安装“国家语言环境”(national language environment)时,请注意使用 taskselaptitude 查看一下,在选择相关语言环境任务项时都有哪些软件包被选上了,这些选择信息非常有用特别是进行多语言设置时。如果遇到某些关联包与运行良好的系统上的某些软件发生冲突,就不要安装那些引起冲突的包。由于新装的软件比原来的软件具有更高的优先级,所以必须用 update-alternative 结合有关命令让系统恢复到原来状态。

    大部分较新的使用 glibc2.2 的程序都已支持国际化了。所以不必再为诸如基于 VIM 的 jvim 等程序指定 loclae,因为 X 下的 vim 6.0 版已提供了该功能。事实上,比起另一个版本它显得有点粗糙,jvim 有个版本直接将日文输入法(canna)支持编译进去了,而且还集成了大量成熟的日文特性,很值得你期待:-)

    有时为了获得更好的工作环境,仅通过 locale 来配置程序是不够的。language-env 软件包和 set-language-env命令可以大大简化你的工作。

    亦可参阅有关国际化的文档Introduction to i18n,虽然其目标读者为开发人员但对系统管理员也十分有用。


    9.8 多语言化(Multilingualization, m17n)

    language-env 等软件包所实现的本地化(localization), 第 9.7 节是以单一语言的本地化为目标的。这些软件包使用传统的文本编码(encoding)方式。你在这样的环境下不能在文本中混合使用法语和日语,因为它们分别使用 ISO-8859-1 和 EUC-JP 的编码方式,而这两种编码是不兼容的。

    如果你选择在一个可用的 UTF-8 区域设置(locale)下启动 GNOME 或 KDE,你就可以得到一个多语言化的 UTF-8 桌面环境。在这样的环境下,只要你用的软件是符合 UTF-8 标准的,你就可以自由地混合使用英语,汉语,俄语,日语等各种文字。 [50]

    在这样的环境下,最好使用基于 scim 的多语言化输入法。scim 所提供的各种输入法可以一起用 Ctrl-Space 开启或关闭。具体的输入法引擎可以通过点击 SCIM 面板来选择和切换。

    vim offers the multilingualized environment and can handle both UTF-8 and conventionally encoded files (EUC-JP, ISO-8859-1, ...) when it is run under the UTF-8 console such as gnome-teminal. See vim help message with pressing [Esc] and typing :help mbyte.txt.


    [ 上一页 ] [ 目录 ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ] [ 13 ] [ 14 ] [ 15 ] [ A ] [ 下一页 ]


    Debian 参考手册

    CVS, 星期四 一月 18 11:53:48 UTC 2007

    Osamu Aoki osamu#at#debian.org
    译者:
    Hao "Lyoo" Liu iamlyoo#at#163.net
    Ming Hua minghua#at#rice.edu
    肖盛文 atzlinux#at#163.com
    Haifeng Chen optical.dlz#at#gmail.com
    解彦博 xieyanbo#at#gmail.com
    easthero easthero#at#gmail.com
    作者, 第 A.1 节