Подробный гайд: Настройка графики и нескольких мониторов в QEMU/KVM в Alt Linux

Подробный гайд по QEMU в ALT Linux: графика и два монитора, virt-manager, VFIO, проброс GPU и настройка виртуальных машин.

2026.08.04                  


Подробный гайд: Настройка графики и нескольких мониторов в QEMU/KVM в Alt LinuxПодробный гайд: Настройка графики и нескольких мониторов в QEMU/KVM в Alt Linux

Настройка графики и нескольких мониторов в QEMU/KVM — задача интересная. В ALT Linux (как и в других дистрибутивах) есть два принципиально разных пути решения этой задачи:

  1. Эмуляция виртуальной графики (virtio-gpu / QXL) — подходит для офисных задач, не требует второй видеокарты, но производительность в играх/3D будет низкой.
  2. PCI Passthrough (проброс реальной видеокарты в ВМ) — идеальный вариант. Гостевая ОС видит реальную видеокарту (NVIDIA/AMD), вы подключаете к ней мониторы напрямую. Требует наличия двух видеокарт (встроенной и дискретной) или одной карты с поддержкой проброса (сложнее).

Этап 1: Подготовка ALT Linux (Хост)

Для начала необходимо установить пакеты QEMU, libvirt и OVMF (для UEFI-загрузки, которая обязательна для проброса видеокарт).

1. Откройте терминал и установите пакеты:

   sudo apt-get update
   sudo apt-get install qemu-system-x86 libvirt virt-manager ovmf

2. Добавьте своего пользователя в группы libvirt и kvm, чтобы управлять ВМ без root-прав:

   sudo usermod -aG libvirt,kvm $USER

(После этой команды рекомендуется перелогиниться или перезагрузить ПК).


Этап 2: Включение IOMMU (Обязательно для проброса)

Если вы планируете пробрасывать реальную видеокарту (Вариант Б), материнская плата и процессор должны поддерживать IOMMU, и она должна быть включена.

1. Откройте конфигурацию GRUB:

   sudo nano /etc/default/grub

2. Найдите строку GRUB_CMDLINE_LINUX_DEFAULT и добавьте параметры:

  • Для Intel: intel_iommu=on
  • Для AMD: amd_iommu=on

Пример:

   GRUB_CMDLINE_LINUX_DEFAULT="quiet splash intel_iommu=on"

3. Обновите конфигурацию GRUB:

   sudo update-grub
   # или sudo grub-mkconfig -o /boot/grub/grub.cfg (зависит от версии ALT)

4. Перезагрузите компьютер.


Вариант А: Эмуляция графики + 2 монитора (Без проброса)

Если у вас одна видеокарта или вам нужна просто работающая система с двумя экранами для оконного интерфейса.

Через графический интерфейс (virt-manager):

  1. Откройте virt-manager и создайте новую ВМ.
  2. В настройках ВМ перейдите в раздел Video (Видео).
  3. По умолчанию там одна видеокарта (обычно QXL или virtio-vga).
  4. Нажмите кнопку Add Hardware (Добавить устройство) -> Video и добавьте вторую видеокарту (выберите тип virtio-vga или qxl).
  5. В разделе Display Spice (Дисплей) убедитесь, что выбран тип Spice (он лучше работает с несколькими мониторами, чем VNC).

Через CLI (запуск QEMU вручную):

Для вывода на два экрана можно использовать два устройства virtio-vga и дисплей Spice.

qemu-system-x86_64 \
  -enable-kvm \
  -m 4G \
  -cpu host \
  -smp 4 \
  -drive file=/var/lib/libvirt/images/win10.qcow2,if=virtio \
  -device virtio-vga,id=video0 \
  -device virtio-vga,id=video1 \
  -display spice-app,gl=on

Примечание:

В гостевой Windows вам нужно будет установить драйверы VirtIO - https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/. После установки в "Параметрах экрана" Windows вы увидите два монитора и сможете их расширить.


Вариант Б: Проброс реальной видеокарты (PCI Passthrough) — Рекомендуемый

Это лучший способ получить 2 монитора с аппаратным ускорением. Суть: хост (ALT Linux) работает на встроенной графике (или первой дискретной), а вторая видеокарта полностью отдается виртуальной машине.


Шаг 1: Определение ID видеокарты

Узнайте PCI-адрес вашей видеокарты, которую будете пробрасывать:

lspci -nn | grep -E 'VGA|3D'

Пример вывода:

01:00.0 VGA compatible controller [0300]: NVIDIA Corporation GP106 [GeForce GTX 1060] [10de:1c03] (rev a1) Вам нужны ID в квадратных скобках: [10de:1c03].


Шаг 2: Привязка карты к драйверу vfio-pci

Чтобы ALT Linux не загружал свой драйвер (nouveau/nvidia/amdgpu) для этой карты, ее нужно перехватить.

1. Создайте файл конфигурации модулей:

   sudo nano /etc/modprobe.d/vfio.conf

2. Впишите туда (подставив свои ID):

   options vfio-pci ids=10de:1c03

3. Создайте файл для ранней загрузки модуля vfio:

   sudo nano /etc/modules-load.d/vfio.conf

4. Впишите туда:

   vfio-pci

5. Важно:

Если драйвер вашей карты жестко вшит в initramfs, может потребоваться добавить ваш ID в черный список драйвера в /etc/modprobe.d/blacklist.conf (например, blacklist nouveau или blacklist amdgpu для пробрасываемой карты).


6. Перезагрузите ПК.


После перезагрузки проверьте, захватилась ли карта:

sudo lspci -k -d 10de:1c03

В выводе строка Kernel driver in use: должна показывать vfio-pci.


Шаг 3: Настройка ВМ (libvirt XML)

  1. Откройте virt-manager. Создайте ВМ или откройте существующую.
  2. Обязательно включите UEFI (OVMF) в настройках BIOS ВМ и отключите Secure Boot.
  3. Откройте XML-конфигурацию ВМ (или добавьте устройство через интерфейс).
4. Добавьте блок hostdev внутрь тега <devices>:
   <hostdev mode='subsystem' type='pci' managed='yes'>
     <source>
       <address domain='0x0000' bus='0x01' slot='0x00' function='0x0'/>
     </source>
     <rom bar='on'/>
   </hostdev>

Где bus='0x01', slot='0x00', function='0x0' — это адрес вашей видеокарты из lspci (в примере выше это 01:00.0). Переведите цифры в шестнадцатеричную систему (01 = 0x01).


  1. Удалите из ВМ все эмуляторы видеокарт (virtio-vga, qxl), оставьте только проброшенную карту (в XML удалите теги <video>, кроме проброшенной, или выберите "None" в GUI).

Шаг 4: Подключение мониторов

Физически подключите ваши два монитора к портам той видеокарты, которую вы пробросили в ВМ.


Шаг 5: Настройка внутри гостевой ОС (Windows/Linux)

  1. Запустите ВМ.
  2. Установите официальные драйверы NVIDIA или AMD внутри гостевой системы, как на обычном ПК.
  3. Зайдите в настройки дисплея гостевой ОС и настройте два монитора (расширить экран, выбрать частоту обновления и т.д.).

Возможные проблемы и их решение

Черный экран при пробросе NVIDIA (Ошибка 43 в Windows):

NVIDIA может блокировать работу драйвера в ВМ.

В XML ВМ добавьте гипервизорный вендор-ID, чтобы скрыть KVM:

  <features>
    <hyperv>
      <vendor_id state='on' value='123456789abc'/>
    </hyperv>
  </features>

Ошибка Permission denied при доступе к /dev/vfio:

Убедитесь, что ваш пользователь состоит в группе kvm и libvirt, либо добавьте правило udev:

Создайте /etc/udev/rules.d/99-vfio.rules:

  SUBSYSTEM=="vfio", OWNER="root", GROUP="kvm", MODE="0660"

Затем выполните

sudo udevadm control --reload-rules && sudo udevadm trigger

Нет звука через HDMI проброшенной видеокарты:

Убедитесь, что вы пробросили не только видеокарту (01:00.0), но и её аудиоконтроллер (01:00.1), добавив второй тег <hostdev> для аудио-устройства.


Мы делимся этой технической информацией, чтобы помочь вам в решении задач — используйте её с пониманием. Статья носит рекомендательный характер, поэтому, пожалуйста, применяйте описанные методы осмотрительно.


Статью подготовил: Аверко Денис Сергеевич @Nymexis г. Омск (5)(531)(30)

Комментарии

Загрузка...
Если комментарии не загружаются, можете попробовать отключить блокировщик рекламы для этого сайта