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