Продвинутый

Драйвер VMMouse для Windows NT 3.x в QEMU

Алексей Кузнецов
Алексей Кузнецов
Системный администратор23 октября 2026 г.15 мин чтения

Разбираем, как обеспечить бесшовную работу мыши в старых версиях Windows NT при использовании гипервизоров QEMU и VMware через специализированный драйвер.

Драйвер VMMouse для Windows NT 3.x в QEMU

Разбираем, как обеспечить бесшовную работу мыши в старых версиях Windows NT при использовании гипервизоров QEMU и VMware через специализированный драйвер.

Проблема интеграции периферии в старых ОС

Проблема интеграции периферии в старых ОС

Когда мы запускаем Windows NT 3.x в современной виртуальной среде, мы сталкиваемся с классическим разрывом между архитектурой «железа» и ожиданиями операционной системы. Современные гипервизоры, такие как QEMU, по умолчанию эмулируют устройства, которые для систем начала 90-х годов выглядят либо слишком сложными, либо принципиально непонятными.

С практической точки зрения, основная сложность заключается в том, что Windows NT 3.x не обладает механизмом Plug and Play в том виде, к которому мы привыкли в Windows 95 или XP. Она ожидает, что оборудование будет жестко определено при загрузке, а драйверы будут соответствовать строго конкретным стандартам шин и прерываний.

Особенности работы мыши в Windows NT 3.x

В эпоху NT 3.x взаимодействие с устройствами ввода строилось на базе очень простых протоколов. Мышь для системы — это не сложное USB-устройство с множеством дескрипторов, а последовательный порт (COM) или PS/2 контроллер, который генерирует прерывания.

Если мы используем стандартную эмуляцию USB-мыши в QEMU, Windows NT просто не увидит её. В системе нет стека USB-драйверов, способного инициализировать контроллер и распознать устройство. В результате мы получаем ситуацию, когда система загружена, рабочий стол отрисован, но курсор отсутствует, и управлять интерфейсом можно только через клавиатуру.

Чтобы добиться предсказуемости в работе ввода, нам нужно заставить гипервизор эмулировать старый добрый PS/2 контроллер. В конфигурации QEMU это выглядит следующим образом:

bash
# Использование стандартного PS/2 контроллера вместо USB
qemu-system-i386 \
  -m 32 \
  -drive file=nt3x.qcow2,format=qcow2 \
  -net nic,model=pcnet \
  -net user \
  -device ps2-mouse

Однако даже с эмуляцией PS/2 мы сталкиваемся с проблемой «залипания» или неверного масштабирования координат. Это происходит из-за того, что стандартный драйвер PS/2 в NT 3.x работает с относительными координатами, а гипервизор пытается передать абсолютные координаты современного сенсорного ввода или высокоточного трекпада.

Ограничения стандартных драйверов в виртуальной среде

Стандартные драйверы мыши, поставляемые с дистрибутивом NT 3.x, рассчитаны на работу с физическим железом, где задержки минимальны, а протокол передачи данных предельно прост. В виртуальной среде возникает дополнительный слой абстракции: гипервизор перехватывает движение мыши на хосте, преобразует его и передает гостевой ОС.

Без специализированного драйвера, понимающего протокол VMware (который QEMU умеет эмулировать через устройство vmmouse), возникают две проблемы:

  1. Отсутствие интеграции курсора: Вы не можете переместить курсор за пределы окна виртуальной машины без нажатия горячих клавиш для «освобождения» ввода.
  2. Джиттер и задержки: Движение курсора становится прерывистым, так как стандартный драйвер не может синхронизировать частоту опроса виртуального контроллера с реальным временем.

Для решения этих проблем используется драйвер VMMouse. Он реализует передачу абсолютных координат через специальный канал связи, минуя стандартную цепочку прерываний PS/2. Это позволяет системе «знать», где именно находится курсор на экране, независимо от того, как именно движется физическая мышь на хосте.

Чтобы QEMU предоставил этот интерфейс, в командной строке или конфигурационном файле необходимо явно указать устройство vmmouse:

bash
# Добавление поддержки VMMouse для бесшовного управления
qemu-system-i386 \
  -m 32 \
  -drive file=nt3x.qcow2,format=qcow2 \
  -device vmmouse

Если вы используете Libvirt для управления виртуальными машинами, настройка в XML-конфигурации будет выглядеть так:

xml
<devices>
  <input type='mouse' bus='ps2'/>
  <input type='tablet' bus='usb'/> <!-- В NT 3.x tablet не сработает, используем только vmmouse через эмуляцию -->
  <!-- Для старых систем лучше явно прописать эмуляцию через QEMU параметры -->
</devices>

Важно понимать: наличие этого устройства в конфигурации — это только половина дела. Чтобы курсор ожил, в саму Windows NT необходимо установить соответствующий .inf файл, который свяжет виртуальный интерфейс с подсистемой ввода ОС. Без этого драйвера эмуляция vmmouse будет просто висеть в системе как неизвестное устройство.

Решение через драйвер VMMouse

Принцип работы интеграционного драйвера

Когда мы запускаем классическую Windows NT 3.x в виртуальной среде, мы сталкиваемся с проблемой «залипания» курсора. В современных системах мышь работает через протоколы, которые позволяют курсору перемещаться бесшовно, но старые ОС воспринимают ввод как стандартную PS/2 мышь. Это приводит к тому, что движение курсора в гостевой системе не совпадает с реальным положением указателя, а при выходе за пределы окна виртуальной машины управление приходится перехватывать через горячие клавиши.

Решение заключается в использовании драйвера VMMouse. В отличие от эмуляции стандартного порта мыши, этот драйвер взаимодействует с виртуальным устройством на уровне гипервизора. Вместо того чтобы передавать поток координат через прерывания PS/2, драйвер обменивается данными напрямую с виртуальным устройством, которое понимает специфические команды управления.

С практической точки зрения это дает два преимущества:

  1. Абсолютное позиционирование: курсор в Windows NT движется точно так же, как на хосте, без необходимости «подгонять» скорость сенсора.
  2. Отсутствие захвата: вы можете перемещать курсор между окном виртуальной машины и основной системой без лишних манипуляций.

Совместимость с QEMU и VMware

Несмотря на то что драйвер VMMouse исторически зародился в экосистеме VMware, QEMU отлично умеет эмулировать это устройство. Это позволяет нам добиться предсказуемости поведения системы даже на таком старом железе, как NT 3.1.

Если вы используете QEMU (или его форк в составе Proxmox), вам нужно явно указать тип устройства мыши в параметрах запуска. По умолчанию QEMU может использовать ps2, что в нашем случае не даст нужного эффекта.

Чтобы настроить правильную работу, отредактируйте строку запуска вашего виртуального устройства. В конфигурации QEMU это выглядит так:

bash
# Добавьте или измените параметр мыши на usb-tablet или vmmouse
# Для старых систем лучше всего работает эмуляция через USB-tablet, 
# так как она обеспечивает абсолютное позиционирование
-device usb-tablet

Однако, если мы говорим именно о классическом VMMouse для специфических сценариев совместимости, в некоторых сборках QEMU можно встретить явное указание устройства. Но для Windows NT 3.x самым надёжным способом в среде QEMU является использование usb-tablet, так как этот драйвер встроен в современные пакеты интеграции и корректно обрабатывает абсолютные координаты.

Если же ваша задача — запуск в среде VMware Workstation или Player, то драйвер подхватывается автоматически, при условии, что в настройках виртуальной машины выбран тип контроллера, поддерживающий интеграцию.

Для проверки того, видит ли система устройство, в Windows NT можно воспользоваться диспетчером устройств. Если драйвер установлен корректно, в разделе «Mice» (Мыши) вместо стандартного «PS/2 Mouse» вы увидите специфическое устройство, связанное с VMware или USB-интерфейсом.

Если вы столкнулись с тем, что курсор всё равно «улетает» в угол экрана, проверьте, не переопределяет ли настройки вашей оболочки (например, если вы запускаете QEMU через Libvirt/Virt-Manager) параметры устройства. В XML-конфигурации Libvirt это должно выглядеть следующим образом:

xml
<input type='tablet' bus='usb'/>

Такая конфигурация гарантирует, что гипервизор будет передавать координаты в формате абсолютных значений, что и требуется для бесшовной работы.

Практическое применение и установка

Подготовка виртуальной машины

Прежде чем приступать к установке драйвера, нужно убедиться, что сама виртуальная машина в QEMU настроена на использование правильного устройства ввода. По умолчанию эмуляция стандартной PS/2 мыши работает стабильно, но она даёт ту самую задержку и «рваное» движение курсора, которые мешают комфортной работе в графическом интерфейсе.

Чтобы Windows NT «увидела» специализированное устройство, необходимо добавить в конфигурацию виртуальной машины устройство vmware-mouse. Если вы используете QEMU через командную строку, добавьте следующий флаг:

bash
# Добавление устройства VMMouse в параметры запуска QEMU
-device vmmouse

Если вы работаете через Libvirt (например, через Virt-Manager), вам нужно отредактировать XML-конфигурацию вашей машины. Найдите секцию <devices> и добавьте туда блок управления вводом:

xml
<devices>
  <!-- Другие устройства -->
  <input type='tablet' bus='usb'/> <!-- Для современных систем -->
  <input type='mouse' bus='ps2'/>  <!-- Базовый вариант -->
  <!-- Добавляем поддержку VMMouse для старых систем -->
  <input type='mouse' bus='vmmouse'/>
</devices>

С практической точки зрения, использование vmmouse позволяет гипервизору передавать координаты курсора напрямую, минуя ограничения эмуляции классических кнопок. Это обеспечивает предсказуемость движения: курсор не будет «залипать» в углах экрана или прыгать при выходе за пределы окна виртуализации.

Развертывание драйвера в системе

Когда виртуальная машина запущена и устройство определено на уровне железа, Windows NT увидит его как «неизвестное устройство» в Диспетчере устройств. На этом этапе нам нужно подсунуть системе правильный .inf файл.

Поскольку в эпоху NT не было удобных пакетных менеджеров, процесс требует ручного вмешательства.

  1. Подготовьте файлы драйвера. Вам понадобятся файлы из состава VMware Tools (или специализированные сборки драйверов для legacy-систем). Обычно это файлы с расширениями .sys, .inf и .cat.
  2. Скопируйте их на виртуальный диск. Проще всего это сделать через образ дискеты (.img) или через ISO-образ, созданный с помощью утилиты mkisofs.
  3. В самой Windows NT откройте Device Manager.
  4. Найдите устройство с восклицательным знаком (обычно в разделе Other devices под именем Mouse или Unknown device).
  5. Выберите «Update Driver» и укажите путь к папке, куда вы скопировали файлы.

Если вы предпочитаете автоматизировать процесс через командную строку (например, если вы готовите образ системы заранее), можно воспользоваться утилитой setupapi или сторонними инструментами для инъекции драйверов в реестр, но в случае с NT самым надёжным методом остаётся ручное указание пути через интерфейс.

После успешной установки устройство в Диспетчере устройств должно смениться на «VMware Pointing Device». Теперь курсор будет двигаться плавно, а проблема «захвата» мыши при перемещении за пределы окна гипервизора будет решена. Если после установки мышь перестала реагировать, вернитесь к конфигурации QEMU и проверьте, не конфликтует ли vmmouse с уже добавленным устройством tablet. В старых системах лучше оставить только одно устройство ввода.

Результаты и стабильность работы

Сравнение с эмуляцией PS/2

Когда мы запускаем Windows NT 3.x в QEMU, по умолчанию система видит стандартную PS/2 мышь. С практической точки зрения это означает, что вы получаете классическую работу с прерываниями: курсор движется рывками, а при резком перемещении мыши в физической реальности он может «залипать» или улетать в угол экрана. Это происходит из-за того, что эмуляция PS/2 вносит задержки на уровне обработки прерываний процессора.

Использование драйвера VMMouse переводит взаимодействие на другой уровень. Вместо того чтобы имитировать каждое движение как отдельное нажатие кнопки на старом железе, драйвер использует протокол, который передаёт координаты напрямую.

Если мы сравним два подхода в конфигурации QEMU, разница в стабильности становится очевидной. Для стандартной эмуляции мы обычно используем:

bash
# Стандартная PS/2 мышь (нестабильно для старых NT)
-device usb-mouse

Для работы с VMMouse в связке с QEMU/KVM конфигурация должна выглядеть иначе. Нам нужно добавить устройство vmmouse, которое обеспечит передачу относительных координат без лишних прерываний:

bash
# Использование VMMouse для плавного движения
-device vmmouse

С точки зрения нагрузки на систему, VMMouse гораздо эффективнее. В Windows NT 3.x ресурсы процессора крайне ограничены, и постоянная обработка потока прерываний от PS/2-эмулятора может приводить к микрофризам даже в простых задачах. VMMouse снижает этот оверхед, делая работу в интерфейсе более отзывчивой.

Предсказуемость поведения курсора

Для инженера, занимающегося ретро-компьютингом или эмуляцией, критически важна предсказуемость. В старых версиях Windows часто возникает проблема «рассинхрона»: когда физический курсор на хосте и виртуальный курсор в гостевой ОС имеют разную чувствительность или смещение.

При использовании VMMouse мы избавляемся от эффекта «плавающего курсора». Поскольку драйвер работает с абсолютными координатами через интерфейс гипервизора, курсор всегда находится там, где вы его видите. Это особенно важно при работе с графическими редакторами или специфическим софтом из 90-х, где точность позиционирования критична.

Если вы настраиваете окружение через XML-конфиг (например, в Proxmox или Libvirt), убедитесь, что секция input выглядит следующим образом:

xml
<input type='mouse' bus='ps2'/> <!-- Удалите это, если используете VMMouse -->
<input type='vmmouse'/>

Стоит учитывать один нюанс: если вы планируете использовать Windows NT внутри сложной топологии с пробросом USB-контроллера, VMMouse может конфликтовать с эмуляцией USB-HID. В таких случаях я рекомендую придерживаться чистого метода через -device vmmouse в командной строке QEMU, так как это гарантирует, что драйвер будет взаимодействовать напрямую с виртуальным интерфейсом, не полагаясь на слои эмуляции USB.

В конечном счёте, переход с PS/2 на VMMouse — это не просто вопрос комфорта, а вопрос превращения нестабильной эмуляции в предсказуемую рабочую среду. Это делает виртуальную машину полноценным инструментом, а не просто набором эмулируемых инструкций.

Заключение

Итоги настройки

Подводя черту, стоит сказать, что работа с Windows NT 3.x в современной среде — это всегда поиск компромиссов между стабильностью и удобством. Драйвер VMMouse решает главную проблему: избавляет от эффекта «запертого курсора», когда мышь двигается только при активации окна или с заметным смещением.

С практической точки зрения, успех настройки зависит от двух факторов: правильной конфигурации виртуального железа в QEMU и корректной последовательности установки драйвера в самой гостевой ОС. Если вы используете конфигурацию через командную строку, убедитесь, что в параметрах указан подходящий тип мыши.

Пример правильного фрагмента конфигурации для запуска через QEMU:

bash
# Добавляем устройство мыши типа usb-tablet для лучшей синхронизации
# и обеспечиваем поддержку протокола VMware
qemu-system-i386 \
  -m 64 \
  -drive file=winnt35.qcow2,format=qcow2 \
  -device usb-tablet \
  -device usb-mouse \
  -net nic,model=pcnet \
  -net user

Когда решение может не сработать

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

Во-первых, если вы используете эмуляцию старого PS/2 контроллера вместо USB, VMMouse может просто не инициализироваться. Windows NT 3.x крайне чувствительна к типам контроллеров, и попытка «подсунуть» современный USB-драйвер на шину, которая его не понимает, приведет к синему экрану (BSOD).

Во-вторых, если ваша цель — не просто движение курсора, а полноценная интеграция с хостом (общий буфер обмена, Drag-and-Drop), то одного VMMouse будет недостаточно. Для этого требуются более современные инструменты интеграции, которые, к сожалению, не поддерживают архитектуру NT 3.x.

Если вы столкнулись с тем, что курсор всё равно ведет себя дергано, проверьте настройки графического адаптера. Иногда проблема кроется не в мыши, а в задержках отрисовки кадра, что создает иллюзию неправильной работы драйвера. Подробнее о нюансах эмуляции различных устройств можно почитать в официальной документации QEMU.

Резюме по эксплуатации

Для стабильной работы в домашней лаборатории придерживайтесь следующего алгоритма:

  1. Используйте эмуляцию USB-тачпада или USB-планшета в параметрах QEMU.
  2. Устанавливайте драйвер только после того, как система загрузится в штатном режиме.
  3. Если после установки драйвера система перестала видеть мышь, используйте безопасный режим или загрузку с дискеты для отката изменений.

Это обеспечит предсказуемое поведение системы, даже если вы запускаете её на железе десятилетней давности.

FAQ

Будет ли работать драйвер на Windows NT 4.0?

Да, драйвер VMMouse совместим с Windows NT 4.0. Архитектура управления вводом в этих версиях схожа, поэтому процесс установки практически не отличается от NT 3.x. Главное — убедиться, что вы используете версию драйвера, которая поддерживает специфические прерывания, используемые в эмуляции QEMU. Если после установки курсор всё ещё ведёт себя непредсказуемо, проверьте, не конфликтует ли драйвер с установленными сторонними утилитами для работы с мышью.

Нужно ли менять настройки в конфигурации QEMU?

Да, для корректной работы драйвера недостаточно просто установить его внутри гостевой ОС. Вам нужно явно указать QEMU, что мышь должна эмулироваться через интерфейс VMware. В конфигурационном файле (или при запуске через командную строку) необходимо добавить устройство с типом usb-tablet или использовать специфический параметр для эмуляции протокола VMware.

Если вы используете QEMU напрямую, добавьте в параметры запуска:

bash
# Использование USB-планшета для бесшовного перемещения курсора
-device usb-tablet

Если же ваша задача — именно использование драйвера VMMouse для интеграции с функциями гипервизора, убедитесь, что устройство мыши определено как VMware compatible:

bash
# Пример добавления устройства в конфигурации
-device vmmouse

Можно ли использовать этот драйвер в Proxmox?

С практической точки зрения — да, можно. Proxmox базируется на KVM/QEMU, поэтому все принципы настройки идентичны. Если вы разворачиваете старую систему в виртуальной машине Proxmox, перейдите в раздел «Hardware» (Оборудование) выбранной ВМ.

  1. Удалите стандартное устройство «PS/2 Mouse».
  2. Добавьте новое устройство «USB Tablet».

Это обеспечит синхронизацию координат курсора без необходимости глубокой настройки драйверов внутри самой Windows NT, так как Proxmox будет транслировать абсолютные координаты через USB-протокол. Если же вы хотите использовать именно VMMouse, вам придётся редактировать конфигурационный файл ВМ в консоли гипервизора по пути /etc/pve/qemu-server/ID.conf, добавив строку с соответствующим устройством.

В чем преимущество перед обычным PS/2 эмулятором?

Основная проблема стандартного PS/2 эмулятора в старых ОС — это относительный метод передачи координат. Мышь передаёт информацию о том, на сколько пикселей она сдвинулась, а не о том, где именно находится курсор. Из-за этого при изменении разрешения экрана или несоответствии размеров окна гипервизора и гостевой системы курсор начинает «уплывать» или застревать в углах.

VMMouse использует абсолютные координаты. Это даёт два ключевых преимущества:

  1. Синхронизация: Курсор в Windows NT всегда находится ровно в той же точке, что и на вашем физическом мониторе.
  2. Отсутствие захвата: Вам не нужно нажимать комбинацию клавиш (например, Ctrl+Alt), чтобы «высвободить» мышь из окна виртуальной машины.

Для более глубокого изучения спецификаций протокола можно обратиться к документации QEMU.

Часто задаваемые вопросы

Почему стандартная USB-мышь не работает в Windows NT 3.x?

В Windows NT 3.x отсутствует стек драйверов для поддержки USB-устройств, поэтому система просто не может инициализировать современный контроллер. Для этой ОС мышь должна выглядеть как устройство, подключённое через классический интерфейс PS/2 или последовательный порт. Использование флага -device ps2-mouse в QEMU позволяет эмулировать именно такой старый стандарт, который система способна распознать.

Можно ли использовать VMMouse вместо стандартного PS/2?

С практической точки зрения, использование VMMouse предпочтительнее, так как этот драйвер обеспечивает более плавное движение курсора и избавляет от эффекта «залипания». В отличие от стандартной эмуляции PS/2, которая передаёт координаты через прерывания контроллера, VMMouse работает на более высоком уровне абстракции. Это позволяет избежать рассинхронизации между реальным положением мыши и отрисовкой курсора на экране.

Что делать, если после установки драйвера курсор всё равно не двигается?

Сначала убедитесь, что в параметрах запуска QEMU не указана принудительная эмуляция USB-контроллера, которая может конфликтовать с драйвером. Проверьте также, что в конфигурации виртуальной машины не переопределены прерывания (IRQ), так как Windows NT крайне чувствительна к конфликтам ресурсов. Если проблема сохраняется, попробуйте переключиться на простейшую эмуляцию через последовательный порт (COM-порт), чтобы исключить неисправность эмулируемого PS/2-контроллера.

Требуется ли установка дополнительных компонентов для работы драйвера?

Для корректной работы VMMouse в среде QEMU не требуется установка тяжелых гостевых дополнений, как это бывает в современных системах. Достаточно подложить файл драйвера в систему и указать путь к нему через Диспетчер устройств. Главное — обеспечить предсказуемость аппаратной части, чтобы драйвер мог корректно взаимодействовать с эмулируемым оборудованием.

Поделиться:TelegramX / TwitterVK