私はLinuxでVirtualBoxを実行しています。 (virtualbox
Ubuntu 14.04の4.3.10パッケージは重要ですが、バージョンに依存しないソリューションを好んでいます。)ホストコンピュータ(X11の下)でキーボードレイアウトを調整しました。
特に、左側の「Windows」キー(LWIN
XKB用)は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_switch
AltGr
答え1
virtualboxの起動に使用できるbashスクリプトを作成し、スクリプトを起動するときにLWINをデフォルト値に再設定してキーボードコードを渡すのに問題がないようにすることができます。その後、必要に応じて仮想マシン自体でxmodmapを使用できます。
私の解決策がうまくいかない場合は、次の2つのスレッドを確認することをお勧めします。似たような問題がある方がいましたが、お使いいただけると思いました。私の考えでは、これは私よりも良い解決策になることができると思います。頑張ってください!
答え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仮想マシンでテストされます。