显示标签为“base”的博文。显示所有博文
显示标签为“base”的博文。显示所有博文

通过im-switch切换输入法引擎

大家知道,在Debian或同类Linux系统下,有多种输入法的引擎(Imput Method Engine),例如常用的 Fcitx 或 scim 等。如何选择使用哪一种输入法引擎呢?较早的Debian版本中,我们通常可以通过编辑X windows的一些初始脚本来完成这项工作,现在Debian引入了 im-switch 包来现好的完成这一配置工作。安装 im-switch:

root@debian ~# apt-get install im-switch

im-switch与update-alternative功能和用法相类似,im-switch可以查看和配置当前输出法引擎的列表,并配置当前激活的输入法引擎。通过下面的命令可以查看当前支持(安装)的所有输出法引擎:

redice@debian ~$ im-switch -l
Your input method setup under zh_CN locale as below.
=======================================================
The configuration "/home/lijian/.xinput.d/zh_CN" is defined as a link pointing to
fcitx
This private configuration supersedes the system wide default.
=======================================================
The system wide default is pointed by "/etc/alternatives/xinput-zh_CN" .
xinput-zh_CN - status is auto.
link currently points to fcitx
fcitx - priority 40
Current `best' version is fcitx.
=======================================================
The available input method configuration files are:
default ~/.xinput.d/fcitx none ~/.xinput.d/scim th-xim
=======================================================

上面的信息说明,当前用户 redice 配置的输入法引擎为 fcitx。配置文件存放于当前用户主目录下的.xinput.d目录中。这个目录当前有几个文件,分别是 fcitx, scim,其分别为当前系统所安装的两种输入法引擎的配置文件。X Window启动过程中会配置输入法,并读取用户或全局配置文件。如果用户目录中存在 .xinput.d 目录,则X window将以该目录的配置为当前配置,否则以 /etc/X11/xinput.d 目录中的配置为准。X window以当前的locale为文件名来读取配置文件,因此,在.xinput.d或xinput.d目录中会有一个与当前locale相同名称的链接指向正在使用的输入法引擎,例如按照上面显示的配置,我们的locale设置为zh_CN,在 ~redice/.xinput.d 目录中有一个叫 zh_CN的链接指向 fcitx。im-switch的实质就是协助生成xinput.d中的配置文件链接名称,使X windows获得适当的配置文件,并启动我们所需要的输入法引擎。

redice@debian ~$ ls -l .xinput.d
-rw-r--r-- 1 redice redice 71 Aug 7 2005 fcitx
-rw-r--r-- 1 redice redice 71 Aug 8 2005 scim
lrwxrwxrwx 1 redice redice 28 Sep 1 02:11 zh_CN -> /home/redice/.xinput.d/fcitx

redice觉得 scim更适合于他,于是想修改一下输入法引擎,通过下面的命令可以完成:

redice@debian ~$ im-switch -s scim
redice@debian ~$ ls -l .xinput.d
-rw-r--r-- 1 redice redice 71 Aug 7 2005 fcitx
-rw-r--r-- 1 redice redice 71 Aug 8 2005 scim
lrwxrwxrwx 1 redice redice 28 Sep 1 02:11 zh_CN -> /home/redice/.xinput.d/scim

前面已经提到,X window在启动时配置和启动输入法,因此要想上面的配置能生效,必需重新启动正在运行的 X window。另外,如果要配置系统的默认输入法引擎,则需要以超级用户身份来运行 im-switch,完成的工作与上面类似,只不过相应的配置变更都是发生在 /etc/X11/xinput.d目录里而已。

如果你不只使用一种 locale,那么你可能需要配置多个不同 locale 的输入法。例如,你的系统同时有中国大陆,台湾同胞和小日本使用,这些人会分别使用不同的locale,如中国大陆使用 zh_CN.UTF-8或zh_CN.GB2312,而台湾同胞则使用zh_TW,小日本则使用 ja_JP,当然其使用的输入法也可能不相同,im-switch同样可以为不同 locale 配置不同的输入法,如:

root@debian ~# im-switch -z zh_CN fcitx
root@debian ~# im-switch -z zh_CN gcin
root@debian ~# im-switch -z ja_JP unknown # 我不知道他们用什么 :)

另外需要补充一点的是,im-switch 需要各种输入法的配合,因此,只有整合到 Debian 的各种输入法才能得到 im-switch 的支持,如果你自己下载源码并编译了 fcitx,im-switch 可能根本就不会理睬它了。

用ndiswrapper驱动无线网卡

最近试了一下在Debian下安装无线网卡,由于是笔记本电脑的PCMCIA卡,这种卡多数只提供Windows的驱动程序而没有Linux的驱动,查了一些资料,发现可以通过ndiswrapper来完成将Windows驱动直接加载到Linux中使用的功能。下面就讲一下如何在Debian下安装ndiswrapper并配置无线网卡。

查到的文字中多数通过下载ndiswrapper源码,并通过重新编译核心等复杂的方法来完成,因为ndiswrapper需要编译一些用户工具并安装一个核心模块。这里介绍一下通过Debian的一些工具来辅助完成模块编译等工作的过程。要说明一下的是,如果你使用的是稳定版本或非稳定版本的较早期一点的核心,你可能直接在Debian的官方或非官方包中找到你想要的驱动。我使用的是Debian的unstable版本,最初测试时用的核心是kernel-images-2.6.8-3-686,并且可以发现安装包中有这个核心已经编译好的ndiswrapper模块。这样,所有的安装过程就简单到执行几条apt-get命令:

root@debian ~# apt-get install ndiswrapper-modules-2.6.8-2-386
root@debian ~# apt-get install ndiswrapper-common

不幸的是,我太喜欢新的东东了,所以过了几天,我的核心升级到了2.6.17-1,这时,对应的ndiswrapper模块没有了。这时,也不要先考虑到ndiswrapper的站点上去下载源码并编译,可以考虑通过下载并编译Debian包源码来完成ndiswrapper驱动的安装。Debian的安装包中的确有一个叫ndiswrapper-source的包,简单的想法肯定的下载后,下载当前核心的头文件(kernel-headers-2.6.17-1),然后编译并安装ndiswrapper的核心模块。不过,Debian提供更为简洁的方法来完成这些工作。

Debian中有一个叫module-assistant的工具,这个工具可以用来创建一个以当前核心为基础的模块核心编译环境,并提供菜单式的简洁操作界面来编译核心所支持的第三方模块。如果你的系统上还没有安装这个工具,通过下面的命令来安装:

root@Debian ~# apt-get install module-assistant

安装完成后,直接运行 module-assistant 可以看到一个 curses 的图形界面,提供一些菜单项,包括:

  • OVERVIEW: 总体介绍module-assistant的功能;
  • UPDATE:更新缓存信息,类似于apt-get update的功能,从镜像站获得包更新;
  • PREPARE:准备模块编译所需环境,如下载相应核心的头文件,配置文件,安装必要的工具等;
  • SELECT:选择需要编译的核心模块;
  • EXIT: 退出module-assistant。

与dselect相类似,一次模块的编译工作可以通过顺序选择一次菜单来完成。中间会有一些提示确认信息或安装一些新的软件包,根据提示确认即可。依次选择UPDATE和PREPARE后,module-assistant已经作好编译核心模块的必要准备工作。选择select项,进入一个新的选择页面,其中列出了可供选择的所有核心模块,从列表中找到ndiswrapper选中后确认,出现一个新的菜单。这个菜单是对于选中的模块可进行的操作列表,不再详细说明。仍然可以通过顺序选取每一项来完成模块的编译(前两项LIST和SEARCH可以不必选)。选择GET将从Debian提供的镜像站下载ndiswrapper源码,选取BUILD进行模块编译,这可能需要一些时间。最后,选择INSTALL,编译出的ndiswrapper核心模块被安装到系统的核心模块并自动完成模块的依赖更新和本模块依赖的软件的安装(如会安装ndiswrapper-common,ndiswrapper-utils包等)。

顺利的话,上面的过程完成后,ndiswrapper驱动就安装完成了,并且ndiswrapper工具也自动被安装到系统中了。安装完ndiswrapper是否就可以使用无线网卡了呢?还不行,上面的工作只代表着在Linux下使用Windows的基于ndis驱动的准备工作完成了。下面我们来安装无线网卡驱动程序,并简单说明一下如何进行配置。

安装PCMCIA无线网卡驱动

我用的是一款TENDA的PCMCIA无线网卡,查看驱动后,从inf文件中发现其基于Marvell的芯片做的,用的实际上是Marvell的驱动(mrv8335)。使用ndiswrapper时,通常只需要驱动程序中的inf文件和sys扩展名的文件。简单的方法是让ndiswrapper自己来选择需要哪些文件。将无线网卡驱动在Debian下解开(Debian下可以安装unzip和unrar等工具来解压或压缩zip和rar文件),选择windows2000或windowsXP的驱动目录,找到相应的inf文件,使用类似下面的命令来安装:

root@debian ~# ndiswrapper -i mrv8335.inf

完成后,驱动程序相关的文件将被复制到 /etc/ndiswrapper目录中,由ndiswrapper来管理。通过下面的命令可以查看ndiswrapper已经支持的驱动列表:

root@debian ~# ndiswrapper -l
Installed drivers:
mrv8335 driver installed

将网卡插好后,执行命令ndiswrapper -m将ndiswrapper模块加入到modprobe的配置文件中。加载ndiswrapper模块即可看到无线网卡接口设备了,通常名称以wlan开始,第一个为wlan0:

root@debian ~# ndiswrapper -m # 只需执行一次即可
root@debian ~# modprobe ndiswrapper

通过命令iwconfig可以看到一个叫wlan0的无线接口,通过ifconfig也可以看到这个接口。通过iwlist命令可以搜索无线网络情况:

root@debian ~# iwlist wlan0 scan

接下来开始配置无线网络了,相关的配置说明可以查看wireless-tools的相关手册,这里就不多讲了。一个示例命令如下:

root@debian ~# iwconfig wlan0 essid home_ap # 设置ESSID
root@debian ~# iwconfig wlan0 mode Managed
root@debian ~# iwconfig wlan0 key restricted XXXXXXXX

我的/etc/network/interfaces里有类似如下的配置:

iface wlan0 inet dhcp
pre-up modprobe ndiswrapper
post-down rmmod ndiswrapper
wireless-essid Default
wireless-key Off
wireless-mode Managed
wireless-rate auto

这样,当我要启用无线网络时,只需要使用命令:ifup wlan0即可自动完成驱动加载等工作;而当我要关闭无线网络时,也只要命名用ifdown wlan0即可自动关闭无线模块,并卸载ndiswrapper模块。

Debian与《玩具总动员》


到目前为止Debian的发行版名称均出自Pixar的电影《Toy Story》,中文名称叫做 “玩具总动员”。看看下面的发行版名称吧:

  • Buzz(Buzz Lightyear)是个宇航员,
  • Rex是只暴龙,
  • Bo(Bo Peep)是个放羊的女孩,
  • Hamm是个小猪攒钱罐,
  • Slink(Slinky Dog)是只玩具狗,
  • Potato当然就是Potato Head先生,
  • Woody是个牛仔,
  • Sarge是位绿色塑料玩具士兵首领,
  • tch(Etch-a-Sketch)是玩具黑板,
  • Sid是隔壁的男孩,那个玩具终结者。Sid还有一个解释,就是"Still in development" :)

1995年的玩具总动员(Toy Story)是第一部完全电脑动画制作的电影长片,讲述了六岁小男孩安迪的玩具有着它们自己的生活,新玩具太空战警巴斯光年的到来威胁到原来的玩具头领牛仔胡迪的统治地位。于是胡迪开始想方设法与巴斯光年作对,但结果是它们两个都阴差阳错地置身于屋外的世界。尽管巴斯光年有电动折叠翼、探照灯和腕式对讲机,可一旦离开主人的庇护,它也是寸步难行。更糟糕的是,它们还受到安迪邻居家的狗带来的威胁。于是它们只有捐弃前嫌相依为命,彼此相帮着找到回家的路。影片于95年万圣节在美国上映,以近2亿美元的收入成为当年的票房冠军。

1999年的玩具总动员2(Toy Story 2)延续了第一集的情节,讲述牛仔胡迪被艾尔玩具站的老板偷偷带走。原来胡迪是50年代最有名的组合玩具胡迪牛仔秀的大明星,艾尔预备将胡迪与其他与胡迪同组的玩具们运往日本的玩具博物馆,其中包括,老矿工、胡迪警长座骑以及女牛仔。于是胡迪终于与失散已久的同伴们团圆。在安迪家里,巴斯光年率领蛋头先生、抱抱龙、火腿及其他玩具出发前往艾尔玩具店,准备救出胡迪。经过四处寻找,玩具们终于在艾尔家中找到胡迪,不料胡迪却不愿回家。而巴斯又遇上他的死对头——札克大王。玩具们该如何同时对付:艾尔、札克大王以及不想回家的胡迪呢?本片评价极高,被媒体盛誉为超越前集的经典续作,而无论是从口碑还是票房上看,确实配得上这种夸奖。

另外,Debian的Logo也来自于这部电影,看一看玩具总动员的宣传画,在里面找一下,看能不能发现这个标志在什么地方呢?

通过debootstrap安装Debian

Debian的工具debootstrap可以用于在系统的某个目录中安装一套基本系统,这个基本系统除了一些配置项外,与Debian安装程序在安装的第一阶段安装的内容基本相同。这项功能有许多有趣的功能,例如,你可以从某个定制版本的Debian Live光盘上通过这个命令快速的在硬盘上安装Debian而不需要Debian的安装程序,也可以把创建在硬盘上的基本系统目录作为某些涉及系统安全性服务的chroot运行环境,通过chroot进入该目录并调试和运行一些可能修改系统配置的应用程序,作为定制小型系统模板等等。

Debootstrap必需以root身份来运行,如果当前系统中没有这个工具,可以通过下面的命令来安装:

root@debian ~# apt-get install debootstrap
下面我们来看一下,如何在当前Debian系统中某个目录里安装一个Debian的基本系统。假设我们将基本系统安装到 /root/chroot_env 目录下,只需要通过下面的命令即可完成安装过程:
root@debian ~# mkdir /root/chroot_env
root@debian ~# debootstrap sarge /root/chroot_env http://debian.cn99.com/debian
I: Retrieving Release
I: Retrieving Packages
I: Validating Packages
I: Resolving dependencies of required packages...
I: Resolving dependencies of base packages...
I: Found additional required dependencies: libtext-iconv-perl zlib1g
I: Checking component main on http://debian.cn99.com/debian...
I: Retrieving adduser
I: Validating adduser
I: Retrieving apt
I: Validating apt
....
I: Installing core packages...
I: Unpacking required packages...
I: Configuring required packages...
I: Installing base packages...
I: Base system installed successfully.
root@debian ~#
几分种后(取决于你选取的Debian镜像和网络速度等),安装过程结束,在目录 /root/chroot_env中已经有一个全新安装的Debian基本系统。我们可以通过chroot命令来进入到该基本系统环境:
root@debian ~# chroot /root/chroot_env
root@debian /# ls
bin dev home lib mnt proc sbin sys usr
boot etc initrd media opt root srv tmp var
root@debian /# apt-get clean
root@debian /# du -sh
111M .
基本系统大约110M左右。如果希望在基本系统中执行一些与系统相关的命令,应当先在该基本系统中加载proc文件系统,并且其反映的一些信息都是当前系统的信息。
root@debian /# mount -t proc proc /proc
root@debian /# ps -aef # 将显示主机的所有进程
...
root@debian /# hostname # 将显示当前主机名而非新系统主机名
redice
如果上述过程中,/root/chroot_env目录挂接了一个硬盘分区的话,新的系统将可以通过Lilo,grub等作为根分区来引导系统。这时,需要进行一些必要的配置,如/etc/hosts,/etc/hostname,/etc/network/interfaces文件等都需要进行适当的修改。另外,由于通过debootstrap进行安装时,无法确知硬盘的分区情况,因此,还必需手工修改/etc/fstab文件。