我正在尝试调试使用 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
有时您可能需要将设备重新连接到之前的主设备。
注意:最好在开始调试之前添加新指针。我还注意到,一些窗口管理器在多个光标方面存在一些问题,这会导致各种意外错误 - 例如“键入停止工作”,或者键入有效但在错误的窗口中。因此,通常启用多个光标可能不是一个好选择。