在 OSX 下以 VM 形式运行 Ubuntu 时,如何修复缺少的按键?

在 OSX 下以 VM 形式运行 Ubuntu 时,如何修复缺少的按键?

环境

  • 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 文件中才能让它生效。

相关内容