52 FreeBSD连载:外挂式中文显示与输入软件( 二 )


XA是由台湾开发者开发的,当前版本为XA-0.4b,它具备GB显示能力的国标版本为xa-1.04 。它能够在FreeBSD下编译执行 。对于这些包装方式的外挂中文系统,可以使用它提供的shell脚本xa来启动应用程序 。
$ Xcin&
$ xa kvt&
或者自己设置LD_PRELOAD变量为wrap动态库的全路径,再启动相应的应用程序 。
$ LD_RELOAD=/usr/X11R6/lib/wrap.so; export LD_PRELOAD
$ kvt&
在启动了它的输入服务器Xcin之后,那么就能在xa启动的程序中就能使用热键切换Xcin的中英文输入了 。
Chinput与ZhXwin
Chinput是另一个使用了包装技术的中文输入和显示软件,它是使用了cxterm的输入源代码模块在Linux下开发的,在FreeBSD下也能够正常编译运行 。Chinput的作者在其正式发布1.4.1版本中包括了几个与中文显示和输入无关的软件,虽然单个软件都还很有用,但是将几个软件捆在一起,使得应用程序管理比较混乱,还是应该将每个单独的应用程序独立出来,Chinput就专门用于中文的输入和管理 。FreeBSD中可以使用Packages的管理机制来管理应用程序之间的关系 。
Chinput使用资源文件Chinput.ad,并需要Cxterm的输入法,因此需要预先安装Cxterm包 。它还提供了一个脚本run来运行应用程序 。但直接设置LD_PRELOAD变量的方法也不复杂(移植到FreeBSD后的package中的执行脚本被更名为crun),Chinput的输入服务器为chinput,因此可以使用下面的命令来启动Chinput 。
$ chinput &
$ crun kvt &
ZhXWin的输入服务器也使用Chinput的chinput,并加上一个比较简单却有效的用于处理显示的包装库,它可能是基于Chinput的一个早期版本发展的 。ZhXWin的优点是简单、有效,标准Chinput使用了几种不同大小的字体进行显示,而ZhXWin仅仅使用一种字体,然而除了一些字符间距的处理方面,其显示效果还不错 。
$ LD_RELOAD=/usr/X11R6/lib/libst.so; export LD_PRELOAD; kvt&
使用包装软件
每个包装软件由两个部分组成,一个部分为输入模块,需要单独运行 。XA使用Xcin作输入模块,Chinput和ZhXwin使用chinput作输入模块 。另一个部分为包装库,需要使用LD_PRELOAD环境变量进行设置 。
如果要让窗口管理器,如KDE,也显示中文,就需要在启动这些窗口管理程序之前设置好包装库,这就需要在.xinitrc或.xsession文件中的最前面增加LD_PRELOAD变量的定义:
$ mv ~/.xinitrc ~/.xinitrc.orig$ cat > ~/.xinitrcLD_PRELOAD=/usr/X11R6/lib/wrap.soexport LD_PRELOADchinput &^D$ cat ~/.xinitrc.orig >> ~/.xinitrc然而由于这些中文包装软件需要处理键盘,以用于输入中文,直接让包装软件接管窗口管理器,就使得它也影响窗口程序的键盘控制,就使得一些热键不能正常使用 。虽然通过包装KDE,使KDE能显示中文菜单和中文提示,但为了使用正常的键盘操作,还是推荐对每个需要中文能力的软件分别进行包装,而不要直接对窗口管理器进行包装 。
所有的这些中文包装库都比较新,没有经过足够的实践考验或测试,因此存在问题是难免的 。当包装了窗口管理器时,如果包装库出现问题,就可能造成X服务器的键盘死锁,对使用者的操作没有反应 。然而此时系统并没有停止运行,可以使用网络连接上去,杀死X服务器,更改包装设置 。
【52 FreeBSD连载:外挂式中文显示与输入软件】未完,待续 。。。

推荐阅读