LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1814|回复: 9

也谈Fedora7 输入法设置

[复制链接]
发表于 2007-8-17 15:33:55 | 显示全部楼层 |阅读模式
当我们从命令行启动Xwindows时,使用startx,这是个Shell脚本,我们来看看是怎么启动输入法的。
    startx -> /etc/X11/xinit/xinitrc -> /etc/X11/xinit/xinitrc-common ->/etc/X11/xinit/xinitrc.d/xinput.sh
所有的输入法设置和启动都是在/etc/X11/xinit/xinitrc.d/xinput.sh里完成的 。
  1. USER_XINPUTRC="$HOME/.xinputrc"
  2. SYS_XINPUTRC="/etc/X11/xinit/xinputrc"
  3. # Load up the user and system locale settings
  4. oldterm=$TERM
  5. unset TERM
  6. if [ -r /etc/profile.d/lang.sh ]; then
  7.     source /etc/profile.d/lang.sh
  8. fi
  9. [ -n "$oldterm" ] && export TERM=$oldterm
  10. tmplang=${LC_CTYPE:-${LANG:-"en_US.UTF-8"}}
  11. # unset env vars to be safe
  12. unset XIM XIM_PROGRAM XIM_ARGS XMODIFIERS GTK_IM_MODULE QT_IM_MODULE
  13. if [ -r "$USER_XINPUTRC" ]; then
  14.     source "$USER_XINPUTRC"
  15. elif [ -r "$SYS_XINPUTRC" ]; then
  16.     # FIXME: This hardcoded list has to be gone in the future.
  17.     _language_list="as bn gu hi ja kn ko ml mr ne or pa si ta te th ur vi zh"
  18.     for i in $_language_list; do
  19.         if echo $tmplang | grep -q -E "^$i"; then
  20.             source "$SYS_XINPUTRC"
  21.             break
  22.         fi
  23.     done
  24. fi
  25. [ -n "$GTK_IM_MODULE" ] && export GTK_IM_MODULE
  26. [ -n "$QT_IM_MODULE" ] && export QT_IM_MODULE
  27. # setup XMODIFIERS
  28. [ -z "$XMODIFIERS" -a -n "$XIM" ] && XMODIFIERS="@im=$XIM"
  29. [ -n "$XMODIFIERS" ] && export XMODIFIERS
  30. # execute XIM_PROGRAM
  31. [ -n "$XIM_PROGRAM" ] && which "$XIM_PROGRAM" > /dev/null 2>&1 && LANG="$tmplang" "$XIM_PROGRAM" $XIM_ARGS &
复制代码

    上我们来看看这个shell脚本做了些什么。从下面行开始
  1. unset XIM XIM_PROGRAM XIM_ARGS XMODIFIERS GTK_IM_MODULE QT_IM_MODULE
复制代码
先把XIM XIM_PROGRAM XIM_ARGS XMODIFIERS GTK_IM_MODULE QT_IM_MODULE
这些环境变量取消,再根据是否有$USER_XINPUTRC也就是"$HOME/.xinputrc"这个文件,决定是执行"$HOME/.xinputrc",还是系统"/etc/X11/xinit/xinputrc"脚本。这2个脚本就是进行输入法变量设置的。再根据设置的变量export GTK_IM_MODULE QT_IM_MODULE XMODIFIERS这3个环境变量,他们是其他程序运行时和输入法的接口。最后由XIM_PROGRAM运行输入法。
    建议不要去改/etc/X11/xinit/xinitrc.d/xinput.sh这个文件,我们主要改"$HOME/.xinputrc"或"/etc/X11/xinit/xinputrc",看下$HOME/.xinputrc",我的是个指向 /etc/X11/xinit/xinput.d/scim.conf的链接。在这个文件中也就是设置了XIM XIM_PROGRAM XIM_ARGS GTK_IM_MODULE QT_IM_MODULE这些变量。我们可以在/etc/X11/xinit/xinput.d/这个目录中设置我们自己的脚本文件,设置好上面几个变量。再把"$HOME/.xinputrc"链接指向我们的 文件就行。也就可以按需改变输入法。
    另,如果没有$HOME/.xinputrc"这个文件,在/etc/X11/xinit/xinitrc.d/xinput.sh会根据
  1. tmplang=${LC_CTYPE:-${LANG:-"en_US.UTF-8"}}
  2. .......
  3. .......
  4.     _language_list="as bn gu hi ja kn ko ml mr ne or pa si ta te th ur vi zh"
  5.     for i in $_language_list; do
  6.         if echo $tmplang | grep -q -E "^$i"; then
  7.             source "$SYS_XINPUTRC"
  8.             break
  9.         fi
  10.     done
复制代码
来决定是否启动"/etc/X11/xinit/xinputrc"。也就是看_language_list中每个字母组合是否为我们的tmplang头部。
    还有,在Xwindow,系统/参数/个人/输入法  的设置中,改变的就是$HOME/.xinputrc这个链接的目的。
 楼主| 发表于 2007-8-17 16:00:51 | 显示全部楼层
举例说明:
   1. 安装fcitx

  1. yum install fcitx
复制代码

    2. 在/etc/X11/xinit/xinput.d/目录中添加文件  fcitx.conf

  1. XIM=fcitx
  2. XIM_PROGRAM=fcitx
  3. XIM_ARGS=
  4. GTK_IM_MODULE=fcitx
  5. QT_IM_MODULE=fcitx
复制代码

    3. 改变$HOME/.xinputrc链接目的。

  1. rm -f $HOME/.xinputrc
  2. ls -s /etc/X11/xinit/xinput.d/fcitx.conf  $HOME/.xinputrc
复制代码

重新启动Xwindows,你会发现,你的输入法已经改为fcitx
回复 支持 反对

使用道具 举报

发表于 2007-8-17 16:56:14 | 显示全部楼层
不错,要是fcitx打包rpm的时候自动修改这些变量就好了
回复 支持 反对

使用道具 举报

发表于 2007-8-17 17:31:04 | 显示全部楼层
正找呢,
非常感谢
回复 支持 反对

使用道具 举报

发表于 2007-8-18 15:26:37 | 显示全部楼层
现在不知道为什么我的F7的QT、GTK的输入法(SCIM、GTK-PANEL)没法做成"OnTheSpot" -_-b
而F7默认应该就是这样的
回复 支持 反对

使用道具 举报

发表于 2007-8-18 15:31:52 | 显示全部楼层
"OnTheSpot"的时候,备选字是在窗口的左下角,没法光标跟随。。。
回复 支持 反对

使用道具 举报

发表于 2007-8-20 10:51:01 | 显示全部楼层
我怎么不设置什么,scim也很好用啊!fcitx注定要成为历史了!
让我记住它和纪念它吧!
SCIM的潮流不可改变!
Fedora默认已经做的很好。
回复 支持 反对

使用道具 举报

发表于 2007-8-20 12:21:17 | 显示全部楼层
连苏哲自己都要放弃的东西,也敢说是潮流?
回复 支持 反对

使用道具 举报

发表于 2007-8-20 15:57:24 | 显示全部楼层
楼上的照你说linux下的输入法应该会使用什么呢?
在这里求教了,我好回去装一下!
真的不知道SCIM要被放弃了!
回复 支持 反对

使用道具 举报

发表于 2007-8-27 14:36:02 | 显示全部楼层

  1. rm -f $HOME/.xinputrc
  2. ls -s /etc/X11/xinit/xinput.d/fcitx.conf  $HOME/.xinputrc
复制代码


ls should be ln, right?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表