저는 Linux에서 VirtualBox를 실행하고 있습니다. ( virtualbox
Ubuntu 14.04의 4.3.10 패키지는 중요하지만 버전 독립적인 솔루션을 선호합니다.) 호스트 컴퓨터(X11 아래)에서 키보드 레이아웃을 조정했는데 이로 인해 VirtualBox가 특정 키 입력을 잘못 해석하게 된 것 같습니다.
특히 왼쪽 "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
지금까지 내가 한 일은 Sawfish에서 창당 키 바인딩을 어느 정도 구현하는 것이었습니다. 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 가상 머신에서 테스트됩니다.