防止 Qemu / Spice 抓取绑定在其他地方的密钥

phg*_*phg 5 window-manager x11 xkb qemu spice

我的设置:带有由 libvirt 管理的 Spice 显示的 Qemu,在 X11 的 Linux 上运行。

\n\n

我\xe2\x80\x99m 正在寻找一种方法,以在 Qemu 客户端聚焦时保留窗口管理器和 X 服务器中的键绑定。一个 libvirt 或 Qemu 选项、一个编译标志或一些 X11 魔法 \xe2\x80\x93\nanything。

\n\n

一个具体的例子:当我按下按键时,Mod4+1我希望 \nWM 切换到标签1。目前,来宾接收到1输入,而 WM 则没有接收到任何内容。

\n\n

图形 Qemu 客户端(这里主要是 Windows 客户机,但\n应该\xe2\x80\x99 并不重要)似乎不加区别地获取键盘输入\n甚至绕过 xkb。从这些客户端忽略诸如 之类的选项这一事实中可以明显看出这一点capslock(swapescape)

\n\n

这会对窗口管理器造成严重破坏。例如 当我在客户端之间循环时,Qemu\n客户端聚焦时,WM\xe2\x80\x99s 绑定\n将变得无用,直到我通过将鼠标四处移动\n来取消对有问题的客户端的聚焦。不用说,这会破坏任何键盘驱动的工作流程。这\xe2\x80\x99s令人气愤。

\n\n

另外,由于输入现在被传递到客户端,因此可能会发生各种\n有趣的事情,具体取决于来宾内部的应用程序选择如何处理这些输入\xe2\x80\xa6

\n\n

编辑:上游似乎认为这是所需的行为:\xe2\x80\x9c当我们获得键盘焦点时,我们会抓住键盘,因为我们希望一旦我们获得键盘焦点\xe2\x80\x9d,任何按键都会转到虚拟机\n\xe2\x80\x93 这正是我想要避免的。没有理由\n为什么 Spice 客户端应该有权\n所有键盘输入,而不管他们是否获得焦点。

\n

小智 2

您将需要一个重新设置父窗口管理器。您的窗口管理器还需要确保键盘事件的传播从父窗口而不是从源窗口(Xlib 默认值)开始。