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

Vi.*_*Vi. 8 linux keyboard-shortcuts xorg

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

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

这种用例包括(但不限于)向 VNC 或虚拟化客户端发送特殊的击键,以由 clinet/guest 系统而不是主机处理。有时(像在VirtualBox中)的应用显式地映射一些特殊的替代按键给特别的人(如Ctrl+ Alt+DelCtrl+ Alt+Backspace在VirtualBox中),但我想干净,通用的解决方案。

Ash*_*ark 7

让我们调用Ctrl+ Alt+ FxFx功能按钮之一:F1, F2, F3...)srvr 键。
有一种方法可以动态禁用/启用 srvr 密钥。禁用我的意思是 X11 不会吞下它们,而是传递给窗口管理器(kde 中的 kwin)。

对于diabling srvr 键,您运行setxkbmap -option srvrkeys:none
为了启用srvr 键,您运行setxkbmap -option
要检查srvr_ctrl(no_srvr_keys)标志是否已启用,请运行setxkbmap -print | grep xkb_symbols

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