这是 SCIM 使用手册 0.2 版, 介绍 SCIM 0.9.5 的使用方法.
版权 © 2003 James Su
本文档按照 GNU FDL 版权协议发布.
目录
SCIM (智能通用输入法平台) 是一个通用的输入法开发平台, 用以简化输入法的开发和维护. SCIM 还包括完整的 XFree86 窗口系统输入法应用程序.
SCIM 采用完全模块化的架构设计, 输入法服务, 配置存储 和 前端协议 都采用独立的模块实现. 目前 SCIM 包含的前端协议模块有 x11 模块 (用以支持 XIM 协议) 和 socket 模块(用以支持网络传输协议). 包含的配置存储模块有 simple 模块(将配置存储在文本文件中) 和 gconf 模块(将配置存储在 GConf 配置系统中). 包含的输入法服务模块有 rawcode 模块(内码输入法) 和 table 模块(通用码表输入法).
另外 SCIM还提供了一个用于 GTK+ 2.x 的本地输入法模块(im-scim), 可以直接通过 GTK+ 2.x 的本地输入法接口为应用程序直接提供输入法服务. 该模块不依赖于 X11 窗口系统, 因此可以在各种 GTK+ 2.x 的环境下使用, 如 gtk+ framebuffer 环境.
从 scim 0.6.0 开始, SCIM 的界面显示部分(输入条和工具条)被独立出来作为一个单独的后台进程运行. X11 前端模块和 GTK+ 2.x 的本地输入法模块(im-scim) 都使用该后台进程显示输入法界面.
您可以到 这里 下载已经编译好的 SCIM 软件包和源码. 目前仅提供基于 GCC 3.3.x, GLIBC 2.3.x, GTK+ 2.2.x, XFree86 4.3.x 的标准 Linux 系统以及为 UnitedLinux 1.0 编译的二进制包. 如果您的系统不符合以上条件, 请下载源码包自行编译安装. 对于符合以上条件的Linux系统, 为了能够运行 SCIM, 您至少需要下载并安装 scim-0.9.5-1.i586.rpm 或者 scim-0.9.5-1ul1.i386.rpm (用于 UnitedLinux 1.0) 包. 如果您还需要其它附加功能, 如 GTK2 的输入法模块等, 请下载并安装相应软件包.
如果您想使用基于码表的中日韩文输入法, 如 "五笔字型", "自然码" 等, 请下载并安装 scim-tables-zh, scim-tables-ja, scim-tables-ko 等软件包. 如果您想使用简体中文拼音输入法, 请下载并安装 scim-chinese 软件包.
启动 SCIM 最简单的命令就是 scim -d, 该命令以后台进程形式启动 SCIM 的 XFree86 XIM 前端模块, 并调入搜索到的所有输入法模块. SCIM 的 XIM 前端模块默认使用的输入法名称是 "SCIM", 因此如果想在应用程序里面使用 SCIM, 必须设置环境变量 XMODIFIERS="@im=SCIM".
scim 命令的参数有:
参数 | 目的 |
---|---|
-h,--help | 显示简单的帮助. |
-d,--daemon | 以后台进程形式运行. |
-l,--list | 列出所有可用的模块. |
-f,--frontend name | 运行指定的前端模块 (缺省运行 x11 前端). |
-c,--config name | 使用指定的配置模块 (缺省使用 simple 模块). |
-s,--servers name | 仅调入指定的输入法服务模块 (缺省调入所有输入法服务模块). 多个模块可以用逗号隔开. |
-ns,--no-servers name | 不调入指定的输入法服务模块. |
例如, 命令scim -l可能会输出如下所示的结果:
Smart Common Input Method 0.8.2 Available FrontEnd module: socket x11 Available Config module: gconf simple socket dummy Available Server module: pinyin rawcode socket table
显示系统中有两个前端模块可用(socket 和 x11), 四个配置模块可用(gconf, simple, socket 和 dummy), 四个输入法服务模块可用(pinyin, rawcode, socket 和 table).
又例如, 如果想让 SCIM 只调入拼音输入法模块(pinyin, 包含在 scim-chinese 包里面), 并以后台方式运行, 可以用如下命令启动 SCIM:
$ scim -s pinyin -d
如果不想调入拼音输入法模块, 可以用如下命令启动 SCIM:
$ scim -ns pinyin -d
在终端中使用以下命令启动 scim:
$ export XMODIFIERS="@im=SCIM" $ scim -d
如果不出意外, 在这个终端中运行的应用程序都可以使用 SCIM 了. SCIM 缺省的开关键是 ctrl-space.
如果想在进入图形界面后就直接可以在应用程序中使用 SCIM, 就需要将 SCIM 的启动命令加到图形界面的启动脚本中去.
但不同发行版的启动脚本不尽相同, 以下仅以常见的几种发行版来举例说明:
如何将 SCIM 加入启动脚本
修改 /etc/X11/xinit/xinitrc.d/xinput. 将 Chinput 变为 SCIM, chinput 变为 scim, 并增加一行, 如:
... ;; zh_CN*) if [ -e /usr/bin/scim ]; then XIM="SCIM" elif [ -e /usr/X11R6/bin/xcin ]; then export LC_CTYPE=zh_CN.GB2312 XIM="xcin-zh_CN.GB2312" fi ;; zh_TW*) ... ;; SCIM) XIM_PROGRAM=scim XIM_ARGS="-d" ;; xcin) ...
修改 ~/.xim 文件, 如:
... zh_*) # Chinese if type -p scim > /dev/null 2>&1 ; then export XMODIFIERS="@im=SCIM" LANG=$tmplang LC_ALL=$tmplang scim -d fi ;; *) # all other languages ...
修改 /etc/X11/xinit/xinitrc, 如:
... elif [ "${LANG%%.*}" = "zh_CN" ] ; then if [ -x /usr/bin/scim ]; then /usr/bin/scim -d export XMODIFIERS="@im=SCIM" fi elif [ "${LANG%%.*}" = "zh_TW" ] ; then ...
请参见Gentoo 的中文指南
请参见SuSE 的CJK指南
SCIM 的参数是通过动态加载的配置模块来保存和读取的. 目前, SCIM 提供了三个配置模块: simple, gconf 和 socket. 下面将简要介绍一下各个配置模块的原理和功能.
SCIM 还提供了一套图形化的设置界面和相应的设置模块. 可以通过 该设置界面修改各种配置参数. 将在第二节介绍该设置界面的用法.
SCIM 目前提供了以下三个配置模块:
将配置参数保存在文本文件里, 缺省的置文件是:
系统缺省配置文件
用户配置文件
用户配置文件的优先级高于系统缺省配置文件. 同一个配置出现在多个配置文件中, 以最高优先级的配置文件为准.
配置文件的格式如下:
/FrontEnd/X11/OnTheSpot = true /FrontEnd/X11/ShowStatusBox = false
等号左边是配置参数的名称, 右边是对应的值. 对于布尔型参数, 值为 true, false 或者 0, 1. 对于列表, 各个元素之间用逗号分隔, 如:
/FrontEnd/Keys/NextServer = Control+Alt+Down,Control+Shift_R,Control+Shift_L
将配置参数保存在 GConf 数据库里. 具体参数可以用 gconf-editor 程序编辑. 此模块为附加模块, 一般不使用. 使用 GNOME 2.x 桌面环境的用户可以使用此模块.
利用 scim Socket FrontEnd (网络前端) 提供的服务来保存和读取配置参数. 该模块 仅在构建网络输入环境和使用 GTK2 本地输入模块 (immodule) 的时候有用. 配置 参数实际还是通过 simple 或者 gconf 配置模块保存的.
另外, 还有一个虚拟的 dummy 配置模块, 如果使用该配置模块, 则所有的配置参数将会使用 程序缺省的值. 所有更新的参数将不被保存. 该配置模块仅在某些特殊场合使用, 如嵌入式 系统. 以减少内存和磁盘占用.
SCIM 提供了一个简单的命令行配置工具 scim-config-agent, 可以用来修改配置参数. 该命令具有如下命令行参数:
参数 | 目的 |
---|---|
-h,--help | 显示简单的帮助. |
-g,--get key | 取得一个配置键的值. |
-s,--set key=value | 设置一个配置键的值. |
-d,--del key | 删除一个配置键的用户定义值 (恢复到系统预设值). |
-t,--type type | 指定数据类型, 合法类型包括: string, int, double, bool, string-list 和 int-list. 缺省为 string. |
-c,--config name | 指定要用的配置模块, 缺省为 simple 模块. |
-a,--app name | 指定应用程序名称, 缺省为 scim. 一般不需要使用该选项. |
命令执行成功后返回 0, 否则将在标准错误输出打印出错误信息, 并返回 -1.
例如, 要用简单配置模块 (simple) 得到配置项 /FrontEnd/X11/OnTheSpot 的值, 可以用如下命令:
$ scim-config-agent -c simple -t bool -g /FrontEnd/X11/OnTheSpot
又如, 要用简单配置模块设置该项的值为 false, 可以用如下命令:
$ scim-config-agent -c simple -t bool -s /FrontEnd/X11/OnTheSpot=false
对于布尔 (bool) 型选项, 合法的值为 true 或 false. 对于字符串列表 (string-list) 和整型数列表 (int-list), 列表项之间要用逗号隔开.
使用命令 scim-setup 来启动 SCIM 的图形设置界面. scim-setup 的开始界面如下图所示:
在进行设置前, 首先要选择正在使用的配置模块 (上图中的 "当前配置模块"). 除非在启动 SCIM 的时候特别指定了其它配置模块, 一般情况下缺省使用的配置模块即为 simple 模块.
设置窗口的左侧是设置模块的选择栏, 分为"面板", "输入法服务", "前端" 等多个子类. 其中,
"面板" 类中包含所有可用的面板程序(用于显示输入条的程序)的设置模块
"输入法服务" 类中包含所有可用的输入法服务模块的设置模块
"前端" 类中包含所有可用的前端模块的设置模块
图中显示的 "输入法服务" 和 "前端" 类中的 "套接字" 分别是 Socket Server 和 Socket FrontEnd 模块的设置模块. 这两个模块用于构建网络或本地的分布式输入法环境, 具体用法请参阅后续内容.
"通用码表" 服务设置模块用于设置类似于 "五笔字型" 等码表输入法的参数. 所有基于码表的输入法都是通过 "通用码表" 输入法模块来提供服务的, 他们共享基本的配置参数.
"GTK" 面板设置模块用于设置 SCIM 目前缺省包含的基于 gtk+-2.x 图形库的面板程序. 该面板程序为 "X 窗口 (XIM)" 前端模块 (X11 FrontEnd) 和 SCIM 的 GTK+-2.x 本地输入法模块 (gtk2-immodule) 提供界面显示服务. 输入法的大部分图形界面, 包括输入条, 工具条, 帮助窗口, 系统托盘图标等都是由这个程序显示的.
"X 窗口" 前端设置模块用于设置基于 XIM 输入法协议的 X11 前端模块.
以下即为 "GTK" 面板设置模块和 "X 窗口" 前端设置模块的界面.
点击"输入法服务"类的根条目, 会显示如下界面. 通过该界面, 可以禁止或激活特定的输入法服务.
点击每个输入法服务条目左边的小方框, 就可以禁止或激活该输入法. 修改结果将在按"应用"键, 或"退出"键的时候保存.
在设置过程中如果发现错误, 可以按 "还原" 键重新调入原始配置. 设置完成后按 "应用" 或者 "确定" 键保存设置. 必须重新启动 SCIM, 新设置才能生效. 最简单的办法就是重新启动整个 X 窗口环境.
网络模块包括 Socket Server, Socket FrontEnd 和 Socket Config. 它们用来构建网络分布式输入法环境. 在 X11 窗口环境中, 它们一般没有什么用处. 它们的典型用途是为 SCIM 的 GTK+-2.x 本地输入法模块提供输入法服务. 它们还可以用于通过网络在一台计算机上为其它一台或者多台计算机提供输入法服务.
Socket FrontEnd (套接字前端) 的用途就是通过一个本地或者网络套接字(socket) 对外提供输入法服务. Socket Server (套接字输入法服务模块) 和 Socket Config (套接字配置模块) 是 Socket FrontEnd 的客户, 它们通过 Socket FrontEnd 建立的套接字来获取输入法或者配置读写等服务.
为了方便理解, 请看下图. 该图显示了一个典型的 SCIM 分布式输入法系统.
如图所示, 第一方框内表示一个正在运行的 SCIM Socket FrontEnd 系统. 该系统通过一个 Socket FrontEnd 将 Server 1 到 Server N 多个输入法模块提供的服务利用一个 Socket (蓝色圆圈表示) 提供给外部使用者(本机或者远程).
第二方框内表示一个正在运行的 SCIM X11 FrontEnd 系统. 该系统挂接在一个运行中的 X11 Server 上, 为所有使用 XIM 输入法协议的 X 窗口应用程序提供输入法服务. 其使用的所有输入法模块均为 Socket Server 模块. 这些模块本身不做任何事情, 它们仅仅起到在第一个系统的 Socket FrontEnd 和第二个系统的 X11 FrontEnd 之间转发数据的作用. 也就是说, 所有来自于 X 窗口应用程序的请求都被转发到第一个系统的 Socket FrontEnd, 再由其后端的 Server 1 到 Server N 等各个真正的输入法模块来处理. 处理完成的数据再经过相同的途径转发回应用程序.
第三个方框内表示一个正在运行的 GTK2 应用程序 (例如 gedit). 该程序使用 SCIM 提供的本地输入法模块 (im-scim) 来实现键盘输入. 和上面 X 窗口系统的类似, 该程序所得到的输入法服务都是由一系列 Socket Server 模块转发自第一个系统的 Socket FrontEnd 的.
Socket Config 配置模块的原理和 Socket Server 类似. 它将所有读写配置的请求都转发给运行在本机或者远程机器上的一个 Socket FrontEnd, 再由该 Socket FrontEnd 调用一个实际的配置模块 (如 simple 模块) 来完成请求.
图中三个程序(系统) 可以运行在同一台计算机上, 也可以运行在通过网络连接在一起的不同计算机上. 如果需要在网络中使用这种功能, 就要将 Socket FrontEnd 的套接字地址设置为网络地址, 并将客户机上 Socket Server 和 Socket Config 模块使用的套接字指向该网络地址. 下一节中将详细介绍设置方法.
要使用网络模块, 必须先下载并安装相应的软件包:
如果是通过源码编译安装的 SCIM, 则这些包可能已经安装到系统中了.
使用如下命令启动上图第一个方框所示的 SCIM 系统:
$ scim -f socket -ns socket -c simple -d
该命令启动一个运行 Socket FrontEnd 的 SCIM 进程, 使用 Simple 配置模块, 并且不调入 Socket Server 输入法模块.
使用如下命令启动上图第二个方框所示的 SCIM 系统:
$ scim -f x11 -s socket -c socket -d
该命令启动一个运行 X11 FrontEnd 的 SCIM 进程, 使用 Socket 配置模块, 并且仅调入 Socket Server 输入法模块.
以上两个命令均使用缺省的套接字地址来启动 SCIM. 要想以特定的套接字地址启动 SCIM, 可以设置环境变量:
SCIM_FRONTEND_SOCKET_ADDRESS : Socket FrontEnd 所使用的套接字地址
SCIM_SERVER_SOCKET_ADDRESS : Socket Server 所使用的套接字地址
SCIM_CONFIG_SOCKET_ADDRESS : Socket Config 所使用的套接字地址
或者直接设置 SCIM_SOCKET_ADDRESS, 该环境变量被所有网络模块所使用.
套接字地址的格式为 前缀:地址 的形式, 其中前缀可以是 inet 或者 local, 分别代表网络地址和本地 UNIX 套接字地址. 对于网络套接字, 地址的格式为 地址:端口, 例如: inet:192.168.1.1:12345. 对于本地地址, 地址是套接字文件的路径名, 例如: local:/tmp/scim-frontend-socket.
例如要启动一个运行 Socket FrontEnd 的 SCIM, 并对局域网内的其它机器提供输入法服务, 可以使用如下命令 (假设本机对外地址为 192.168.1.1):
$ SCIM_SOCKET_ADDRESS=inet:192.168.1.1:12345 scim -f socket -ns socket -c simple -d
在另外一台计算机上启动一个运行 X11 FrontEnd 的 SCIM, 并使用上台计算机提供的输入法服务, 可以使用如下命令:
$ SCIM_SOCKET_ADDRESS=inet:192.168.1.1:12345 scim -f x11 -s socket -c socket -d
GTK+-2.x 平台定义了自己的本地输入法模块接口, 允许第三方厂商为其提供特殊的本地输入法模块. 实际上 GTK+-2.x 的 XIM 输入法协议支持就是通过一个本地输入法模块来实现的.
SCIM 为 GTK+-2.x 提供了一个本地输入法模块, 可以让基于 GTK+-2.x 的应用软件直接使用 SCIM 进行输入, 而不使用基于 XIM 的 X Window 输入法. 这样不仅可以解决 GTK+-2.x 下的光标跟随问题, 而且可以摆脱 X Window 的限制, 使得很多基于 GTK+-2.x Framebuffer 的应用程序可以正常输入.
要使用 SCIM 的 GTK2 本地输入法模块, 首先要安装前面介绍的三个网络模块. 然后先下载并安装以下软件包:
注意, 该软件包仅适用于 GTK+-2.2.x 版本, 如果你的 GTK2 不是这个版本, 请下载 SCIM 的源码自行编译安装. 然后使用如下命令重新生成 GTK2 的输入法模块列表:
$ gtk-query-immodules-2.0 > /etc/gtk-2.0/gtk.immodules
SCIM 的 GTK2 本地输入法模块缺省仅使用 SCIM 的 Socket Server 输入法模块, 通过一个正在运行的 SCIM Socket FrontEnd 取得输入法服务. 因此, 首先必须启动一个运行 Socket FrontEnd 的 SCIM:
$ scim -f socket -ns socket -c simple -d
然后运行 GTK2 应用程序, 比如 gedit. 在编辑区上点击鼠标右键会弹出一个菜单. 进入"输入法"子菜单, 选择"SCIM Input Method" 即可.
如果希望 GTK2 应用程序缺省就使用 SCIM 提供的本地输入法模块, 可以设置环境变量 GTK_IM_MODULE=scim.
如果需要指定 Socket FrontEnd 使用的地址, 可以设置环境变量 SCIM_SOCKET_ADDRESS.