Подробный гайд: Настройка графики и нескольких мониторов в QEMU/KVM в Alt Linux
Настройка графики и нескольких мониторов в QEMU/KVM — задача интересная. В ALT Linux (как и в других дистрибутивах) есть два принципиально разных пути решения этой задачи:
- Эмуляция виртуальной графики (virtio-gpu / QXL) — подходит для офисных задач, не требует второй видеокарты, но производительность в играх/3D будет низкой.
- 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):
- Откройте
virt-managerи создайте новую ВМ. - В настройках ВМ перейдите в раздел Video (Видео).
- По умолчанию там одна видеокарта (обычно QXL или virtio-vga).
- Нажмите кнопку Add Hardware (Добавить устройство) -> Video и добавьте вторую видеокарту (выберите тип
virtio-vgaилиqxl). - В разделе 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)
- Откройте
virt-manager. Создайте ВМ или откройте существующую. - Обязательно включите UEFI (OVMF) в настройках BIOS ВМ и отключите Secure Boot.
- Откройте 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).
- Удалите из ВМ все эмуляторы видеокарт (
virtio-vga,qxl), оставьте только проброшенную карту (в XML удалите теги<video>, кроме проброшенной, или выберите "None" в GUI).
Шаг 4: Подключение мониторов
Физически подключите ваши два монитора к портам той видеокарты, которую вы пробросили в ВМ.
Шаг 5: Настройка внутри гостевой ОС (Windows/Linux)
- Запустите ВМ.
- Установите официальные драйверы NVIDIA или AMD внутри гостевой системы, как на обычном ПК.
- Зайдите в настройки дисплея гостевой ОС и настройте два монитора (расширить экран, выбрать частоту обновления и т.д.).
Возможные проблемы и их решение
Черный экран при пробросе 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> для аудио-устройства.
Мы делимся этой технической информацией, чтобы помочь вам в решении задач — используйте её с пониманием. Статья носит рекомендательный характер, поэтому, пожалуйста, применяйте описанные методы осмотрительно.