我需要使用Fn+CTRL作为组合键,但它在 openbox 中不起作用(在 XFCE / KDE4` 中起作用)。
<keybind key="Fn-C">
<action name="ToggleMaximize">
</action>
</keybind>
动作名称完全正确,它可以与其他组合键一起使用,例如W-3
。
那么,有什么想法吗?
答案1
不同的窗口管理器可以使用不同的键盘映射,并且键映射定义了如何Fn识别您的按键。这就是为什么在 XFCE 中有效的方法不一定在 Openbox 中有效。
要检查 X(和 Openbox)如何解释您的Fn密钥,请按照本指南。
根据结果,您可以使用适当的键符号rc.xml
代替Fn。
Fn例如,在我的 Thinkpad 上被识别XF86WakeUp
。如果没有分配符号,您可以使用 xmodmap 手动分配一个符号,如下所示本指南然后在 中使用该符号rc.xml
。
进一步调查发现,Fn 是某些笔记本电脑(如 IBM/Lenovo Thinkpad)上的特殊键,因为Keypress
和Keyrelease
事件(或Keydown
用Keyup
Microsoft 术语来说)是同时生成的,并且仅在释放该键时才会生成。按下时进一步按键Fn将不会被记录*。和西夫,您可以轻松检查您的系统是否也出现这种情况。
这意味着Fn不能用作修饰键(与Alt,Ctrl或等其他键组合Shift)。不过,它可以单独指定为快捷方式。结合Openbox 的钥匙扣,这几乎与将其用作修饰符一样好。您只需在按下与之组合的键之前释放它即可。
* 必须有一些Fn至少在 Thinkpad 上注册按键的方式是这样的,因为联想自己的 Windows 工具确实会对Fn其他按键做出反应。但这似乎发生在非常低的水平。当我在 Windows 主机上的 VMWare 来宾中时,按Fn加键会在 Windows 主机中打开相应的工具,而不是在来宾操作系统中。研究类似 Thinkpad 工具在 Linux 上的实现,看看它们如何处理Fn.
这里您可以找到有关Fn+Fx键组合如何生成 ACPI 事件的更多特定于 Thinkpad 的信息,这就是 Thinkpad 工具的反应。但是,我认为这些事件仅针对特定的按键组合生成Fx,而不针对其他按键组合生成。
该页面还介绍了如何使 ACPI 事件触发按键事件。然而,如果Fnkeydown 和 keyup 不生成它们自己的单独事件(我相信它们在 Thinkpad 上不会),那么这并不能真正让您更进一步。
答案2
自从我离开像 Fluxbox/openbox 之类的极简窗口管理器以来已经有一段时间了,但我记得这里有一些提示:
您实际上可以使用以下命令查看特定击键组合的键码西夫(1)
您可以使用使用xmodmap(1) 将某些键码绑定到 X 事件。
查看 xev 和 xmodmap 的联机帮助页;)