如何将 Ctrl+Alt+F1(和其他特殊按键)发送到 X 窗口?

如何将 Ctrl+Alt+F1(和其他特殊按键)发送到 X 窗口?

当我按下Ctrl+ Alt+时F{1..12},它会切换到其他虚拟终端。

甚至xte "keydown Control_L" "keydown Alt_L" "key F1" "keyup Alt_L" "keyup Control_L"导致切换到 vt 而不是将该键发送到焦点窗口。

此类用例包括(但不限于)将特殊按键发送到 VNC 或虚拟化客户端,由客户端/客户系统而不是主机系统处理。有时(例如在 VirtualBox 中)应用程序会明确将某些特殊替代按键映射到这些特殊按键(例如VirtualBox 中的Ctrl+ Alt+DelCtrl+ Alt+ Backspace),但我想要干净且通用的解决方案。

答案1

让我们调用Ctrl++ AltFx其中Fx是功能按钮之一:F1F2F3...) srvr 键。
有一种方法可以动态禁用/启用 srvr 键。我所说的禁用是指 X11 不会吞掉它们,而是传递给窗口管理器(kde 中的 kwin)。

要禁用 srvr 键,请运行setxkbmap -option srvrkeys:none
要启用 srvr 键,请运行setxkbmap -option
要检查srvr_ctrl(无srvr_keys)标志已启用,运行setxkbmap -print | grep xkb_symbols

在 kde 中,可以执行窗口操作(例如,在窗口获得或失去焦点时执行某些命令)。因此,您可以在特殊应用程序窗口获得焦点时自动禁用 srvr 键,并在失去焦点时自动启用它们。这是通用解决方案。适用于 TeamViewer、VirtualBox、Chrome 远程桌面、ipkvm viewer、krdc 等应用程序。
如果您感兴趣,这是我为此使用的脚本:https://github.com/Ashark/aten-ip8000/blob/master/srvrkeys

答案2

对于 VirtualBox,请尝试组合键相对+ F1。这里,相对是用于在 VirtualBox 窗口中释放鼠标抓取的键,通常是右 Ctrl 或 Alt 键。

答案3

无法发送 Ctrl+Alt+F[1..12],因为虚拟终端与 VNC 连接到的桌面是分开的。

相关内容