我在 Windows 7 32 位系统上的 Virtual Box 虚拟机中运行 Ubuntu 12.04。它运行良好,只是反引号/波浪号按钮卡住了(不是物理上的)。
当我按下反引号按钮时,它会一直重复,直到按下另一个输入按钮。因此,如果我在反引号重复时按下空格键,它会停止,但如果我在它重复时按下 Shift 键,反引号会变成波浪符号,波浪符号会一直重复,直到我释放 Shift 键(此时它又变成了反引号并继续重复)。
这种粘连行为仅发生在使用反引号键时,并且仅在我的 Ubuntu 虚拟化中发生,从未在 Windows 中发生。
我尝试过笔记本电脑的键盘和外接 USB 键盘,但问题都出现了。我尝试过的两个键盘都是日文 106/109 键布局,但我使用的是英文(美国)101 配置文件。当我提到上面的反引号键时,我的意思是它在美国布局中的位置。
如果我使用日语配置文件,该位置(美国反引号位置)的键仍然保留,但它不再映射为反引号键。
对于可能造成这种情况的原因以及可能的解决方案,您有什么想法吗?
我搜索了很多,但到目前为止还没有找到任何帮助。任何帮助都将不胜感激。
附加信息:我从 USB 密钥启动了 Linux,发现它没有这个卡住的密钥问题。所以这似乎是 Virtual Box 的问题。
答案1
我知道这个问题。我有一台在日本购买的 Windows 笔记本电脑,遇到了波浪键卡住的问题。
如您所知,波浪号键在日语窗口中用于面向日语的 IME 切换,并且日语键盘在该键上包含用于此效果的标记。
我对这个问题进行了一些深入研究,但失去了动力。我的一些微不足道的发现总结如下:
VirtualBox 在虚拟机窗口中不会捕获普通的 Windows WM_KEY 事件。相反,它会注册一个低级键盘钩子
LowLevelKeyboardProc
.查找这个 VirtualBox 源文件。我怀疑在日语 Windows 中,由于波浪号键的特殊作用,当释放该键时不会生成向上事件。由于 VirtualBox 需要对虚拟化系统进行扫描码的忠实模拟,因此看起来波浪号键被按下了。
虽然我能够使用 Spy++ 监视流入 VirtualBox 窗口的事件,但无法看到低级事件。VirtualBox 配置 UI 中有正常的按键事件流入,但机器窗口却什么都没有。甚至 VirtualBox 本身的 UI 热键(不是发往机器的)似乎都是通过该低级钩子处理的。
因此,测试这个假设需要编写一个示例程序,以相同的方式拦截键盘事件,并显示波浪键的“按下”和“向上”没有匹配。虽然我已经在用 Visual Studio,而且它并不复杂,但对于这个愚蠢的问题来说,这实在是太费劲了。
无论如何,尽管调查不完整,但我认为这是一个 Ubuntu 问题的可能性很小。