LinuxSir.cn,穿越时空的Linuxsir!

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

输入法崩溃问题

[复制链接]
发表于 2003-7-3 18:06:30 | 显示全部楼层 |阅读模式
各位大侠,我想提个问题,为什么fcitx异常退出后,其他用到输入法的程序,xchat、xterm等等全都跟着退出了,这个问题很严重啊,有什么解决方法么
发表于 2003-7-4 18:21:24 | 显示全部楼层

回复: 输入法崩溃问题

最初由 x11 发表
各位大侠,我想提个问题,为什么fcitx异常退出后,其他用到输入法的程序,xchat、xterm等等全都跟着退出了,这个问题很严重啊,有什么解决方法么


我想这应该是个很好的问题。以前我在FreeBSD下使用fcitx 1.8.4的时候,就曾经遇到这个问题。但是倒不是fcitx异常退出了,而是我把它kill了。当时我的X下的控制台倒是没有异常退出而是没有响应了。

对于x11所说的情况就有点难于理解了。怎么会哪?fcitx和使用fcitx服务的程序是不同的进程。他们之间不存在直接的联系,他们通过XIM协议来通信。如果出现了这种情况,我想他们在XIM协议的客户端的实现上有问题。如果他们使用了IMkit,那么有可能是IMkit的问题。如果说这些程序没有响应了,我想这是正常的。

当然了,呵呵,fcitx最好不要异常退出。我个人还没有仔细研究过XIM的实现问题。XIM是否能够unregister?如果能的话,就可以保证操作系统的稳定性。

以下的内容是我对XIM的某些推测:

当在环境变量中指定某种输入法后。每当那些支持XIM的程序启动的时候,X Server都会为他们和建立一个连接。这种连接的形式我还没有搞清楚。是X Server->input server->client还是input server<->client。我感觉后者的可能性比较大。建立连接后,client上输入的每个字符都会通过input server。并由input server来解释最终的结果,包括ctrl+space这样的输入。然后,client才获得实际的结果。当我键入killall fcitx回车时,回车字符再也不会回来了。因为fcitx已经被kill了。因此我的控制台没有响应了,因为它还在等那个回车字符回来。但我感觉很奇怪,既然时ICE连接,而且这东西基本上时基于TCP的,为什么没有超时哪?时client没有识别这方面的能力还是X Server没有管理这方面内容的能力?呵呵,看了还要再研究研究。
发表于 2003-7-4 18:31:22 | 显示全部楼层

回复: 回复: 输入法崩溃问题

X Server, X lib 和 XIM 机制本身是没有问题的。问题出在 Input Server 和 Client 上面。

Input Server 如果没有正确处理 Clients 异常退出的情况,可能导致自己崩溃。Client 也是同样的道理。主要错误类型其实就是 BadWindow。如果 Client 突然退出了,其窗口当然也就销毁了,如果这个时候 Input Server 再向这个 client 窗口发送输入,就会触发 BadWindow 错误,极有可能导致 Input Server  退出。反之也是类似的。

不过 XIM 和 X lib 其实提供了机制来避免这种问题,只是很多程序没有使用罢了。


最初由 stormful 发表
我想这应该是个很好的问题。以前我在FreeBSD下使用fcitx 1.8.4的时候,就曾经遇到这个问题。但是倒不是fcitx异常退出了,而是我把它kill了。当时我的X下的控制台倒是没有异常退出而是没有响应了。

对于x11所说的情况就有点难于理解了。怎么会哪?fcitx和使用fcitx服务的程序是不同的进程。他们之间不存在直接的联系,他们通过XIM协议来通信。如果出现了这种情况,我想他们在XIM协议的客户端的实现上有问题。如果他们使用了IMkit,那么有可能是IMkit的问题。如果说这些程序没有响应了,我想这是正常的。

当然了,呵呵,fcitx最好不要异常退出。我个人还没有仔细研究过XIM的实现问题。XIM是否能够unregister?如果能的话,就可以保证操作系统的稳定性。

以下的内容是我对XIM的某些推测:

当在环境变量中指定某种输入法后。每当那些支持XIM的程序启动的时候,X Server都会为他们和建立一个连接。这种连接的形式我还没有搞清楚。是X Server->input server->client还是input server<->client。我感觉后者的可能性比较大。建立连接后,client上输入的每个字符都会通过input server。并由input server来解释最终的结果,包括ctrl+space这样的输入。然后,client才获得实际的结果。当我键入killall fcitx回车时,回车字符再也不会回来了。因为fcitx已经被kill了。因此我的控制台没有响应了,因为它还在等那个回车字符回来。但我感觉很奇怪,既然时ICE连接,而且这东西基本上时基于TCP的,为什么没有超时哪?时client没有识别这方面的能力还是X Server没有管理这方面内容的能力?呵呵,看了还要再研究研究。
发表于 2003-7-4 18:43:48 | 显示全部楼层

回复: 回复: 回复: 输入法崩溃问题

最初由 james_su 发表
X Server, X lib 和 XIM 机制本身是没有问题的。问题出在 Input Server 和 Client 上面。

Input Server 如果没有正确处理 Clients 异常退出的情况,可能导致自己崩溃。Client 也是同样的道理。主要错误类型其实就是 BadWindow。如果 Client 突然退出了,其窗口当然也就销毁了,如果这个时候 Input Server 再向这个 client 窗口发送输入,就会触发 BadWindow 错误,极有可能导致 Input Server  退出。反之也是类似的。

不过 XIM 和 X lib 其实提供了机制来避免这种问题,只是很多程序没有使用罢了。


窗体应该在表述上应该时句柄的概念。是否x lib提供了判断句柄有效性的函数?如果是,这个问题倒是非常容易解决。

另外,在IMkit中是否有超时判断的概念?在普通的ICE通信中,要达到哪种最坏的情况是非常困难的。但这并不是没有可能的。我现在对ICE还没有很多理解,看上去是X Server内部client数据交换的协议。但如果它具有remote能力,并且用XIM实现remote input server。出现临界点的情况就非常多了。
发表于 2003-7-4 18:48:38 | 显示全部楼层

回复: 回复: 回复: 回复: 输入法崩溃问题

最初由 stormful 发表
窗体应该在表述上应该时句柄的概念。是否x lib提供了判断句柄有效性的函数?如果是,这个问题倒是非常容易解决。

另外,在IMkit中是否有超时判断的概念?在普通的ICE通信中,要达到哪种最坏的情况是非常困难的。但这并不是没有可能的。我现在对ICE还没有很多理解,看上去是X Server内部client数据交换的协议。但如果它具有remote能力,并且用XIM实现remote input server。出现临界点的情况就非常多了。


超时判断我到没听说,好像是没有的。好像也没有判断句柄的有效性的函数。
发表于 2003-7-4 18:56:57 | 显示全部楼层
呵呵,你这个人就是不爽快。每次都要跟你挤半天牙膏。

有什么解决办法嘛。方便的话,提供个线索。

如果想和我emial联系,我的email是stormful◎hotmail.com。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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