• Hacer funcionar la redimensión del escritorio al cambiar el tamaño de la consola de SPICE en una MV

    Cuando accedemos a una máquina virtual mediante una consola SPICE, podemos hacer que la resolución del sistema operativo invitado se adapte automáticamente al tamaño de la ventana. Así, cuando agrandamos, reducimos o ponemos la consola a pantalla completa, el escritorio cambia de resolución para ocupar exactamente el espacio disponible. Si esta redimensión automática deja de funcionar, la solución depende del escritorio que estemos utilizando. Vamos a ver dos casos que hemos comprobado: Debian con GNOME y Kali Linux con Xfce.

    Debian con GNOME

    En una máquina virtual Debian con GNOME, si tenemos instalado y funcionando el agente de SPICE pero el escritorio no cambia de resolución cuando redimensionamos la ventana, podemos eliminar la configuración de monitores almacenada por GNOME. El archivo está en:

    ~/.config/monitors.xml

    Lo eliminamos:

    rm -f ~/.config/monitors.xml

    …y reiniciamos la máquina virtual:

    sudo reboot

    Después de iniciar nuevamente la sesión gráfica, GNOME regenerará su configuración de monitores y la resolución debería volver a adaptarse automáticamente cuando cambiemos el tamaño de la consola SPICE. Por tanto, en Debian con GNOME normalmente nos basta con:

    rm -f ~/.config/monitors.xml
    sudo reboot

    Kali Linux con Xfce

    En Kali Linux con Xfce necesitamos hacer algo diferente. Primero comprobamos que el agente de SPICE se está ejecutando:

    pgrep -a spice-vdagent

    Deberíamos obtener procesos similares a:

    1409 /usr/bin/spice-vdagent
    1548 /usr/sbin/spice-vdagentd -x

    A continuación comprobamos qué nombre tiene nuestra salida gráfica:

    xrandr --query

    En nuestro caso aparece como:

    Virtual-1 connected 1280x800+0+0

    Si cambiamos el tamaño de la consola SPICE y ejecutamos:

    xrandr --output Virtual-1 --auto

    El escritorio se adapta inmediatamente al nuevo tamaño de la ventana. Para automatizar este comportamiento vamos a crear un script que escuche los cambios de pantalla y ejecute automáticamente XRandR. Creamos:

    ~/spice-auto-resize.sh

    …con el siguiente contenido:

    #!/bin/sh
    
    xrandr --output Virtual-1 --auto
    
    xev -root -event randr 2>/dev/null |
      grep --line-buffered 'subtype XRROutputChangeNotifyEvent' |
      while read -r vLinea; do
        xrandr --output Virtual-1 --auto
      done

    Le damos permisos de ejecución:

    chmod +x ~/spice-auto-resize.sh

    Creamos el directorio de aplicaciones de autoinicio de Xfce si todavía no existe:

    mkdir -p ~/.config/autostart

    …y creamos:

    ~/.config/autostart/spice-auto-resize.desktop

    con el siguiente contenido:

    [Desktop Entry]
    Type=Application
    Name=SPICE Auto Resize
    Comment=Redimensiona automáticamente el escritorio Xfce en SPICE
    Exec=/bin/sh -c "$HOME/spice-auto-resize.sh"
    Terminal=false
    StartupNotify=false
    OnlyShowIn=XFCE;

    Ahora necesitamos tener en cuenta la versión de spice-vdagent instalada. Podemos comprobarla con:

    apt policy spice-vdagent

    En nuestro caso teníamos instalada:

    spice-vdagent:
      Instalados: 0.23.0-3
      Candidato:  0.23.0-3

    Con esta versión conseguimos que la resolución se adaptase al tamaño de la ventana, pero el dispositivo de puntero absoluto de SPICE no quedaba correctamente sincronizado después de redimensionar. Esto hacía que, en modo ventana, el punto real donde hacíamos clic estuviese desplazado respecto a la posición visual del cursor. En nuestro caso lo solucionamos instalando spice-vdagent 0.22.1-4.1. Descargamos el paquete de Debian:

    wget https://deb.debian.org/debian/pool/main/s/spice-vdagent/spice-vdagent_0.22.1-4.1_amd64.deb

    Lo instalamos haciendo downgrade desde la versión de Kali:

    sudo apt install ./spice-vdagent_0.22.1-4.1_amd64.deb

    Después impedimos que una actualización normal del sistema vuelva a instalar automáticamente la versión más reciente:

    sudo apt-mark hold spice-vdagent

    Podemos comprobar que el paquete ha quedado bloqueado con:

    apt-mark showhold

    Finalmente reiniciamos la máquina virtual:

    sudo reboot

    Después del reinicio tendremos el script ejecutándose automáticamente con Xfce y podremos cambiar libremente el tamaño de la consola SPICE. El escritorio se adaptará automáticamente a la nueva resolución y el puntero del ratón seguirá coincidiendo correctamente con el punto real de clic. Si nuestra pantalla virtual no se llama Virtual-1, consultamos su nombre con:

    xrandr --query

    …y sustituimos Virtual-1 dentro de spice-auto-resize.sh por el nombre de la salida que aparezca como conectada.

    Dejar un comentario