LinuxSir.cn,穿越时空的Linuxsir!

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

Debian中metacity热键失效的解决办法

[复制链接]
发表于 2004-2-5 17:56:28 | 显示全部楼层 |阅读模式
首先是困扰大家的抓屏问题,只要在.gnomerc中加上xmodmap -e "keycode 92 = j"就一切OK,或者你也可以改.xmodmaprc来解决。

原因分析:根据我的测试,gnome的热键实现原理大致流程是这样的:
首先在metacity启动的时候,或者用户修改了热键设定的时候读一下热键的键值(Keysym),换成成对应的键码(KeyCode);
然后当metacity截获到相应的KeyCode的时候,执行热键流程;

这种方法看似正确,但是却隐藏了严重bug,hoho。

因为用户可能有不同的KeyCode对应同一个Keysym,而目前metacity只是根据一个Keysym找第一个KeyCode,这样用户按了不幸排在后面的Keysym对应的键的时候,就不会起作用了!

gconf2里面记录的信息仅仅是Keysym,这也是这个严重问题的起因。如果能够改成记录KeyCode,这个问题就没有了。

验证方法,用xmodmap修改键映射,把两个KeyCode映射到一个Keysym上面,然后设定热键,这时永远只有第一个KeyCode的键生效!

回到开头说的,sid安装后默认的键码,xmodmap -pk可以看到,92对应的同样是Print Screen,而我的罗技PC键盘上面的Print Screen根据xev显示KeyCode是117!

我到现在也不知道KeyCode92是哪个神秘的键,呵呵。

这个问题可以提交给metacity开发者了吧,hoho。
发表于 2004-2-5 19:45:08 | 显示全部楼层
厉害。佩服阿。
发表于 2004-2-5 20:01:05 | 显示全部楼层
有一次我的alt+tab键失效,
怎么改也改不好。郁闷。。。
发表于 2004-6-22 10:50:58 | 显示全部楼层
不对,这个问题应该和metacity无关。
除了metacity之外,其他的窗口管理器都有这样的问题,包括xfwm4在内。
根据源码来看,窗口管理器都是调用xlibs提供的api来进行keysym到keycode的转换。所以问题应该是xlibs的,而不是Metacity的。
发表于 2004-7-15 13:11:48 | 显示全部楼层
 楼主| 发表于 2004-7-15 14:08:11 | 显示全部楼层
没错,这是keycode的问题,是debian中的xfree86键盘定义的问题,不过并非printscr键就一定没有办法识别,所以说metacity应该说还是有一定责任的。
最初由 Wingsun 发表
不对,这个问题应该和metacity无关。
除了metacity之外,其他的窗口管理器都有这样的问题,包括xfwm4在内。
根据源码来看,窗口管理器都是调用xlibs提供的api来进行keysym到keycode的转换。所以问题应该是xlibs的,而不是Metacity的。
发表于 2004-7-15 15:34:35 | 显示全部楼层
为什么我在.gnomerc或.xsession里加入xmodmap -e "keycode 92 = j"不起作用呢?
xmodmap -pk看到92对应的还是
92         0xff61 (Print)  0xff15 (Sys_Req)

而且手动运行那个命令后,也不是马上好用。而是要在gnome的热键设置里删掉Print,再添加Print才能用。
 楼主| 发表于 2004-7-15 17:35:44 | 显示全部楼层
/etc/X11/xkb/keycodes/xfree86
最直接的办法是改这个文件,把SYSRQ= 92那行注掉。
发表于 2004-7-15 18:11:19 | 显示全部楼层
最初由 shuke 发表
/etc/X11/xkb/keycodes/xfree86
最直接的办法是改这个文件,把SYSRQ= 92那行注掉。

嗯,这招起作用了。
发表于 2004-7-16 15:52:15 | 显示全部楼层
乖乖,还真的有效耶。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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