-
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 doneLe 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.