UbuntuManual:Ubuntu 系统微调
序言 | Ubuntu 基础 | Ubuntu 系统安装提示 | Ubuntu指南 |
发行版升级 | Ubuntu 软件包管理 | Ubuntu下的 Linux 内核 | Ubuntu 小技巧 |
Ubuntu 系统微调 | 网络设置 | 编辑器 | 版本控制系统 |
编程 | GnuPG | Ubuntu 技术支持 | 附录 |
第 9 章 - Ubuntu系统微调
本章讲述了基本的基于命令行界面的系统配置方法。在学习本章前,你需要先阅读 Ubuntu 系统安装提示, 第 3 章.
如是你很关心安全方面的信息,你应该阅读 Securing Debian Manual,它在 harden-doc 软件包中。
系统初始化
Ubuntu 使用 System V 的 init 脚本系统。参阅 init程序, 第 2.4.1 节的介绍。
自定义 init 脚本
最简单的控制 init 脚本的方法是改变 /etc/default 目录下,与 init 脚本同名的文件里的环境变量设置。 例如,/etc/default/hotplug 可以控制 /etc/init.d/hotplug 的行为。文件 /etc/default/rcS 可以用来定制 motd、sulogin 等为默认启动。
如果你不能通过设置这些变量来得到你所需要的行为,你可以去修改 init 脚本:它们都是配置文件。
自定义系统日志
可通过 /etc/syslog.conf 配置系统日志记录方式。如果想为日志文件上色可安装 colorize 软件包。参阅 syslogd(8) 和 syslog.conf(5)。
硬件存取优化
有一部分硬件优化的配置工作 Ubuntu 留给了系统管理员。
- hdparm
- 硬盘存取优化。效果显著。
- 危险。务必先阅读 hdparm(8)。
- hdparm -tT /dev/hda 测试硬盘存取速度。
- hdparm -q -c3 -d1 -u1 -m16 /dev/hda 加速新型 IDE 系统。(有一定风险。)
- setcd
- 压缩磁盘存取优化。
- setcd -x 2 减速至 2x speed。
- 参阅 setcd(1)。
- setserial
- 串行接口管理工具集。
- scsitools
- SCSI 硬件管理工具集。
- memtest86
- 内存硬件管理工具集。
- hwtools
- 低级硬件管理工具集。
- irqtune:修改设备的 IRQ 优先级,使那些需要高优先级和快速服务的硬件(例如,串行接口、调制解调器)获得它所要的资源。对串口/调制解调器加速后获得原来 3 倍的吞吐量。
- scanport:扫描 I/O 空间的 0x100 至 0x3ff 地址段,查找已安装的 ISA 设备。
- inb:一个小巧的黑客工具,用来阅读 I/O 端口信息并将其值转换成十六进制和二进制。
- 低级硬件管理工具集。
- schedutils
- Linux 日程安排工具包。
- 包括 taskset、irqset、lsrt 和 rt。
- 再加上 nice 和 renice(不包括在工具包内),就可对进程的日程安排进行全面的管理。
使用 noatime 选项挂载文件系统可有效提高文件的读取速度。参阅 fstab(5) 和 mount(8)。
通过 proc 文件系统,Linux 内核可直接调节某些硬件参数。参阅 通过 proc 文件系统调整内核, 第 7.3 节。
Ubuntu 中有许多专门的硬件配置工具包。其中有不少是针对笔记本电脑的。这儿有一些有趣的软件包:
- tpconfig - 一个配置触摸屏设备的程序
- apmd - 高级电源管理(APM)工具
- acpi - 显示 ACPI 设备信息
- acpid - ACPI 使用工具
- lphdisk - 识别 Phoenix NoteBIOS 下的隐藏分区。
- sleepd - 笔记本电脑处于非工作状态时进入休眠
- noflushd - 让空闲硬盘进入减速状态
- big-cursor - X 下的巨型鼠标指针
- acme - 激活笔记本电脑上的“多媒体按钮”
- tpctl - IBM ThinkPad 硬件配置工具
- mwavem - Mwave/ACP modem 支持
- toshset - 访问大部分 Toshiba笔记本电脑的硬件接口
- toshutils - Toshiba 笔记本电脑工具集
- sjog - 激活 Sony Vaio 笔记本电脑上“Jog Dial”功能的程序
- spicctrl - Sony Vaio 控制器程序可增亮 LCD 背光
ACPI 是一种比 APM 更新的电源管理系统。
某些软件包需要专门的内核模块。它们已经包含在许多最新的内核源码中。如果遇此问题,则需要手动打上最新的内核补丁。
访问限制(Restricting access)
用 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
该方法亦可用于 xdm、gdm,实现无密码 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' Guide 和 The Linux-PAM Module Writers' Guide。
“为什么 GNU su 命令不支持 wheel group”
这是 Richard M. Stallman 的一句名言,位于旧版 info su 页面末尾。别担心:在 Ubuntu 中,当前版本的 su 使用 PAM,因此你可以用 /etc/pam.d/su 下的 pam_wheel.so 来限制任何用户组使用 su 的能力。下面的操作将在 Ubuntu 系统中赋予 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
各标准用户组的目的
一些有趣的用户组:
- 如果 pam_wheel.so 不带任何 group== 参数,root group 就是 su默认的 wheel group。
- adm group 可以阅读日志文件。
- cdrom group 可在本地赋予一组用户访问 CD-ROM 驱动器的权限。
- floppy group 可在本地赋予一组用户访问软盘驱动器的权限。
- audio group 可在本地赋予一组用户访问声音设备的权限。
- src group 拥有源代码以及 /usr/src 目录下的文件。它可以在本地赋予某个用户管理系统源代码的权限。
- 对于管理桌面或低级别的系统管理员,可设置他们为 staff 成员,该类成员可以在 /usr/local 下工作并且可以在 /home 下创建目录。
完整列表参阅 Securing Debian Manual 的“FAQ”章节,亦见于 Woody 中的 harden-doc 软件包。新的 base-passwd (>3.4.6)软件包亦包含了权威列表:/usr/share/doc/base-passwd/users-and-groups.html。
更安全地工作 – sudo
使用 sudo 最主要的目的是保护自己少做蠢事,我认为使用系统时使用 sudo 比总是使用 root 帐号更好。
Ubuntu 系统默认使用 sudo,来工作,你建立的第一个帐户将自动加入到 admin 组, admin 组的成员拥有 sudo 的权限。
安装 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 软件包。
服务的访问限制
对于 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 进行附加的检查,然后再运行相应的服务程序。
如果新版的 Ubuntu 系统进行远程访问时出现问题,可以在 /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。
集中式验证 – LDAP
使用轻形目录访问控制协议(LDAP) 参阅:
- OpenLDAP
- OpenLDAP 管理员指南在软将包 openldap-guide 中
- LDP: LDAP Linux HOWTO
- LDP: LDAP Implementation HOWTO
- OpenLDAP, extensive use reports
- Open LDAP with Courier IMAP and Postfix
刻录机
ATAPI/IDE 接口的刻录机是时下非常流行的配件,它是极好的系统备份工具,特别是对于那些单个文件容量一般 < 640 MB的家庭用户。更多权威的信息,请参阅 LDP CD-Writing-HOWTO。
概述
首先需要说明的是,在向刻录机发送数据过程中,任何数据中断都会对光盘造成无法挽回的损坏。所以应选购缓冲区尽可能大的刻录机。如果资金充裕,就别再考虑 ATAPI/IDE 型的,买台 SCSI 型的没错。如果可以连接 IDE 接口,就使用 PCI 总线(例如,在主板上)而别用 ISA 总线(SB16 声卡使用的就是它)。
当刻录机连接到 IDE,驱动它的通常是 IDE-SCSI 驱动而非旧式的 IDE CD 驱动,所以,需要激活 SCSI 通用驱动。有两种方法激活它,假设系统使用的是较新版本的内核(如 2001 年三月的版本)。
对于 Linux 2.6 的内核,你应该使用 IDE 驱动并直接使用 /dev/hdx 这些设备名称来访问。这种方式你可以使用 DMA。
方法一:modules + lilo
如果使用的是 Ubuntu 原装内核,将下面的内容添加到 /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
方法二:重编译内核
Ubuntu 用 make-kpkg 创建新内核,使用 make-kpkg 时加上新的 --append_to_version 参数可创建多重内核镜像。参阅 Ubuntu下的 Linux 内核, 第 7 章。
make menuconfig 后执行下列步骤:
- bzImage
- 包含 IDE CD driver(不是必须的,但这样更简单)
- 将 ide-scsi 和 sg 编译进内核,或编译成模块
配置步骤
下列步骤可让系统在启动时激活内核对刻录机的支持:
# 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-scsi 和 ide-cd 可能会产生冲突,请试试在 /etc/modutils/aliases 中加上下面的内容,然后运行 update-modules 并重启系统。
pre-install ide-scsi modprobe ide-cd
上述指令指示系统在加载 ide-scsi 前先加载 IDE 驱动。IDE 驱动 ide-cd 接管所有 ATAPI CD-ROM——对指明忽略的设备除外。剩下的设备才由 ide-scsi 来管理。
光盘镜像文件(可引导光盘)
将 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
刻录光盘(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参数可时也要做一些调整。
制作光盘镜像文件
某些 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))
Ubuntu 安装盘镜像
有关 Ubuntu CDs 的最新信息,请浏览 Ubuntu CD site。
如果有较快的 Internet 连接,可考虑用下面的引导方法从网络安装系统:
如果没有较快的 Internet 连接,可考虑从光盘分发免费获取安装光盘。
请不要浪费带宽来下载标准光盘镜像(即使是使用新的 jigdo 方式),除非你是光盘镜像测试员。
有一个很有名的光盘镜像 KNOPPIX - Live Linux Filesystem On CD。该光盘可以启动一个全功能的 Debian 系统而且不需要在硬盘上安装。
将系统备份到 CD-R
想要将重要的配置文件和数据备份到 CD-R,可使用 backup 中的“backup”脚本。亦可参阅 差异备份与数据同步, 第 8.4 节。
将音乐 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与拷贝不同(如没有数据间隙,等...)。
刻录 DVD-R、DVD-RW 和 DVD+RW
刻录 DVD 光盘有两种方式:
- 使用 growisofs 并搭配 mkisofs。
- 按照 /usr/share/doc/cdrecord/README.DVD.Debian 的说明重新编译 cdrecord,并创建加入了 dvd 支持的本地软件包。
X
X 窗口系统由 XFree86 提供。Ubuntu 的最早系统中 X 服务器有两个主要版本:XFree86 Version 3.3 (XF3)和 XFree86 Version 4.x series (XF4),它们都是基于 X.Org 制定的 X11R6 标准。现在全部使用 xorg 。
想了解 X 的基础知识,可参阅 X(7),LDP XWindow-User-HOWTO 和 Remote 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”(应用端)的连接请求:
- xhost 方式
- 主机列表机制(很不安全)。
- 协议不加密(易受到网络监听攻击)
- 尽量不要使用该方式。
- 参阅 联接远程的 X 服务器 – xhost, 第 9.4.7 节 和 xhost(1x)。
- xauth 方式
- MIT magic cookie 机制(不安全但比 xhost 强点)。
- 协议不加密(易受到网络监听攻击)
- 仅用于本地连接,它所需的 CPU 消耗比 ssh -X 低。
- 参阅 X 下获取 root 权限, 第 9.4.12 节 和 xauth(1x)。
- xdm, wdm, gdm, kdm, ... 方式
- MIT magic cookie 机制(和 xauth 一样不安全)
- 参阅 xdm(1x) 和 Xsecurity(7) 获得更多有关 X 显示访问控制的基础知识
- 参阅 wdm(1x)、gdm(8) 和 kdm.options(5) 获得更多信息,当然先得装上它们。
- 参阅 自定义运行级别, 第 2.4.3 节了解如何在不删除 xdm 包的情况下禁用它,使系统启动到控制台。
- ssh -X 方式
- 基于安全 shell 的端口发送机制(安全)。
- 加密协议(在本地使用很耗系统资源)。
- 使用它进行远程连接。
- 参阅 联接远程的 X 服务器 – ssh, 第 9.4.8 节。
除了 ssh,所有的远程连接方式,都需要X服务器开启 TCP/IP 连接。参阅 在 TCP/IP 中使用 X, 第 9.4.6 节。
X 软件包
提供了下列几个(meta)软件包来简化 X 的安装。
x-window-system-core:: 该综合包提供一些基本组件,用于在单一工作站上运行 X Window 系统,其中包括 X 函数库、一个 X 服务器(xserver-xfree86)、一套字体、一组基本的 X 客户端及工具。
x-window-system:: 该综合包提供 XFree86 项目开发的所有 X Window 系统的组件,以及一套经久不衰的辅助程序。(注意,它包含了 x-window-system-core、twm 和 xdm 等组件,故安装了它就不用再安装 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 节。)
X 服务器的硬件侦测
在安装 X 系统之前安装下列软件包,就能在 X 配置阶段实现硬件侦测:
- discover – 硬件识别系统。
- mdetect – 鼠标自动侦测工具。
- read-edid – VESA PnP 监视器硬件信息收集工具。
X 服务器
有关 X 服务器的信息,参阅 xorg(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
配置 X 服务器(版本 4)
(重新)配置 XF4 服务器,
# dpkg-reconfigure --priority=low xserver-xorg
该命令会生成 /etc/X11/xorg.conf 文件并调用 dexconf 脚本来配置X。
配置 X 服务器(版本 3)
(重新)配置 XF3 服务器。例如,针对 ATI mach64,
# dpkg-reconfigure --priority=low xserver-common-v3 # dpkg-reconfigure --priority=low xserver-mach64
该命令会生成 /etc/X11/XF86Config 文件并调用 xf86config-v3 脚本来配置X。
手工配置 X 服务器
往文件 /etc/X11/xorg.conf 中添加用户自定义内容时,不要在配置文件的定义段落中进行编辑:
### 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/xorg.conf 设置,请用 root 运行下列命令:
# cp /etc/X11/xorg.conf /etc/X11/xorg.conf.custom # md5sum /etc/X11/xorg.conf > /var/lib/xfree86/xorg.conf.md5sum # dpkg-reconfigure xserver-xorg
如果想美化字体,请按照 X 下的 TrueType 字体, 第 9.4.13 节中的说明来修改 /etc/X11/xorg。
请同时检查 X 设置中的其他部分。不良的显示器设置甚至比难看的字体更让人头痛,所以请确保你设置的刷新率是你显示器能处理的最高刷新率(85 Hz 很好,75 Hz 还可以,60 Hz 就很糟糕了)。
X 客户端
绝大多数 X 客户端程序都可以用类似下面的命令启动:
client $ xterm -geometry 80x24+30+200 -fn 6x10 -display hostname:0 &
命令行中各参数的含义如下:
- -geometry WIDTHxHEIGHT+XOFF+YOFF:窗口初始尺寸和位置。
- -fn FONTNAME:显示文本的字体。FONTNAME 的赋值有如下几个:
- a14: 普通字体
- a24: 大号字体
- ... (使用 xlsfont 检查可用字体。)
- -display displayname:X 服务器名称。 displayname 的赋值有如下几个:
- hostname:D.S 表示在名为 hostname 的主机的显示器 D 上显示的屏幕 S;工作于该显示器的X服务器监听 TCP 端口 6000+D。
- host/unix:D.S 表示在 host 主机的显示器 D 上显示的屏幕 S;工作于该显示器的 X 服务器监听 UNIX domain socket /tmp/.X11-unix/XD(故只能从主机访问它)。
- :D.S 等价于 host/unix:D.S,其中 host 代表本地主机名。
默认的 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 节。
X 会话
X 会话(X 服务器 + X 客户端)可使用下列方法启动:
- startx:xinit 的脚本化命令(wrapper script command),负责从 Linux 字符型控制台启动 X 服务器和客户端。如果 ~/.xinitrc 文件不存在,/etc/X11/xinit/xinitrc 会调用并执行 /etc/X11/Xsession。
- xdm、gdm、kdm 或 wdm:X 显示管理器守护进程,负责启动 X 服务器和客户端,并管理来自 GUI 屏幕的登录行为。直接执行 /etc/X11/Xsession。
想使用控制台参阅 “我不想直接启动到 X!”, 第 8.1.4 节。
自定义 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,如果它被定义。
Ubuntu 选择系统Ubuntu alternative system )对这些命令的确切定义进行了描述,参阅 Alternative 命令, 第 6.5.3 节。例如:
# update-alternatives --config x-session-manager ... 或 # update-alternatives --config x-window-manager
如果想定义某 X 窗口管理器为默认窗口管理器,同时保留已安装的 GNOME 和 KDE 会话管理器,按下面的方法编辑 /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-session 和 kdebase 软件包包含了那些 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)。
针对用户启动 X 会话
遵循 自定义 X 会话, 第 9.4.5.1 节中描述的原则,要激活用户特定的 X 会话/窗口管理器,需要安装相应的软件包并在 ~/.xsession 文件末尾添加如下内容(我爱用 blackbox/fluxbox,它简单快捷。):
- 默认 X 会话管理器
- 参阅 Alternative 命令, 第 6.5.3 节.
- exec /usr/bin/x-session-manager
- 默认 X 窗口管理器
- 参阅 Alternative 命令, 第 6.5.3 节.
- exec /usr/bin/x-window-manager
- GNOME 会话管理器(loaded)
- 需安装软件包:gnome-session
- exec /usr/bin/gnome-session
- KDE 会话管理器(loaded)
- 需安装软件包:kdebase (or kdebase3 for KDE3)
- exec /usr/bin/kde2
- Blackbox 窗口管理器(lightweight, slick).
- 需安装软件包:blackbox
- exec /usr/bin/blackbox
- Fluxbox 窗口管理器(lightweight, new blackbox).
- 需安装软件包:fluxbox
- exec /usr/bin/fluxbox
- Xfce 窗口管理器(Mac OS-X, SUN CDE like).
- 需安装软件包:xfce
- exec /usr/bin/xfwm
- IceWM 窗口管理器(lightweight, GNOME alternative)
- 需安装软件包:icewm
- exec /usr/bin/X11/icewm
- FVWM2 虚拟窗口管理器(lightweight, Win95 like)
- 需安装软件包:fvwm
- exec /usr/bin/fvwm2
- Windowmaker 窗口管理器(somewhat NexT like)
- 需安装软件包:wmaker
- exec /usr/bin/wmaker
- Enlightenment 窗口管理器(loaded).
- 需安装软件包:enlightenment
- exec /usr/bin/enlightenment
配置 KDE/GNOME
要配置完整的 KDE 或 GNOME 环境,下列的综合包很有用:
- KDE:安装 kde 软件包
- GNOME:安装 gnome 软件包
请使用能操作 Recommends 类软件包的安装工具安装这些软件包,如 dselect 和 aptitude,比起 apt-get 它们能提供更丰富的软件供你选择。
如果想从控制台登录,必须禁用 X 显示管理器,例如 kdm、gdm 和 wdm 这会牵扯到一些关联问题,有关信息参阅 “我不想直接启动到 X!”, 第 8.1.4 节。
如果想将系统的默认环境由 KDE 换成 GNOME,请用 Alternative 命令, 第 6.5.3 节中所述的方法配置 x-session-manager。
在 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 的监听。
联接远程的 X 服务器 – xhost
xhost 允许通过主机名访问。该方式极不安全。下面的方法将关闭主机验证功能,只要 TCP/IP 套接字连接功能是打开的(参阅 在 TCP/IP 中使用 X, 第 9.4.6 节)本机就会接收来自任何地方的连接请求。
$ xhost +
要重新打开主机验证功能可执行:
$ xhost -
xhost 无法区分远程主机上不同的用户,而且远程连接的主机名(实际上是地址)也可以是伪造的。
如果处于一个不可信的网络环境(例如通过 PPP 拔号连接到 Internet),即使在网络中成为主机受到一定标准的限制,也应尽量避免使用该连接方式。参阅 xhost(1x)。
联接远程的 X 服务器 – ssh
使用 ssh 可以在本地主机和远程应用服务器之间建立一个安全的连接通道。
- 如果不想每次执行相同的命令行选项,可在远程主机的 /etc/ssh/sshd_config 文件中,打开 X11Forwarding 和 AllowTcpForwarding 选项。
- 启动本地主机的 X 服务器。
- 在本地主机上开一个 xterm 进程。
- 运行 ssh 建立与远程站点的连接。
localname @ localhost $ ssh -q -X -l loginname remotehost.domain Password: .....
- 在远程站点上运行 X 应用程序命令。
loginname @ remotehost $ gimp &
该连接方式使得远程 X 客户机上的屏幕输出,看上去就好象是通过本地 UNIX 域套接字的方式连接到服务器的客户机输出。
X 终端模拟器 – xterm
学习 xterm 可以去 http://dickey.his.com/xterm/xterm.faq.html。
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)。
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)。
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 文件。
还有一些用于该目的的专用软件包:kdesu、gksu、gksudo、gnome-sudo 和 xsu。其它方法也可以达到同样的目的:如在 /root/.Xauthority 和相应用户文件之间创建一个符号链接;使用 sux 脚本;或对 root 初始化脚本执行“xauth merge ~USER_RUNNING_X/.Xauthority”。
更多方法参阅 debian-devel mailing list。
X 下的 TrueType 字体
xorg 中标准的 xfs 能完美地驱动 TrueType 字体,如果你使用的是 XFree86-3,就得安装第三方字体服务器如 xfs-xtt。
不论什么应用程序,如果要使用 TrueType 字体,就要与 libXft 或 libfreetype 建立链接(如果你使用的是已编译好的 .deb 包,就不用在这方面操心了)。
首先进行字体支持的基础设置:
- 安装软件包 x-ttcidfont-conf 和 defoma。它们能自动生成文件 fonts.scale 和 fonts.dir。
# apt-get install x-ttcidfont-conf
- 编辑 /etc/X11/xorg.conf 的 Section "Files" 部分,如下显示:
Section "Files" FontPath "/var/lib/defoma/x-ttcidfont-conf.d/dirs/TrueType" FontPath "/usr/share/fonts/truetype" FontPath "/usr/lib/X11/fonts/CID" FontPath "/usr/lib/X11/fonts/Speedo" FontPath "/usr/lib/X11/fonts/misc" FontPath "/usr/lib/X11/fonts/cyrillic" FontPath "/usr/lib/X11/fonts/100dpi:unscaled" FontPath "/usr/lib/X11/fonts/75dpi:unscaled" FontPath "/usr/lib/X11/fonts/Type1" EndSection
第一行使 xorg 使用任何你从 Ubuntu 软将包安装的 TrueType 字体。因为 xorg 渲染 Type1 字体的效果很差,Type1 字体的目录就放在后面了。点阵字体的小技巧 :unscaled 对于新的 XF4 来说是不需要的,我把它包含在内是为了确保万无一失。 为了保留手工修改的 /etc/X11/xorg.conf 文件,请按照 手工配置 X 服务器, 第 9.4.3.3 节的说明操作。
然后安装 DFSG 字体软件包:
- 西方 TrueType 字体:
- ttf-bitstream-vera:一套由 Bitstream, Inc 创造的高质量的 TrueType 字体。 [40]
- ttf-freefont:一套高质量的 TrueType 字体,包含了 UCS 字符集。
- ttf-thryomanes:一套包括了 Latin、Greek、Cyrillic 和 IPA 的Unicode TrueType 字体。
- 亚洲字体:
- tfm-arphic-bsmi00lp: Chinese Arphic "AR PL Mingti2L Big5" TrueType font TeX font metric data
- tfm-arphic-bkai00mp: Chinese Arphic "AR PL KaitiM Big5" TrueType font TeX font metric data
- tfm-arphic-gbsn00lp: Chinese Arphic "AR PL SungtiL GB" TrueType font TeX font metric data
- tfm-arphic-gkai00mp: Chinese Arphic "AR PL KaitiM GB" TrueType font TeX font metric data
- ttf-baekmuk: Korean Baekmuk series TrueType fonts
- hbf-jfs56: Chinese Jianti Fangsong 56x56 bitmap font (GB2312) for CJK
- hbf-cns40-b5: Chinese Fanti Song 40x40 bitmap font (Big5) for CJK
- hbf-kanji48: Japanese Kanji 48x48 bitmap font (JIS X-0208) for CJK
由于供自由使用的字体有时很有限,Debian 用户也可以安装或共享某些商业 TrueType 字体。为了简化安装这类字体的工序,于是产生了一些方便的软件包:
- ttf-commercial
- msttcorefonts (>1.1.0) [41]
请慎重选择 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 用它来查找字体。 你不必为此再安装其他额外的软件包,因为所有用到 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 字体,而没有使用 Ubuntu 的软件包,运行
# xset fp rehash
让 xorg 重新检查目录下面的内容并找到新的字体。
X 中的网页浏览器
Dapper 发行版中包含了下面这些拥有图形处理能力的网页浏览器:
- mozilla Mozilla 浏览器
- mozilla-firefox Mozilla 浏览器变体(独立的)
- epiphany-browser Mozilla 浏览器变体(Gnome)
- galeon 基于 Mozilla 的使用 Gnome UI 的浏览器(新增)
- konqueror KDE 浏览器
- amaya W3C 参考浏览器
- ...
在 Dapper 或 Edgy 中,将会遇到 mozilla 变体浏览器的版本匹配问题,因为这些变体浏览器需要匹配共享库的版本。
安装诸如 mozilla 浏览器的插件,可手工将“*.so”装到 plug-in 目录下,然后重启浏览器。
Plug-in 资源:
- Java plug-in: 从 http://java.sun.com 安装二进制的“J2SE”。
- Flash plug-in: 从 http://www.macromedia.com/software/flashplayer/ 安装二进制的“Macromedia Flash Player 5”
- freewrl: VRML 浏览器和 Netscape plug-in
- ...
X 图形界面下的邮件客户端(MUAs)
在 Sarge 发行版下,有几个客户端软件包有图形显示界面:
- mozilla-thunderbird 独立的邮件客户端
- kmail KDE 邮件客户端
- evolution Novell 里面的 groupware 套件
- ...
SSH
SSH(Secure SHell)是在 Internet 中建立连接的安全途径。OpenSSH 是一个自由的 SSH 实现软件,它包含 在Debian 的 ssh 软件包中。
SSH 基础
首次安装 OpenSSH 服务器和客户机。
# apt-get update && apt-get install ssh
要运行 OpenSSH 服务器,还得屏蔽掉 /etc/ssh/sshd_not_to_be_run。
SSH 有两个验证协议:
- SSH 协议 第 1 版:
- Potato 发布版仅支持该版协议
- 可用的验证方法:
- RSA 验证:基于 RSA 密钥的用户验证
- Rhosts 验证:基于 .rhosts 的主机验证(不安全,有缺陷)
- RhostsRSA 验证:.rhosts 验证与 RSA 主机密钥相结合(有缺陷)
- ChallengeResponse 验证:RSA Challenge-response 验证
- Password 验证:基于 password 的验证
- SSH 协议 第 2 版
- Woody 后继版本将以该版协议为主
- 可用的验证方式:
- Pubkey 验证:基于公共密钥的用户验证
- Hostbase 验证:.rhosts 或 /etc/hosts.equiv 验证与公共密钥客户端主机验证相结合(有缺陷)
- ChallengeResponse 验证:challenge-response 验证
- Password 验证:基于 password 的验证
如果系统正迁移到 Woody 或使用非 Debian 系统,请注意版本差异。
更多信息请参阅 /usr/share/doc/ssh/README.Debian.gz、ssh(1)、sshd(8)、ssh-agent(1) 和 ssh-keygen(1)。
下面是一些关键的配置文件:
- /etc/ssh/ssh_config:默认的 SSH 客户机。参阅 ssh(1)。其中重要的项目有:
- Host:作用于所有与该关键字后所列出的主机相匹配的主机,它们须遵守下面(处于本host 关键字之后下一个 host 关键字之前的内容)所列的各项条款。
- Protocol:规定所使用的 SSH协议的版本。默认为“2,1”。
- PreferredAuthentications:规定 SSH2 客户端验证方式。默认为“hostbased,publickey,keyboard-interactive,password”。
- PasswordAuthentication:如果想使用密码登录,须确认该选项没有设置成 no。
- ForwardX11:默认为关闭状态。可使用命令行选项“-X”重载它。
- /etc/ssh/sshd_config:默认的 SSH 服务器。参阅 sshd(8)。其中重要的项目有:
- ListenAddress:规定 sshd 监听的本地地址。允许多重指定。
- AllowTcpForwarding:默认为关闭状态。
- X11Forwarding:默认为关闭状态。
- $HOME/.ssh/authorized_keys:默认公共密钥列表,客户机可使用这些密钥连接本主机的该用户帐号。参阅 ssh-keygen(1)。
- $HOME/.ssh/identity:参阅 ssh-add(1) 和 ssh-agent(1)。
下面的操作将从客户机建立一个 ssh 连接。
$ ssh [email protected] $ ssh -1 [email protected] # 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 ^])。
发送端口 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。
用更少的密码建立连接 – 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 文件中设置 HostbasedAuthentication 为 yes。
处理外来的 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”。
设置 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 [email protected]:foo ... no passphrase needed from here on :-) $^D ... terminating ssh-agent session
对于 X 服务器,普通 Ubuntu 启动脚本会将 ssh-agent 作为一个父进程执行。所以只需执行一次 ssh-add 即可。
详情参阅 ssh-agent(1) 和 ssh-add(1)。
SSH 问题处理
如果遇到问题,检查一下配置文件的访问权限,并使用“-v”选项运行 ssh。
如果是 root 身份,遇到连接防火墙出错的情况,可使用“-P”选项;它规定 ssh 使用服务器的1 – 1023 以外的端口。
如果与远程站点的 ssh 连接突然停止工作,很可能是因为系统管理员修补系统造成的,host_key 在系统维护过程中被更改。在查明了事情真象并确定并不是有人试图冒充远程主机非法入侵之后,从本地机器的 $HOME/.ssh/known_hosts 中删除 host_key 项目就可以恢复连接了。
邮件
邮件系统配置分为三类:
- 邮件传输代理(MTA):exim4, exim, postfix, sendmail, qmail, ssmtp, nullmailer, ...
- 邮件工具:procmail, fetchmail, mailx, crm114, ...
- 邮件用户代理(MUA):mutt, emacs+gnus,
邮件传输代理(MTAs)
对于全功能的 MTA 来说,请使用 exim4。 参考资料:
- 针对软件包 exim4 的 exim4-doc 和 exim4-doc-html。
- http://www.exim.org/
如果你对安全性有高要求的话,唯一一个可替代的 MTA 是 postfix。Ubuntu 软件包还提供了 sendmail 和 qmail,但并不推荐你使用它们。
有时并不需要 MTA 的所有功能,如在一个卫星系统中的一台笔记本电脑,可以考虑下列几种轻量级软件包:
- ssmtp:需要 SMTP 连接并支持别名功能,或者
- nullmailer:可以存信但不支持别名。
此刻,我发现 exim 对于我作为个人工作站的笔记本电脑再合适不过了。
如果要安装这些软件包必须先删除 exim,它们有冲突:
# dpkg -P --force-depends exim # apt-get install nullmailer # or ssmtp
Smarthost
如果你在一台通过用户级别的服务连接的机器上运行 exim4 或 exim,请确保在发信的时候通过 ISP 或者其他人提供的 smarthost。 [45] 这样做有许多好处:
- ISP 的 smarthost 通常有更可靠的连接,可以确保 SMTP 重发。
- 避免使用动态 IP发送信件,这类信件会被 dial-up spam 列表过滤的。
- 节省寄出多个收信人的邮件的带宽。
唯一可能的坏处是:
- 你 ISP 的 SMTP 出问题时的紧急处理。
- 用于学习目的的实验。
- 你的主机是专业的主机服务器。
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 添加伪来源地址列表
检查邮件过滤器可使用 exim4 搭配 -brw, -bf, -bF, -bV, ... 等等
在 Exim 下设置一个收集不存在的邮件地址的容器
在 /etc/exim/exim.conf 文件(Woody 或后继版本)的 DIRECTORS 部分的末尾(localuser:director 之后)添加一个 catch-all director,将所有前面的 director 无法解析的地址收集到一起(per Miquel van Smoorenburg):
catchall: driver === smartuser new_address === [email protected]
如果要为每个虚拟域指定更精细的处理方法或其它什么的,可在/etc/exim/exim.conf末尾添加(我没仔细测试过):
*****@yourdomain.com ${lookup{$1}lsearch*{/etc/email-addresses} \ {$value}fail} T
接着在/etc/email-addresses中加上一行“*”。
在 Exim 下设置寄出邮件的地址重写
可用 exim 为发出的邮件指定特定的“From:”信头,在 /etc/exim/exim.conf 文件的末尾编辑:
*****@host1.something.dyndns.org \ "${if eq {${lookup{$1}lsearch{/etc/passwd}{1}{0
{1} \
{$0}{[email protected]}}" frFs
</nowiki>
该语句将作用于所有符合*@host1.something.dyndns.org的邮件。
- 在/etc/password中搜索,以确定local part($1)是否为本地用户。
- 如果是本地用户,它将用第一个域($0)中的内容重写地址
- 如果不是本地用户,重写域部分。
在 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 === "<sup>cmatheson3</sup>this_is_my_password"
别忘了最后一行的双引号。
收取邮件 – 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
处理邮件 – Procmail
procmail是一个本地邮件分发过滤程序。使用时,需要为每个使用它的用户创建$HOME/.procmailrc,样例:_procmailrc。
用 crm114 处理垃圾邮件
crm114 软件包提供了 /usr/share/crm114/mailfilter.crm 脚本。该脚本是用 CRM114 撰写的,提供了非常有效的垃圾信件过滤器,并可以通过喂食垃圾邮件来调节它的处理能力。
CRM114 是一种专门为写过滤器设计的小语言,可以把它当做拥有超能力的 grep 版本。参阅 crm(1)。
阅读邮件 – 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
本地化(localization)
Ubuntu 是国际化的操作系统,它所支持的语言和地区惯例的数目正在不断增加。接下来的部分列出了当前 Ubuntu 对各种差异形式的支持,接着再讨论本地化,该过程负责定制你的工作环境,根据你所选的语言确定当前系统的输入输出方式,并按照你所在地区的惯例转化日期、数字、货币格式以及系统中其它相关方面。
本地化基础
定制系统的本地化和国家语言支持包括以下几个方面。
键盘本地化
Ubuntu 发布版中包含了二十多种键盘布局方案。重新配置键盘可使用:
- dpkg-reconfigure --priority=low console-data # console
- dpkg-reconfigure --priority=low xserver-xfree86 # XF4
- dpkg-reconfigure --priority=low xserver-common-v3 # XF3
资料文件本地化
绝大多数 Ubuntu 软件包都能使用 non-US-ASCII 字符,它们通过 glibc 中的 locale 技术,用 LC_CTYPE 环境变量来操作这些字符。
- 纯 8-bit 字符:应用于所有程序中
- 其它拉丁字符集(例如:ISO-8859-1 或 ISO-8859-2):应用于绝大多数程序中
- 多字节语言如中文、日文或韩文:应用于较新的应用程序中
显示本地化
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 下显示任何编码的文件。所以不用太担心字体的编码问题。
信息和文档的本地化
许多在 Ubuntu 系统中显示的文本信息和文档被翻译成了各种译本,如出错信息、标准程序输出、菜单以及帮助页面。当前Ubuntu支持德语、西班牙语、芬兰语、法语、匈牙利语、意大利语、日语、韩语、波兰语、葡萄牙语、汉语以及俄语帮助页面,可通过安装 manpages-LANG 软件包实现这些支持(此处 LANG 代表双位的 ISO 国家代码。使用 apt-cache search manpages-|less 获得可用的 Unix 帮助页面列表。)
要访问 NLS 帮助页面,用户必须将环境变量 LC_MESSAGES 设置成相应的字串。例如,要访问意大利语的帮助页面,需要将 LC_MESSAGES 设置成 it,这时 man程序会在/usr/share/man/it/ 目录下搜索帮助页面。
Locales
Ubuntu 支持 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)。
Locales 简介
完整的 locale 描述包括三个部分:xx_YY.ZZZZ。
- xx: ISO 639 个语言代码(小写)
- YY: ISO 3166 个国家代码(大写)
- ZZZZ: 编码集,例如,字符集或编码标志。
关于语言代码和国家代码,请参阅 info gettext 中的相关描述。
请注意,为了完成跨平台的兼容性,这个编码集部分可能被“内部标准化”。移除了所有 -,把所有字符都转化成小写的。典型的编码集:
- UTF-8: 适合所有区域的 Unicode 码,通常是 1-3 个八进制数(新的事实上的标准)
- ISO-8859-1: western Europe (de facto old standard)
- ISO-8859-2: eastern Europe (Bosnian, Croatian, Czech, Hungarian, Polish, Romanian, Serbian, Slovak, Slovenian)
- ISO-8859-3: Maltese
- ISO-8859-5: Macedonian, Serbian
- ISO-8859-6: Arabic
- ISO-8859-7: Greek
- ISO-8859-8: Hebrew
- ISO-8859-9: Turkish
- ISO-8859-11: Thai (=TIS-620)
- ISO-8859-13: Latvian, Lithuanian, Maori
- ISO-8859-14: Welsh
- ISO-8859-15: western Europe with euro
- KOI8-R: Russian
- KOI8-U: Ukrainian
- CP1250: Czech, Hungarian, Polish (MS Windows origin)
- CP1251: Bulgarian, Byelorussian (MS Windows origin)
- eucJP: Unix style Japanese (=ujis)
- eucKR: Unix style Korean
- GB2312: Unix style Simplified Chinese (=GB, ==eucCN) for zh_CN
- Big5: Traditional Chinese for zh_TW
- sjis: Microsoft style Japanese (Shift-JIS)
询问基本编码系统术语的意思:
- ASCII: 7 bits (0-0x7f)
- ISO-8859-?: 8 bits (0-0xff)
- ISO-10646-1: Universal Character Set (UCS) (31 bits, 0-0x7fffffff)
- UCS-2: First 16 bit of UCS as straight 2 Octets (Unicode: 0-0xffff)
- UCS-4: UCS as straight 4 Octets (UCS: 0-0x7fffffff)
- UTF-8: UCS encoded in 1-6 Octets (mostly in 3 Octets)
- ISO-2022: 7 bits (0-0xff) with the escape sequence. ISO-2022-JP is the most popular encoding for the Japanese e-mail.
- EUC: 8 bits + 16 bits combination (0-0xff), Unix style
- Shift-JIS: 8 bits + 16 bits combination (0-0xff), Microsoft style.
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:
- Standard UCS-2, UCS-4: big endian
- Microsoft UCS-2, UCS-4: little endian for ix86 (machine-dependent)
See 使用 recode 转化文本文件, 第 8.6.12 节 for conversion between various character sets. For more see Introduction to i18n.
激活 locale 支持
Ubuntu 并不在系统中编译所有可用的 locales,检查 /usr/lib/locale 确定哪个 locales(除了默认的“C”)已在系统上编译安装。如果所需的 locale 并不在其中,有两个解决办法:
- 编辑 /etc/locale.gen 添加需要的 locale,然后以 root 身份运行 locale-gen 编译它。参阅 locale-gen(8)以及该帮助页面中“SEE ALSO”一节所列的命令。
- 运行 dpkg-reconfigure locales 可以重新配置 locales 软件包。如果还没有安装 locales,locales 安装程序会调出 debconf 界面让你选择所需的 locales 并编译相关数据库。
激活特定 locale
相关的环境变量按如下次序将特定 locale 值赋给程序:
- LANGUAGE:该环境变量由一个用冒号分隔、以优先级排序的地区名称列表组成。仅当 POSIX 地区值与“C”地区值相异时才使用到它[在 Woody 中;在 Potato 版本中通常其优先级高于 POSIX locale]。(GNU 扩展名)
- LC_ALL:如果为非空值,其值将作用于所有 locale 项目。(POSIX.1)通常为“”(空值)。
- LC_*:如果为非空值,其值将作用于相应的 locale 项目。(POSIX.1)通常为“C”。
LC_*变量有:
- LC_CTYPE:字符分类和环境转换
- LC_COLLATE:校正命令
- LC_TIME:时间显示格式
- LC_NUMERIC:非货币型数字格式
- LC_MONETARY:货币符号
- LC_MESSAGES:常规信息、诊断消息和交互响应信息的格式
- LC_PAPER:纸张尺寸
- LC_NAME:姓名格式
- LC_ADDRESS:地址格式和地区信息
- LC_TELEPHONE:电话号码格式
- LC_MEASUREMENT:度量单位(公制或其它)
- LC_IDENTIFICATION:有关地区信息的元数据
- LANG:如果为非空值且 LC_ALL 也没有定义,则该值作用于所有没有定义的 LC_*地区项目。(POSIX.1)通常为“C”。
注意,有些应用程序(例如Netscape 4)忽略LC_*设置。
locale 程序可显示当前激活的地区设置和可用的 locale;参阅 locale(1)。(注意:locale -a 将列出系统已知的所有的 locales;这并不代表它们都已在系统中编译了!参阅 激活 locale 支持, 第 9.7.4 节。)
ISO 8601日期格式
名为 en_DK “丹麦英语的” locale 提供了对国际标准日期格式 yyyy-mm-dd(ISO 8601日期格式)的支持(听起来有点搞笑:-))。它仅工作于 ls 的控制台屏幕。
US(ISO-8859-1)例子
将下列语句添加到 ~/.bash_profile:
LC_CTYPE=en_US.ISO-8859-1 export LC_CTYPE
带 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。
多语言的 X 窗口系统范例
让我们来创建一个多语言 X 窗口系统,能在不同的控制台中搭配 EUC、UTF-8 和 ISO-8859-1 来同时支持日语、英语、德语和法语。
我会向你展示用 Ubuntu menu 系统进行的自定义设置 Ubuntu menu 系统的详细信息参阅 /usr/share/doc/menu/html/index.html。在例子中,我也创建了 mozilla 网络浏览器的快捷键。 [46]
- 使用 本地化(localization), 第 9.7 节中描述的方法添加对日文 ja_JP.eucJP locale 和其他需要的 locale 的支持。
- 安装 Kana-to-Kanji 转换系统和字典(针对日语):
- canna – 本地服务器 (free bear license),或
- freewnn-jserver – 加入网络功能的服务器 (Public Domain)
- 安装日文输入系统(针对日语):
- kinput2-canna – X 下或
- kinput2-canna-wnn – X 下和
- egg – 在控制台下能搭配 Emacsen 直接输入日文(额外)
- 安装日文兼容终端机:
- xterm – X(支持 ISO-8859-1 和 UTF-8),
- kterm — X (支持日文 EUC),和
- mlterm — X (支持多语言)
- 添加全部日文字库包。(针对所有语言)
- 创建~/.xsession,用户可通过配置它来指定X环境,如 自定义 X 会话, 第 9.4.5.1 节中描述的(针对所有语言):
#!/bin/sh # This makes X work when I su to root. if [ -z "$XAUTHORITY" ]; then XAUTHORITY=$HOME/.Xauthority export XAUTHORITY fi # Set specific environment through debian menu system. # Reset locale unset LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES unset LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT unset LC_IDENTIFICATION LC_ALL LANG LANGUAGE PAGER # set locale default in X LANG=C # export locale export LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES export LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT export LC_IDENTIFICATION LC_ALL LANG LANGUAGE PAGER ### # activate input method for Japanese with kinput2 kinput2 & XMODIFIERS="@im=kinput2" export XMODIFIERS # How about blackbox window manager (lightweight) exec blackbox #exec xfwm #exec wmaker
- 在 ~/.bash_profile 中为 Linux 控制台设置 locale(针对所有语言)。
- 删除 ~/.bashrc 中的 locale 设置,如果其存在的话(针对所有语言)。
- 在 /etc/menu/ 中建立新文件(针对所有语言)。
- /etc/menu/xterm-local:(在菜单中加入新项目)
?package(xterm):\ needs=x11\ section=XShells\ longtitle="XTerm: terminal emulator (en_US.ISO-8859-1)"\ title="XTerm (en_US.ISO-8859-1)"\ command="sh -c 'LC_ALL=en_US.ISO-8859-1 xterm'" ?package(xterm):\ needs=x11\ section=XShells\ longtitle="XTerm: terminal emulator (de_DE.ISO-8859-1)"\ title="XTerm (de_DE.ISO-8859-1)"\ command="sh -c 'LC_ALL=de_DE.ISO-8859-1 xterm -T xterm-de'" ?package(xterm):\ needs=x11\ section=XShells\ longtitle="XTerm: terminal emulator for X with Unicode support (Japanese)"\ title="UXTerm (ja_JP.UTF-8)"\ command="sh -c 'LC_ALL=ja_JP.UTF-8 uxterm'"
- /etc/menu/kterm:(覆盖系统默认的)
?package(kterm):\ needs="x11"\ section="XShells"\ command="sh -c 'LC_ALL=ja_JP.eucJP PAGER=w3m /usr/X11R6/bin/kterm -xim'" \ title="Kanji Terminal" ?package(kterm):\ needs="x11"\ section="XShells"\ command="sh -c 'LANG=ja_JP.eucJP \ LC_MESSAGES=en_US.ISO-8859-1 PAGER=w3m /usr/X11R6/bin/kterm -xim'" \ title="Kanji Terminal (bilingal)"
- /etc/menu/mozilla-local:(添加新的快捷键)
?package(mozilla-browser):needs="x11" section="/" \ title=" Mozilla Navigator" command="mozilla-1.5" hints="Web browsers" \ icon=/usr/share/pixmaps/mozilla.xpm
- 以 root 帐号运行 update-menus。
- 在 ~/.muttrc 中加入下列内容(针对日语):
# UTF-8 support is not popular in popular Japanese EMACS environment # 7 bit encoding of iso-2022-jp is easier for everyone # default encoding order === us-ascii --> iso-8859-1 --> iso-2022-jp set send_charset="us-ascii:iso-8859-1:iso-2022-jp" set allow_8bit=no
- 为 X 应用程序激活 XIM kinput2(针对日语):
- 在 X 资源文件 ~/.Xresources(不知何故,看上去 Debian 好象在自动配置它)添加 *inputMethod: kinput2 和 KTerm*VT100*OpenIm:true。
- 某些应用程序(如 mlterm)也允许设置 *inputMethod: 和其它运行时的动态信息(在 mlterm 中按下 Ctrl-MouseButton-3)。
- 用 startx 或任何显示管理器(xdm、gdm、kdm、wdm...)启动 X(针对所有语言)
- 打开日文兼容应用程序:VIM6、(x)emacs21、mc-4.5、mutt-1.4...(针对日语)。 (通常 Emacs 是最流行的平台,尽管我不怎么用它。)
- 按“Shift+Space”可切换日文输入法。(针对日语)。
- 在本地化了的控制台中阅读本地化手册(针对所有语言)。
关于其他 CJK 语言的支持,参阅下面的章节和 SuSE pages for CJK。
其他 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-wnn、kinput2-canna 和 kinput2-wnn 提供。输入法还需要例如 canna 和 freewnn-jserver 这样的字典服务器才能使用。
X 终端模拟机
还有许多 X 终端机支持 8-bit 编码,安装相应的字体就能正常显示:
- xterm – X 终端机
- gnome-terminal – Gnome 的 xterm
- konsole – KDE 的 xterm
- rxvt – VT102 终端 (lighter)
- aterm – Afterstep WM 的 VT102 终端
- eterm – Enlightment WM 的 VT102 终端
- wterm – WindowMaker WM 的 VT102 终端
在 UTF-8 编码的情况下,xterm 提供多编码的 X 终端的支持( 支持 UTF-8 的 X 终端机, 第 9.7.12 节)。其他传统编码的支持还在开发中(2003 年时)。下面的软件包都提供了传统编码的支持:
- aterm-ml – Multi-lingual
- kterm – Multi-lingual (Japanese, ...)
- rxvt-ml – Multi-lingual
- wterm-ml – Multi-lingual
- cxterm-big5 – Chinese (Trad., Big5)
- cxterm-gb – Chinese (Simp., GB)
- cxterm-ks – Chinese (KS)
- cxterm-jis – Japanese
- hanterm-classic – Korean (Hangul)
- hanterm-xf – Korean (Hangul)
- hztty – Chinese (GB, Big5, zW/HZ)
对于 kterm(和其他终端),你可以通过在菜单上按下 Ctrl+鼠标中键来激活 XIM。
支持 UTF-8 的 X 终端机
xorg 的软件包 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 资源。
虽然大部分的终端程序,例如 vim、mutt 和 emacs 都已经能兼容 UTF-8 了(Woody-Sarge)。但是还有不少 mc 这样的程序不兼容 UTF-8,只支持 8-bit 编码。如果你编辑未知或者混合编码文件的 7-bit ASCII 部分,使用 locale 不敏感的支持 8-bit 的编辑器比较安全。
FB 控制台下 UTF-8 的例子
在 debian-installer 中 bterm 提供了在 FB 控制台对 UTF-8 的支持。
超越 locales
当你第一次在系统上安装“国家语言环境”(national language environment)时,请注意使用 tasksel 或 aptitude 查看一下,在选择相关语言环境任务项时都有哪些软件包被选上了,这些选择信息非常有用特别是进行多语言设置时。如果遇到某些关联包与运行良好的系统上的某些软件发生冲突,就不要安装那些引起冲突的包。由于新装的软件比原来的软件具有更高的优先级,所以必须用 update-alternative 结合有关命令让系统恢复到原来状态。
大部分较新的使用 glibc2.2 的程序都已支持国际化了。所以不必再为诸如基于 VIM 的 jvim 等程序指定 loclae,因为 X 下的 vim 6.0 版已提供了该功能。事实上,比起另一个版本它显得有点粗糙,jvim 有个版本直接将日文输入法(canna)支持编译进去了,而且还集成了大量成熟的日文特性,很值得你期待:-)
有时为了获得更好的工作环境,仅通过 locale 来配置程序是不够的。language-env 软件包和 set-language-env命令可以大大简化你的工作。
亦可参阅有关国际化的文档Introduction to i18n,虽然其目标读者为开发人员但对系统管理员也十分有用。
多语言化(Multilingualization, m17n)
由 language-env 等软件包所实现的 本地化(localization), 第 9.7 节是以单一语言的本地化为目标的。这些软件包使用传统的文本编码(encoding)方式。你在这样的环境下不能在文本中混合使用法语和日语,因为它们分别使用 ISO-8859-1 和 EUC-JP 的编码方式,而这两种编码是不兼容的。
如果你选择在一个可用的 UTF-8 区域设置(locale)下启动 GNOME 或 KDE,你就可以得到一个多语言化的 UTF-8 桌面环境。在这样的环境下,只要你用的软件是符合 UTF-8 标准的,你就可以自由地混合使用英语,汉语,俄语,日语等各种文字。
m17n-env 是一个用来帮助建立多语言化环境的程序。你可以在 root 或普通用户下运行 set-m17n-env 命令来设置多语言化的 UTF-8 环境。 [50]
在这样的环境下,最好使用基于 scim 的多语言化输入法。scim 所提供的各种输入法可以一起用 Ctrl-Space 开启或关闭。具体的输入法引擎可以通过点击 SCIM 面板来选择和切换。
你仍然可以通过 m17n-env 创建的自定制区域设置终端而方便地使用传统的编码环境。这在你需要编辑旧的 EUC-JP 或 ISO-8859-1 编码文件时十分有用。