How do I install Looking Glass on Windows guest machine?

Looking Glass: Potencia Gráfica en tu VM

20/05/2007

Valoración: 4.54 (12240 votos)

En el mundo de la virtualización, uno de los mayores desafíos ha sido siempre el rendimiento gráfico. Las soluciones tradicionales a menudo sufren de latencia, compresión de imagen y una falta general de potencia, lo que las hace inadecuadas para tareas exigentes como el gaming de alta gama o el trabajo de diseño profesional. Aquí es donde entra en juego una tecnología revolucionaria: Looking Glass. Este proyecto de código abierto permite visualizar el framebuffer de una máquina virtual (VM) en el sistema anfitrión con una latencia increíblemente baja y sin compresión, ofreciendo una experiencia casi nativa. Esto se logra a través de un segmento de memoria compartida, eliminando los cuellos de botella de la red o de los protocolos de streaming tradicionales.

What is looking glass?
Looking Glass is an open source application that allows the use of a KVM (Kernel-based Virtual Machine) configured for VGA PCI Pass-through without an attached physical monitor, keyboard or mouse. This is the final step required to move away from dual booting with other operating systems for legacy programs that require high performance graphics.

Este artículo es una guía exhaustiva para configurar un entorno de GPU Passthrough utilizando VFIO y Looking Glass en un sistema anfitrión Linux (específicamente Fedora) para una máquina virtual Windows. A través de este proceso, podrás dedicar una tarjeta gráfica física exclusivamente a tu VM, permitiéndote ejecutar los juegos y aplicaciones más exigentes como si estuvieras en un sistema Windows nativo, pero con toda la flexibilidad y potencia de un host Linux.

Índice de Contenido

¿Qué es el GPU Passthrough?

El GPU Passthrough, o paso de GPU, es una técnica que utiliza tecnologías de virtualización como Intel VT-d o AMD-Vi (IOMMU) para permitir que una máquina virtual tenga acceso exclusivo y directo a un dispositivo PCI físico, en este caso, una tarjeta gráfica. En lugar de emular un adaptador de video genérico y lento, la VM controla directamente la GPU real. Esto desbloquea todo su potencial de aceleración 3D, cómputo y salida de video. Looking Glass es la pieza final del rompecabezas, ya que nos permite ver y controlar esa VM de alto rendimiento sin necesidad de conectar un monitor directamente a la GPU dedicada.

Requisitos Previos

Antes de sumergirnos en la configuración, es crucial asegurarse de que tu hardware y software son compatibles.

  • Hardware: Se recomienda encarecidamente un sistema con dos adaptadores de video: uno para el sistema anfitrión (puede ser una GPU integrada en la CPU) y una GPU dedicada potente para la máquina virtual. Aunque es posible hacerlo con una sola GPU, el proceso es mucho más complejo.
  • Monitor Falso: Necesitarás un emulador de monitor HDMI (HDMI Dummy Plug) o un cable conectado a otro puerto de tu monitor si tu GPU no renderiza sin una pantalla conectada (esto es común en Windows).
  • Software: Un sistema operativo anfitrión Linux con soporte para KVM/QEMU (usaremos Fedora como ejemplo) y una máquina virtual con Windows instalado.
  • BIOS/UEFI: Tu placa base debe tener soporte para virtualización (VT-x para Intel, AMD-V para AMD) e IOMMU (VT-d para Intel, AMD-Vi para AMD), y estas opciones deben estar activadas en la configuración de la BIOS/UEFI.

Paso 1: Configuración del Sistema Anfitrión (Fedora)

El primer paso es preparar nuestro sistema Linux para que sea capaz de gestionar la virtualización y el passthrough de dispositivos.

Instalación de Paquetes de Virtualización

Abre una terminal e instala el grupo de paquetes de virtualización y las herramientas necesarias.

# Para Fedora Workstation/Server dnf install @virtualization # Para versiones inmutables como Silverblue/Kinoite rpm-ostree install virt-install libvirt-daemon-config-network libvirt-daemon-kvm qemu-kvm virt-manager virt-viewer guestfs-tools python3-libguestfs virt-top

Configuración de la BIOS

Reinicia tu ordenador y accede a la configuración de la BIOS/UEFI. Busca y activa todas las opciones relacionadas con la virtualización. Los nombres pueden variar, pero generalmente son:

  • Intel Virtualization Technology (VT-x) / AMD-V
  • Intel VT-d / AMD IOMMU
  • SVM (Secure Virtual Machine) Mode

Habilitando IOMMU y VFIO en el Kernel

Necesitamos indicarle al kernel de Linux que active IOMMU al arrancar. Esto se hace modificando la configuración de GRUB.

1. Edita el archivo /etc/default/grub:

# Para CPUs AMD, añade amd_iommu=on GRUB_CMDLINE_LINUX="rhgb quiet amd_iommu=on" # Para CPUs Intel, añade intel_iommu=on GRUB_CMDLINE_LINUX="rhgb quiet intel_iommu=on"

2. A continuación, debemos asegurarnos de que los drivers de VFIO se carguen en el arranque temprano. Crea o edita el archivo /etc/dracut.conf.d/local.conf y añade la siguiente línea:

add_drivers+=" vfio vfio_iommu_type1 vfio_pci vfio_virqfd "

3. Regenera el initramfs y la configuración de GRUB. Ejecuta estos comandos como superusuario y luego reinicia el sistema.

sudo dracut -f --kver `uname -r` sudo grub2-mkconfig -o /etc/grub2-efi.cfg sudo reboot

Paso 2: Preparación de la Máquina Virtual

Con el host listo, es hora de crear y configurar nuestra máquina virtual de Windows.

Creación y Ajustes Iniciales

Usa virt-manager para crear una nueva máquina virtual de Windows de la forma habitual. Instala el sistema operativo completamente antes de proceder con los siguientes pasos.

Evitando el Temido "Error 43"

Los drivers de GPU para Windows a menudo detectan que se están ejecutando en un entorno virtualizado y se desactivan, mostrando un "Error 43" en el Administrador de Dispositivos. Para evitarlo, necesitamos ocultar la naturaleza virtual de nuestra VM. Edita la configuración XML de tu VM (virsh edit nombre_de_tu_vm) y añade las siguientes secciones dentro de la etiqueta <features>:

<features> ... <hyperv> <vendor_id state='on' value='1234567890ab'/> </hyperv> <kvm> <hidden state='on'/> </kvm> ... </features>

Paso 3: Realizando el Passthrough de la GPU

Esta es la parte central del proceso: desacoplar la GPU del host y asignarla a la VM.

Identificar la Dirección PCI de tu GPU

Necesitamos saber la dirección exacta de nuestra GPU y su dispositivo de audio asociado en el bus PCI. Usa el siguiente comando (reemplaza 'Navi' por 'Nvidia' o el nombre clave de tu GPU si es necesario).

lspci -nnk | grep Navi -A 3

La salida será similar a esta:

03:00.0 VGA compatible controller [0300]: Advanced Micro Devices, Inc. [AMD/ATI] Navi 22 [1002:73df] Subsystem: Sapphire Technology Limited Sapphire Radeon RX 6700 [1da2:e445] Kernel driver in use: amdgpu 03:00.1 Audio device [0403]: Advanced Micro Devices, Inc. [AMD/ATI] Navi 21/23 HDMI/DP Audio Controller [1002:ab28] Subsystem: Advanced Micro Devices, Inc. [AMD/ATI] Navi 21/23 HDMI/DP Audio Controller [1002:ab28] Kernel driver in use: snd_hda_intel

En este ejemplo, las direcciones que nos importan son 03:00.0 (video) y 03:00.1 (audio). Anótalas.

What is looking glass?
Looking Glass is an open source application that allows the use of a KVM (Kernel-based Virtual Machine) configured for VGA PCI Pass-through without an attached physical monitor, keyboard or mouse. This is the final step required to move away from dual booting with other operating systems for legacy programs that require high performance graphics.

Añadir la GPU a la Máquina Virtual

Ahora, añade los dispositivos PCI a la configuración XML de tu VM (virsh edit nombre_de_tu_vm) dentro de la sección <devices>. Puede que necesites extraer la vBIOS de tu tarjeta si encuentras problemas (el proceso es complejo y varía por GPU, pero la información de origen muestra un método). La configuración debería parecerse a esto, usando tus propias direcciones PCI:

<devices> ... <hostdev mode='subsystem' type='pci' managed='yes'> <source> <address domain='0x0000' bus='0x03' slot='0x00' function='0x0'/> </source> <!-- <rom file='/ruta/a/tu/vBIOS.rom'/> --> <!-- Opcional --> <address type='pci' domain='0x0000' bus='0x0a' slot='0x00' function='0x0' multifunction='on'/> </hostdev> <hostdev mode='subsystem' type='pci' managed='yes'> <source> <address domain='0x0000' bus='0x03' slot='0x00' function='0x1'/> </source> <address type='pci' domain='0x0000' bus='0x0a' slot='0x00' function='0x1'/> </hostdev> ... </devices>

Paso 4: Scripts de Automatización y Optimización

Para que la GPU se desacople del host y se acople a la VM automáticamente al iniciarla (y viceversa al apagarla), usaremos scripts de hooks de libvirt.

Creación de la Estructura de Directorios

Crea la siguiente estructura de directorios. Usaremos `vfio-pci` como nombre base para nuestros scripts.

sudo mkdir -p /etc/libvirt/hooks/qemu.d/vfio-pci/{prepare/begin,release/end}

Script para Desacoplar la GPU (detach_gpu.sh)

Este script se ejecutará antes de que la VM inicie. Desacoplará la GPU de los drivers del host y la preparará para que VFIO la reclame.

Crea el archivo /etc/libvirt/hooks/qemu.d/vfio-pci/prepare/begin/detach_gpu.sh y hazlo ejecutable (sudo chmod +x ...). Asegúrate de cambiar los valores de `GPU` por los tuyos.

#!/bin/bash GPU="03:00" GPU_ADDR="0000:${GPU}.0" AUDIO_ADDR="0000:${GPU}.1" # Desacoplar de drivers del host echo "${GPU_ADDR}" > /sys/bus/pci/devices/${GPU_ADDR}/driver/unbind echo "${AUDIO_ADDR}" > /sys/bus/pci/devices/${AUDIO_ADDR}/driver/unbind # Cargar driver vfio-pci modprobe vfio-pci # Acoplar a vfio-pci (usando virsh) virsh nodedev-detach --device pci_0000_${GPU//:/_}_0 virsh nodedev-detach --device pci_0000_${GPU//:/_}_1 echo "GPU lista para la VM"

Script para Reacoplar la GPU (reattach_gpu.sh)

Este script se ejecutará cuando la VM se apague. Devolverá el control de la GPU al sistema anfitrión.

Crea el archivo /etc/libvirt/hooks/qemu.d/vfio-pci/release/end/reattach_gpu.sh y hazlo ejecutable. Asegúrate de cambiar el valor de `GPU`.

#!/bin/bash GPU="03:00" GPU_ADDR="0000:${GPU}.0" AUDIO_ADDR="0000:${GPU}.1" # Eliminar del bus PCI para forzar reinicio del driver echo 1 > "/sys/bus/pci/devices/${GPU_ADDR}/remove" echo 1 > "/sys/bus/pci/devices/${AUDIO_ADDR}/remove" sleep 3 # Volver a escanear el bus PCI echo 1 > /sys/bus/pci/rescan sleep 1 # Reacoplar (opcional, el re-escaneo suele ser suficiente) virsh nodedev-reattach --device pci_0000_${GPU//:/_}_0 virsh nodedev-reattach --device pci_0000_${GPU//:/_}_1 echo "GPU devuelta al host"

Activando los Scripts para tu VM

Finalmente, crea un enlace simbólico con el nombre de tu VM para que libvirt sepa que debe usar estos scripts para esa VM en concreto.

sudo ln -s /etc/libvirt/hooks/qemu.d/vfio-pci /etc/libvirt/hooks/qemu.d/nombre_de_tu_vm

Paso 5: Configuración Final de Looking Glass

Ya casi hemos terminado. El último paso es configurar el software de Looking Glass.

Creando la Memoria Compartida (ivshmem)

Looking Glass necesita un bloque de memoria compartida entre el host y el invitado. El tamaño depende de la resolución de tu pantalla. La fórmula es: ancho x alto x 4 (bytes por píxel) x 2. Para una pantalla de 2560x1080, necesitaríamos unos 22MB. Debemos redondear al siguiente múltiplo de 2, que sería 32MB.

Añade lo siguiente a la sección <devices> del XML de tu VM:

<shmem name='looking-glass'> <model type='ivshmem-plain'/> <size unit='M'>32</size> </shmem>

Ajustando Permisos

El archivo de memoria compartida necesita permisos correctos. Añade tu usuario al grupo `kvm` o `qemu` y crea un archivo de configuración para `tmpfiles`.

sudo usermod -aG qemu $(whoami)

Crea /etc/tmpfiles.d/10-looking-glass.conf con el siguiente contenido:

f /dev/shm/looking-glass 0660 qemu qemu -

Instalación en Host (Windows) e Invitado (Linux)

  1. En la VM de Windows: Descarga el binario "Windows Host" desde la página oficial de Looking Glass y ejecútalo. Debería ejecutarse en segundo plano.
  2. En el Host Linux: Puedes instalar el cliente de Looking Glass de varias formas. La más sencilla en Fedora es a través de un repositorio COPR:
sudo dnf copr enable rariotrariowario/looking-glass-client -y sudo dnf install -y looking-glass-client

Una vez completado todo, inicia tu máquina virtual. El script `detach_gpu.sh` se ejecutará. Dentro de Windows, instala los drivers de tu GPU y ejecuta la aplicación host de Looking Glass. Finalmente, en tu host Linux, abre una terminal y ejecuta:

looking-glass-client

¡Si todo ha ido bien, deberías ver el escritorio de tu VM de Windows en una ventana en tu escritorio Linux, con un rendimiento gráfico espectacular!

Preguntas Frecuentes (FAQ)

¿Qué diferencia a Looking Glass de RDP o VNC?

A diferencia de RDP o VNC, que son protocolos de escritorio remoto basados en red, Looking Glass no comprime la imagen y utiliza memoria compartida de alta velocidad en lugar de la red. Esto resulta en una latencia extremadamente baja (casi imperceptible) y una calidad de imagen perfecta (1:1), ideal para gaming y aplicaciones que requieren una respuesta visual inmediata.

¿Es obligatorio usar dos tarjetas gráficas?

No es estrictamente obligatorio, pero es la configuración recomendada y la más sencilla. El "single GPU passthrough" implica que la misma GPU que usa el host se pasa a la VM, lo que significa que el host pierde su salida de video mientras la VM está en funcionamiento. Esto requiere configuraciones mucho más complejas para recuperar el control después de apagar la VM.

Mi GPU sigue dando el Error 43 en Windows, ¿qué hago?

El Error 43 es la pesadilla del GPU passthrough. Asegúrate de haber aplicado correctamente los parches para ocultar el hipervisor (kvm hidden y vendor_id). En algunos casos, especialmente con GPUs NVIDIA más recientes, podrías necesitar una vBIOS "limpia" (extraída de una instalación física) y/o parches adicionales. La comunidad online es tu mejor recurso para problemas específicos de hardware.

Conclusión

Configurar GPU Passthrough con VFIO y Looking Glass es sin duda un proceso técnico y avanzado, pero los resultados son asombrosos. Te permite combinar lo mejor de dos mundos: la robustez, seguridad y flexibilidad de un sistema operativo Linux como anfitrión, y la compatibilidad con juegos y software profesional de Windows como invitado, todo ello sin sacrificar el rendimiento de tu potente hardware gráfico. Has transformado tu máquina en una estación de trabajo y juego increíblemente versátil, aprovechando al máximo el poder de la virtualización moderna.

Si quieres conocer otros artículos parecidos a Looking Glass: Potencia Gráfica en tu VM puedes visitar la categoría Juegos.

Subir