对其他系统用户这大概都不是什么问题,但是在BSD系统上有一堆问题……
环境:FreeBSD 11, 打了个patch所以用的centos 6作为linux_base。
首先是glibc是否支持locale的问题。貌似linux_base-c6没有产生locale数据库,所以要跑build-locale-archive。
之后跑linux的locale应该就不会报错了。
其次看gtk的xim输入法模块是否启用了。找个gtk2-devel的包,从里面可以找到gtk-demo,跑他可以检验。
默认貌似只装了gtk2包,没装immodule…… 找到gtk2-immodules-xim包,把里面的im-xim.so装到/compat/linux/usr/lib/gtk-2.0/2.10.0/immodules里。这还没完,还要更新immodules列表。跑linux的gtk-query-immodules-2.0,把结果写到/compat/linux/etc/gtk-2.0/i386-redhat-linux-gnu/gtk.immodules里。之后开gtk-demo,找个文本框,右键菜单->输入法里应该有XIM了。
这时可能还是无法激活输入法。我写了个小程序检查XIM的情况:
#include <X11/Xlib.h> #include <unistd.h> #include <stdlib.h> #include <stdio.h> int main() { Display *dpy = XOpenDisplay(NULL); if (!dpy) { printf("fail to open display\n"); exit(1); } if (XSupportsLocale()) { printf("Xlib supports current locale\n"); } char *p = XSetLocaleModifiers(""); printf("current locale modifier: %s\n", p); XIM im = XOpenIM(dpy, NULL, NULL, NULL); if (!im) { printf("fail to open im\n"); exit(2); } printf("locale of IM: %s\n", XLocaleOfIM(im)); } |
如果没有显示Xlib supports current locale,那linux的libX11不支持现在的locale…… 我发现X11的locale没装,找到libX11-common包,把里面的东西解压到/compat/linux里。之后再跑就没问题了……
这些都搞完之后,gtk-demo就可以输入中文了。重启浏览器,Flash终于也可以了……