停止或禁用从 shell 抓取键盘/鼠标/输入

停止或禁用从 shell 抓取键盘/鼠标/输入

我正在尝试调试使用 OIS 进行输入的全屏应用程序。该程序控制鼠标和键盘。

当我遇到断点时(我正在使用 gdb),我无法继续、单步执行或执行任何操作,因为我无法访问控制台。CTRL+ALT+F1 可让我进入 shell,在那里我可以终止 gdb,但这没有帮助(因为我仍然想单步执行/回溯等)。

相反,我想按 CTRL+ALT+F1,然后“禁用”暂停的全屏应用程序的抓取功能,可能使用一些命令行工具。有这样的程序吗?

我知道有一些可以添加到 OIS/我的程序中的黑客技术,但我想要一种外部方法。

我尝试将“AllowDeactivateGrabs”添加到 xorg.conf(按照建议这里),但这似乎不再起作用了(?)。

使用:Ubuntu 14.04 Gnome

答案1

人们可以在 StackOverflow 上尝试一个答案:https://stackoverflow.com/questions/23795010

对于全屏应用程序 barteks2x 建议运行单独的 x 服务器并通过 Ctrl-Alt-Fn 切换到它可能会很有用。

他提出了 5 条建议。我发现其中有用且在 shell 中完成的部分已复制到此处。这是直接复制自barteks2x 回答

您可以使用 xinput 添加第二个鼠标指针:

  • 运行 xinput create-master pointer-name。屏幕上应出现第二个鼠标指针。这将创建键盘/指针对,您无需对第二个添加的键盘执行任何操作。它不会连接到任何物理设备。

  • 运行 xinput list 列出所有设备

    在我的笔记本电脑上它看起来像这样:

 ⎡ Virtual core pointer                      id=2    [master pointer  (3)]
 ⎜   ↳ Virtual core XTEST pointer                id=4    [slave  pointer  (2)]

 ⎜   ↳ ETPS/2 Elantech Touchpad                  id=14   [slave  pointer  (2)]
 ⎜   ↳ A4Tech USB Mouse                          id=11   [slave  pointer  (2)]
 ⎣ Virtual core keyboard                     id=3    [master keyboard (2)]
    ↳ Virtual core XTEST keyboard               id=5    [slave  keyboard (3)]
    ↳ Power Button                              id=6    [slave  keyboard (3)]
    ↳ Video Bus                                 id=7    [slave  keyboard (3)]
    ↳ Video Bus                                 id=8    [slave  keyboard (3)]
    ↳ Power Button                              id=9    [slave  keyboard (3)]
    ↳ Lenovo EasyCamera                         id=10   [slave  keyboard (3)]
    ↳ Ideapad extra buttons                     id=12   [slave  keyboard (3)]
    ↳ AT Translated Set 2 keyboard              id=13   [slave  keyboard (3)]
⎡ new-mouse pointer                         id=15   [master pointer  (16)]
⎜   ↳ new-mouse XTEST pointer                   id=17   [slave  pointer  (15)]
⎣ new-mouse keyboard                        id=16   [master keyboard (15)]
    ↳ new-mouse XTEST keyboard                  id=18   [slave  keyboard (16)]
  • 新添加的鼠标指针(主设备)的 id=15。我有一个触摸板和一个外接鼠标,因此我可以将其中一个连接到新光标,而将另一个连接到旧光标。如果您没有 2 个物理设备 - 您可以保留旧指针而不连接任何物理设备。

  • 现在运行 xinput reattach slave-device-id master-device-id。例如,如果我想将触摸板连接到新指针:xinput reattach 14 15

    此后您应该能够控制新添加的指针。

  • 当你不再需要第二个鼠标指针时,请使用 xinput remove-master master-device-id,在我的情况下,它将是 xinput remove-master 15

  • 有时您可能需要将设备重新连接到之前的主设备。

    注意:最好在开始调试之前添加新指针。我还注意到,一些窗口管理器在多个光标方面存在一些问题,这会导致各种意外错误 - 例如“键入停止工作”,或者键入有效但在错误的窗口中。因此,通常启用多个光标可能不是一个好选择。

相关内容