多显示器设置中的 VNC 全屏抓取所有键盘输入

多显示器设置中的 VNC 全屏抓取所有键盘输入

我在 RHEL7 设置中有八个显示器,全部运行 Motif 窗口管理器 (MWM),其中一个或多个显示器仅显示 vncviewer 会话。

只要 vncviewer 是窗口式的,其行为就符合预期:键盘输入会直接发送到具有焦点的窗口。但是,VNC 窗口旨在不加修饰并使用整个屏幕。

问题是,当我将 vncviewer 置于全屏模式时,它会抓取所有键盘输入。只有它(以及其他全屏 vncviewer 会话,如果有的话)可以接收键盘输入,但我无法在非 vncviewer 窗口中输入。

TigerVNC(1.8.0、1.12.0 以及 1.12.80)和 RealVNC 6.22.515 都存在此问题。在 RealVNC 中,我可以通过将 GrabKeyboard 设置为 0 来在一定程度上操纵此行为,但这只会扭转问题:然后我可以将键盘输入发送到非 vncviewer 窗口,但当 vncviewer 处于全屏模式时,不会发送到它。

有人知道这里发生了什么导致这个问题吗?我所做的就是去掉窗口装饰并使用整个屏幕。全屏还做了什么导致这个问题?

我查看了 TigerVNC 源代码,没有发现任何可疑的东西:

public class DesktopWindow extends JFrame
{
  // ...

  public void fullscreen_on()
  {
    fullScreen.setParam(true);
    lastState = getExtendedState();
    lastBounds = getBounds();
    dispose();
    // Screen bounds calculation affected by maximized window?
    setExtendedState(JFrame.NORMAL);
    setUndecorated(true);
    setVisible(true);
    setBounds(getScreenBounds());
  }

  // ...
}

对于 TigerVNC,我在其问题跟踪器中发现了几个相关问题,但它们应该已在 1.12 中得到修复: https://github.com/TigerVNC/tigervnc/issues/447 https://github.com/TigerVNC/tigervnc/issues/931

事实上,我在使用 RealVNC 时遇到了完全相同的问题,这让我怀疑这是否真的是 TigerVNC 的一个错误。

相关内容