Измененная раскладка клавиатуры под VirtualBox

Попробуйте выполнить экспорт в объеме вызова Eval :

eval export ENV_${env}=some_param

Это гарантирует, что оболочка расширяется env _ $ {Env} , соответствующим образом к одному из ваших ожидаемых имен, прежде чем пытаться присвоить.

Вам также необходимо использовать EVAL При попытке получить значение, хранящееся в вашей переменной:

eval echo \$ENV_$env

Обратите внимание на обратную косание - это предотвращает попытки оболочки расширить несуществующую переменную $ Env_ , до тех пор, пока он не расширил $ env часть со встроенным EVAL . Это результат этого расширения, которая в конечном итоге передается в echo , что получает полное имя вашей динамической переменной и расширяет его, чтобы привести к тому, что вы хранятся в нем значением.

0
15.12.2015, 20:57
3 ответа

То, что я делал до сих пор, это реализация привязки клавиш к окну в Sawfish - более или менее. Я определяю хуки, которые вызывают xmodmap при смене фокуса. Это чревато гоночными условиями, но на практике это не было проблемой. Я переключаю keyym для keycode 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 и запущу kbdd.

0
28.01.2020, 05:06

Вы можете попробовать написать сценарий bash, который можно использовать для загрузки виртуального бокса, и сделать так, чтобы при запуске сценария он возвращал LWIN к значениям по умолчанию, чтобы не возникало проблем с передачей кода клавиатуры. Затем вы можете использовать xmodmap на самой виртуальной машине, если вам это нужно.

Если мое решение не сработает, я бы порекомендовал вам взглянуть на следующие две темы. У парня там была похожая проблема, и я думаю, ты сможешь ею воспользоваться. Думаю, это может быть лучшее решение по сравнению с моим. Удачи!

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

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

0
28.01.2020, 05:06

VirtualBox передает коды клавиш виртуальной машине, а не интерпретируемое значение этих клавиш. Сопоставление кода клавиш находится на более высоком уровне, сообщая вашему хост-серверу X, что интерпретировать каждый код клавиш как значение.

Тем не менее, Virtualbox использует (или использовал?) Различные эвристики, чтобы попытаться идентифицировать клавиатуру, которую вы используете, и выполняет какое-то сопоставление. Основываясь на поданных билетах, я бы сказал, что это запутанный процесс, и в нем обычно участвуют люди, работающие с виртуальными боксами, которым необходимо точно знать, на что похожа задействованная клавиатура.

Это может направить вас в правильном направлении: https://forums.virtualbox.org/viewtopic.php?f=7&t=57120 . Похоже, у кого-то была похожая проблема, и он смог ее решить. Похоже, что они выполняли сопоставление xmodmap внутри гостя, что было бы иначе с окнами, но похоже, что они смогли заставить работать ранее неактивные ключи, поэтому он предлагает то, что вы хотите, возможно, и говорит что-то о вашем метод тестирования в linux vm.

-1
28.01.2020, 05:06

Теги

Похожие вопросы