VirtualBoxでキーボードレイアウトを変更する

VirtualBoxでキーボードレイアウトを変更する

私はLinuxでVirtualBoxを実行しています。 (virtualboxUbuntu 14.04の4.3.10パッケージは重要ですが、バージョンに依存しないソリューションを好んでいます。)ホストコンピュータ(X11の下)でキーボードレイアウトを調整しました。

特に、左側の「Windows」キー(LWINXKB用)はxmodmapで構成されて送信されます。

keycode 133 = Hyper_L

VirtualBox 仮想マシンでは、キーはまったく認識されません。確認するためにLinuxコンソールを実行しましたが、showkeyこのキーを押しても反応しませんでした。

LWIN仮想マシンで正しいキーコードを送信する方法は?トリガーは特定の物理キーまたはキーHyper_Lシンボルである可能性があります。もちろん、他のアプリケーションは影響を受けてはいけません。 xmodmap 行はそのまま残ります。

私はSawfishをウィンドウマネージャとして使用します。 Sawfish 特定のソリューションが可能ですが、役に立つかどうかはわかりません。ウィンドウごとのキーバインディングを定義できますが、修飾キーを個別に定義することはできません。 Windows VMを実行したいので、キーと同じ組み合わせではなく、キープッシュとLWINリリースイベントをVMに個別に渡す必要があります(クリック→キーイベントをVMに転送)。LWIN

CAPSキーが修飾子であるため、これが難しい場合は、()キー(キー記号()Caps Lockにバインドされており、修飾子なし)がLWINとして表示されるようにリセットします。仮想デバイス。Mode_switchAltGr

答え1

virtualboxの起動に使用できるbashスクリプトを作成し、スクリプトを起動するときにLWINをデフォルト値に再設定してキーボードコードを渡すのに問題がないようにすることができます。その後、必要に応じて仮想マシン自体でxmodmapを使用できます。

私の解決策がうまくいかない場合は、次の2つのスレッドを確認することをお勧めします。似たような問題がある方がいましたが、お使いいただけると思いました。私の考えでは、これは私よりも良い解決策になることができると思います。頑張ってください!

http://ubuntuforums.org/showthread.php?t=1291982

https://forums.virtualbox.org/viewtopic.php?f=7&t=23419

答え2

これまでに私がしたことは、Sawfishで1ウィンドウあたりのキーバインディングをある程度実装することでした。xmodmapフォーカス変更を呼び出すフックを定義しました。競合状態が発生しやすいが、実際には問題にならない。私はクラスウィンドウに入ったときにキーコード133のキーシンボルを切り替えますVirtualBox(これは仮想マシンだけでなく管理者にも機能しますが、私がすることには重要ではありません)。

(define (add-window-class-matcher class-regexp . assignments)
  "Declare properties for windows whose class matches CLASS-REGEXP.
The string matched against is the X class followed by a slash
followed by the X instance, e.g., \"XTerm/xterm\"."
  (apply add-window-matcher 'WM_CLASS class-regexp assignments))

(define (per-window-keymap-hook window index)
  (let ((xmodmap-expressions-property (window-get window 'xmodmap-expressions)))
    (if (symbolp xmodmap-expressions-property)
        (setq xmodmap-expressions-property
              (symbol-value xmodmap-expressions-property)))
    (when xmodmap-expressions-property
      (let ((expressions (nth index xmodmap-expressions-property))
            (args ()))
        (when expressions
          (while expressions
            (setq args (cons (car expressions) (cons "-e" args))
                  expressions (cdr expressions)))
          (apply call-process nil nil "xmodmap" (nreverse args)))))))
(define (per-window-keymap-in-hook window focus-mode)
  (per-window-keymap-hook window 0))
(define (per-window-keymap-out-hook window focus-mode)
  (per-window-keymap-hook window 1))
(add-hook 'focus-in-hook per-window-keymap-in-hook)
(add-hook 'focus-out-hook per-window-keymap-out-hook)

(define virtualbox-xmodmap-expressions
  '(("keycode 133 = Super_L")
    ("keycode 133 = Hyper_L")))
(add-window-class-matcher "^VirtualBox/"
  `(xmodmap-expressions . virtualbox-xmodmap-expressions))

いつか、キーボード構成をXKBに切り替えて実行することもできます。知識ベース

答え3

VirtualBoxは、そのキーの解釈された意味ではなく、キーコードを仮想マシンに渡します。キーコードマッピングはより高いレベルにあり、ホストXサーバーに各キーコードを意味として解釈するように指示します。

つまり、Virtualboxはさまざまな経験的方法を使用して、使用しているキーボードを識別し、一種のマッピングを実行します。提出されたチケットによると、これは混乱するプロセスであり、しばしば関連するキーボードがどのように見えるかを正確に知る必要があるvirtualboxの担当者を含むと言いたいと思います。

これにより、正しい方向に行くことができます。 https://forums.virtualbox.org/viewtopic.php?f=7&t=57120。誰かが同様の問題に遭遇して解決したようです。 Windowsや他のゲストでxmodmapマッピングを実行しているように見えますが、以前に非アクティブキーを操作できるように見えるので、必要なことが可能であることを示し、どのように情報がLinux仮想マシンでテストされます。

関連情報