Я не знаю, как решить вашу проблему, тем не менее, я постараюсь объяснить ваш опыт, дать некоторое представление и, возможно, подготовить почву для реального решения.
В нормальных условиях ваша хост-ОС эмулирует клавиатуру для вашей виртуальной ОС. Хост передает нажатия клавиш с некоторыми исключениями и переводами (которые вы можете настроить там, где вы изменили свой ключ хоста). Насколько я могу судить, эмулируемая клавиатура появляется в виртуальной ОС как клавиатура 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 определить две вещи:
- какие коды клавиш обнаруживаются при использовании ручки регулировки громкости, и она работает на виртуальной машине с подключенной к ней клавиатурой в режиме сквозного подключения USB (подозреваю
122
а также 123
);
- какие коды клавиш (если таковые имеются) обнаруживаются в виртуальной ОС, когда вы используете ручку регулировки громкости при нормальной работе клавиатуры, подключенной к 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.