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

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

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

1 ответ1

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 в обоих случаях, потому что вы хотите читать 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'

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .