环境
- OSX 10.7.4
- 2010 年中 iMac
- VirtualBox 4.1.18
- Ubuntu Precise Pangolin(已应用所有更新)
问题
我创建了一个新的 VirtualBox vm,并从标准桌面 ISO 安装了 Precise。作为安装的一部分,我选择了“English UK (Mac International)”键位图。所有键似乎都发出了正确的字符,但是,对于某些键直到我按下两次键后,字符才会被注册。
例如,我第一次按下 ` 键时,终端提示符下没有出现任何字符。但是,第二次就可以了。
这也发生在一些其他键和 Shift 组合上 - 例如 ~ (shift + `) 也会受到影响。
更多信息
- 这似乎不是虚拟机问题。我在 VMware Fusion 下安装了 Precise,似乎也出现了完全相同的问题。
- 这与我的打字速度无关。我可以按下该键,等待几秒钟,然后再次按下它,我得到相同的行为。
- 切换到另一种键盘布局(英国英语扩展 WinKeys)后,反引号字符的问题仍然存在(您必须按下键盘上的 § 键)。按下 ` 键会立即发出一个字符 ()。换句话说,问题似乎与特定字符有关,而不是特定键发出的硬件代码。
xev 输出
第一次按键:
KeyPress event, serial 30, synthetic NO, window 0x4a00001,
root 0x138, subw 0x0, time 3935772, (317,33), root:(320,141),
state 0x0, keycode 94 (keysym 0xfe50, dead_grave), same_screen YES,
XLookupString gives 1 bytes: (60) "`"
XmbLookupString gives 0 bytes:
XFilterEvent returns: True
KeyRelease event, serial 33, synthetic NO, window 0x4a00001,
root 0x138, subw 0x0, time 3935884, (317,33), root:(320,141),
state 0x0, keycode 94 (keysym 0xfe50, dead_grave), same_screen YES,
XLookupString gives 1 bytes: (60) "`"
XFilterEvent returns: False
第二次按键:
KeyPress event, serial 33, synthetic NO, window 0x4a00001,
root 0x138, subw 0x0, time 3939630, (317,33), root:(320,141),
state 0x0, keycode 94 (keysym 0xfe50, dead_grave), same_screen YES,
XLookupString gives 1 bytes: (60) "`"
XmbLookupString gives 0 bytes:
XFilterEvent returns: True
KeyPress event, serial 33, synthetic NO, window 0x4a00001,
root 0x138, subw 0x0, time 3939630, (317,33), root:(320,141),
state 0x0, keycode 0 (keysym 0x60, grave), same_screen YES,
XLookupString gives 0 bytes:
XmbLookupString gives 1 bytes: (60) "`"
XFilterEvent returns: False
KeyRelease event, serial 33, synthetic NO, window 0x4a00001,
root 0x138, subw 0x0, time 3939777, (317,33), root:(320,141),
state 0x0, keycode 94 (keysym 0xfe50, dead_grave), same_screen YES,
XLookupString gives 1 bytes: (60) "`"
XFilterEvent returns: False
第三次按键:
KeyPress event, serial 33, synthetic NO, window 0x4a00001,
root 0x138, subw 0x0, time 3956078, (317,33), root:(320,141),
state 0x0, keycode 94 (keysym 0xfe50, dead_grave), same_screen YES,
XLookupString gives 1 bytes: (60) "`"
XmbLookupString gives 0 bytes:
XFilterEvent returns: True
KeyRelease event, serial 33, synthetic NO, window 0x4a00001,
root 0x138, subw 0x0, time 3956214, (317,33), root:(320,141),
state 0x0, keycode 94 (keysym 0xfe50, dead_grave), same_screen YES,
XLookupString gives 1 bytes: (60) "`"
XFilterEvent returns: False
额外的“重音”按键似乎仅在每次其他物理按键按下时发出。
答案1
看来这些键的键盘映射不正确。最简单的解决方案是通过 xmodmap 进行以下更正:
$ xmodmap -e 'keycode 94 = grave asciitilde'
$ xmodmap -e 'keycode 48 = apostrophe quotedbl'
为了在登录时应用这些修改,您可以.Xmodmap
在主目录中创建一个名为的文件,其内容如下:
keycode 94 = grave asciitilde
keycode 48 = apostrophe quotedbl
答案2
这只是 Johnstok 答案的附录。添加
keycode 94 = grave asciitilde
keycode 48 = apostrophe quotedbl
到主目录中的文件 .Xmodmap 并运行
xmodmap .Xmodmap
对我来说,这个方法奏效了,但每次我重启时它都会恢复到原来的样子。我必须将其放入xmodmap .Xmodmap
我的 .bashrc 文件中才能让它生效。