我有几个鼠标按钮映射(Fluxbox)来执行 xvkbd 命令,用于 Enter(\r)和 Ctrl+U(\Cu),这非常方便。
它适用于终端和大多数应用程序,但不适用于 GTK3 应用程序,现在 Firefox 也正在切换到它,这一点变得更加引人注目。
我通过在终端上进行测试来测试这一点:
sleep 3 && xvkbd -xsendevent -text "\Cu"
并且快速将焦点放在 GTK2 应用程序的文本字段上,它可以正常工作。当我在 GTK3 应用程序上执行此操作时,它不起作用。
其余的鼠标绑定工作正常,因此 GTK 可以识别鼠标按键但忽略指令,xvkbd -xsendevent
如上述测试所证明的那样。
有什么见解吗?
我发现的只是 2012 年的这封邮件列表邮件,没有回复,也没有太多信息:https://mail.gnome.org/archives/gtk-list/2012-May/msg00001.html
答案1
我的解决方案是更换工具,xdotool
效果很好。这似乎是因为 GTK3 已切换到 xvkbd 不支持的 X Input 2.0。
我的新按键绑定是:
xdotool key "Return"
xdotool key "Control_L+u"
替换:
xvkbd -xsendevent -text "\r"
xvkbd -xsendevent -text "\Cu"
答案2
尝试删除 -xsendevent 选项。
当指定 -xsendevent 时,xvkbd 使用 XSendEvent() 发送事件,但许多应用程序(可能包括 gtk3 应用程序)将忽略这些事件。
如果在 xvkbd 编译时启用了 XTEST 支持并且 X 服务器也启用了 XTEST,则在未指定 -xsendevent 的情况下 xvkbd 将使用另一种机制,即 XTEST 扩展。