web-dev-qa-db-ja.com

OSXでUbuntuをVMとして実行している場合、欠落しているキープレスを修正するにはどうすればよいですか?

環境

  • OSX 10.7.4
  • 2010年中期iMac
  • VirtualBox 4.1.18
  • Ubuntu Precise Pangolin(すべてのアップデートが適用されています)

問題

新しいVirtualBox vmを作成し、標準のデスクトップISOからPreciseをインストールしました。インストールの一部として、「English UK(Mac International)」キーマップを選択しました。すべてのキーが正しい文字を出力しているようですが、一部のキーでは、キーを2回押すまで文字が登録されません

たとえば、最初に `キーを押すと、ターミナルプロンプトに文字が表示されません。ただし、2回目は機能します。

これは、他の一部のキーとシフトの組み合わせでも発生します。つまり、〜(shift + `)も影響を受けます。

詳細情報

  • これはVM問題ではないようです。PreciseをVMware Fusionにインストールしましたが、まったく同じ問題が発生しているようです。
  • 私が入力している速度とは関係ありません。キーを押し、数秒待ってからもう一度押すと、同じ動作が得られます。
  • 別のキーボードレイアウト(英語UK拡張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

2回目のキープレス:

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

3回目のキープレス:

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

追加の「Grave」キーを押すと、他のすべての物理的なキーを押すだけで放出されるようです。

1
johnstok

これらのキーのキーボードマップは正しくないようです。最も簡単な解決策は、xmodmapを介して次の修正を行うことです。

$ xmodmap -e 'keycode 94 = Grave asciitilde'
$ xmodmap -e 'keycode 48 = apostrophe quotedbl'

ログイン時にこれらの変更を適用するには、ホームディレクトリに.Xmodmapというファイルを作成し、次の内容を含めます。

keycode 94 = Grave asciitilde
keycode 48 = apostrophe quotedbl
1
johnstok

ジョンストクの答えの単なる補遺。追加

keycode 94 = Grave asciitilde
keycode 48 = apostrophe quotedbl

.Xmodmapをホームディレクトリにファイルし、実行するには

xmodmap .Xmodmap

私にとってはこれでうまくいきましたが、再起動するたびに以前の方法に戻りました。 xmodmap .Xmodmapを.bashrcファイルに挿入して、貼り付けます。

0
Jacob Stevenson