Можно ли использовать мою ручку регулировки громкости клавиатуры и получить клавишу хоста в Virtual Box?

0

Я использую VirtualBox в Windows для создания виртуальной машины Linux. Виртуальная машина Linux прекрасно работает, за исключением одного: ручка громкости на моей клавиатуре (игровая клавиатура Azio L70) в ней не работает.

Чтобы исправить это, я попытался добавить исключение USB для клавиатуры, и волшебным образом клавиатура и ее ручка регулировки громкости начали работать ... в основном. По какой-то странной причине, как только я, кроме клавиатуры, перестает работать ее управляющая клавиша (правый CTRL). Вернее, он работает, но как обычный ключ CTRL, а не как ключ хоста. То же самое верно, если я пытаюсь изменить ключ хоста на любой другой ключ.

Итак, мой вопрос: кто-нибудь знает, как исправить распознавание ключа хоста в виртуальной коробке, где клавиатура имеет исключение USB? Это действительно расстраивает, когда приходится выбирать между регулятором громкости и возможностью входить / выходить из полноэкранного режима.

machineghost
источник

Ответы:

3

Я не знаю, как решить вашу проблему, тем не менее, я постараюсь объяснить ваш опыт, дать некоторое представление и, возможно, подготовить почву для реального решения.


В нормальных условиях ваша хост-ОС эмулирует клавиатуру для вашей виртуальной ОС. Хост передает нажатия клавиш с некоторыми исключениями и переводами (которые вы можете настроить там, где вы изменили свой ключ хоста). Насколько я могу судить, эмулируемая клавиатура появляется в виртуальной ОС как клавиатура PS / 2.

Я предполагаю, что ваша ручка громкости генерирует нажатия клавиш (как клавиши громкости), если она вращается и «пропускает» как колесо мыши; или он проходит уровень громкости, если он зафиксирован 0 а также 100% позиции. В любом случае для простоты я буду называть эти входы «нажатиями клавиш».

Ваша виртуальная ОС не реагирует на ручку регулировки громкости. Возможные причины:

  • ОС хоста может фиксировать эти нажатия клавиш и никогда не передавать их в VirtualBox.

Моя операционная система - Kubuntu Linux с KDE. Я сделал тест: VLC получает Увеличить громкость , Убавить звук а также безгласный ключи, только если они не зарегистрированы как глобальные горячие клавиши в KDE. Это заставляет меня поверить, что глобальные горячие клавиши должны быть отключены, только тогда клавиши управления громкостью могут попасть в VirtualBox. Я не знаю, работает ли так же в Windows. Я также не знаю, можно ли отключить глобальные горячие клавиши в Windows так же легко, как я могу сделать это в KDE.

  • VirtualBox может отбрасывать эти нажатия клавиш и никогда не передавать их в виртуальную ОС.

Моя виртуальная ОС не будет реагировать на клавиши регулировки громкости, даже если я отключу глобальные горячие клавиши в Kubuntu KDE. В моем случае виртуальная ОС - это Windows XP. В настоящее время я не могу сказать, получает ли он какие-либо нажатия клавиш, связанные с объемом вообще. Когда (если) я проведу дополнительные тесты, я обновлю свой ответ.

  • Виртуальная ОС может получать некоторые нажатия клавиш, но они могут быть недействительными.

Предположим, что VirtualBox передает нажатия клавиш виртуальной ОС как есть. Этот стол показывает, что коды отличаются для USB и PS / 2. Ваша клавиатура, вероятно, генерирует коды USB, но виртуальная ОС работает с (эмулированной) клавиатурой PS / 2 и ожидает коды PS / 2. Я пробовал несколько разных клавиатурных драйверов в моей виртуальной XP, но ни один из них не заставил работать регулятор громкости, но помните, я не уверен, что нажатия клавиш в первую очередь доходят до виртуальной ОС.

  • Другая (?) Причина.

Но вам удалось заставить вашу ручку регулировки громкости работать в виртуальной ОС. Если я правильно понимаю фразу «исключение USB», вы подключили устройство к своей виртуальной ОС и пропустили его.

Это означает, что ваш VirtualBox захватил клавиатуру и подключил ее полу-непосредственно к вашей виртуальной ОС. Виртуальная ОС увидела клавиатуру USB в стороне от эмулируемой клавиатуры, установила надлежащие драйверы и начала работать с ней как с клавиатурой USB, а не с эмулированной PS / 2. VirtualBox передавал всю USB-связь между клавиатурой и виртуальной ОС. Вот почему твоя ручка сработала.

Но! Для захвата USB-связи VirtualBox пришлось отсоединить клавиатуру от хоста ОС. Работая с виртуальной, вы, возможно, не заметили, что клавиатура исчезла из хост-системы. Тогда это было «какое-то устройство, используемое исключительно VirtualBox», а не функциональная клавиатура для вашей операционной системы. Вот почему Ключ Хоста не работал.

Чтобы проверить это, вы можете запустить виртуальную ОС в окне, подключить к ней клавиатуру, как вы делали это раньше, и переключиться на другое (хост) приложение, щелкнув мышью. Клавиатура не будет работать вне виртуальной ОС. Когда вы выключите виртуальный компьютер, клавиатура будет снова подключена к вашей операционной системе.


Вопрос о том, получает ли виртуальная ОС нажатие клавиш управления громкостью или нет, остается открытым. На данный момент я бы сказал, что вам, вероятно, нужно немного кодирования, чтобы оно заработало. Либо кто-нибудь ( ты можешь! ) следует реализовать перевод кодов с USB на PS / 2 (если это проблема) или эмуляцию клавиатуры USB вместо PS / 2. Существует возможность эмулировать указательное устройство USB (см. этот ) но, похоже, это не влияет на эмуляцию клавиатуры.


Обновить:

Комментарий ОП:

Есть ли какие-либо диагностические действия (в исключительном случае, кроме USB), которые я могу предпринять, чтобы определить, как далеко продвигаются «нажатия клавиш» регулятора громкости? Другими словами, есть ли способ, которым я могу выяснить, являются ли «нажатия клавиш» А) не переходящими в Виртуальный ящик, Б) отбрасываемыми или С) неправильно передаваемыми?

Так уж сложилось, что вчера был задан еще один вопрос о мультимедийных клавишах. Я провел исследование, и теперь я знаю еще несколько хитростей. Мой ответ на заданный вопрос может быть адаптирован к вашим потребностям, то есть вы можете использовать xinput в вашем виртуальном Linux определить две вещи:

  1. какие коды клавиш обнаруживаются при использовании ручки регулировки громкости, и она работает на виртуальной машине с подключенной к ней клавиатурой в режиме сквозного подключения USB (подозреваю 122 а также 123 );
  2. какие коды клавиш (если таковые имеются) обнаруживаются в виртуальной ОС, когда вы используете ручку регулировки громкости при нормальной работе клавиатуры, подключенной к Windows.

Обратите внимание, вы должны использовать разные id -s в обоих случаях, потому что вы хотите прочитать USB-клавиатуру или эмулируемую клавиатуру (вероятно, AT Translated Set 2 keyboard ) соответственно.

Я сделал что-то подобное. Я запускаю виртуальный Knoppix в моем обычном Kubuntu. Я отключил глобальные горячие клавиши и убедился, что клавиши управления громкостью попадают в VLC, поэтому они также должны попасть в VirtualBox, когда его окно активно. Однако я не получил ответа от них xinput в виртуальном Knoppix, в то время как другие «стандартные» ключи были распознаны. Я считаю, что у меня есть (B) ситуация здесь. Для записи: мой VirtualBox 4.3.36_Ubuntu r105129,

VirtualBox может работать по-другому под Windows, но, честно говоря, я сомневаюсь

Если по какой-либо причине вы получили несколько кодов клавиш в (2), это означает, что это то, что вы назвали (C). Коды не могут быть такими же, как в (1), иначе проблема не возникнет. Давайте предположим, что у вас есть 250 а также 251 (просто пример, я составил эти цифры). В вашем виртуальном Linux вызовите:

xmodmap -e 'keycode 250 = XF86AudioLowerVolume'
xmodmap -e 'keycode 251 = XF86AudioRaiseVolume'

Это должно сопоставить эти коды с соответствующими действиями.

Хорошая новость: даже если ничего не получится, вы, вероятно, все еще сможете использовать xmodmap связать регулировку громкости с клавишами, которые работают с эмуляцией клавиатуры VirtualBox. Если вы редко используете NUM- а также NUM + затем переназначить их:

xmodmap -e 'keycode 82 = XF86AudioLowerVolume'
xmodmap -e 'keycode 86 = XF86AudioRaiseVolume'

Я пытался переназначить их комбинацию с сдвиг только, но это оказалось не так просто, как я ожидал, по крайней мере, в моей настройке (мне нужно узнать больше) Во всяком случае, подсказка: invoke xmodmap -pke | less и учиться на этом. Ваши изменения с xmodmap должен быть отменен после (виртуальной) перезагрузки, поэтому не бойтесь экспериментировать. Или лучше сделать снимок вашей виртуальной машины на всякий случай.

В конце концов, переназначение некоторых клавиш не может быть плохой идеей, даже если был способ заставить вашу ручку работать так, как вы хотите. Если бы я был тобой, я бы подумал о том, чтобы посвятить ручку тому из Windows, а что-то другому - виртуальному тому Linux.

Kamil Maciorowski
источник
Вау, спасибо за тщательный ответ! Есть ли какие-либо диагностические действия (в исключительном случае, кроме USB), которые я могу предпринять, чтобы определить, как далеко продвигаются «нажатия клавиш» регулятора громкости? Другими словами, есть ли способ, которым я могу выяснить, являются ли «нажатия клавиш» А) не переходящими в Виртуальный ящик, Б) отбрасываемыми или С) неправильно передаваемыми?
machineghost
@machineghost Я расширил свой ответ.
Kamil Maciorowski
Ты обалденный! Спасибо за подробное объяснение и решение.
machineghost