Como Redimensionar o Guest à Janela no KVM com Virt-Manager

Esse artigo trata da configuração do Guest ao utilizar o KVM com virtualizador, para que seja possível redimensionar automaticamente o Guest à janela na qual está sendo exibido.

[ Hits: 8.653 ]

Por: Marcio Starke em 12/08/2019


Configuração



Configurando o Debian com Xfce e o Slackware com KDE, para redimensionar à janela utilizando o KVM.

Quando se utiliza um virtualizador em uma estação de trabalho, é desejável que o Guest, ao executar em modo gráfico, adapte sua resolução à janela que ele está sendo visualizado. Ao utilizar o KVM como virtualizador, geralmente se usa em conjunto com a "libvirt" e o Virt-Manager, gerenciador gráfico das máquinas virtuais.

O Virt-Manager possui um visualizador embutido capaz de utilizar o SPICE para apresentar o console gráfico. SPICE é o acrônimo para Simple Protocol for Independent Computing Environments e é um sistema construído para ambientes virtuais que permite ao usuário interagir graficamente com desktop virtual, incluindo o compartilhamento da Área de Transferência e de arquivos.

Primeiramente, para o redimensionamento funcionar com o Virt-Manager, é necessário utilizar o driver de vídeo QXL, ter o dispositivos e o canal do SPICE configurados no hardware da máquina virtual, ter o spice-vdagent executando no Guest e marcar a opção "Redimensionar automaticamente a VM com a Janel"a no Menu "Ver" durante a execução do Guest.

As instruções aqui foram realizadas utilizando o Xfce no Debian Buster (10) e o KDE/Xfce no Slackware.

No Debian Buster (10), instale o spice-vdagent no Guest com o seguinte comando:

# apt install spice-vdagent

O driver QXL exige que cada gerenciador de janelas aplique suas novas resoluções quando a janela é redimensionada[1]. No GNOME (testado no Ubuntu) e no KDE (testado no openSUSE) esse redimensionamento acontece sem problemas. Mas no Xfce, não.

O driver informa o Guest da modificação por meio de um evento no dispositivo de vídeo, que pode ser verificado pelo comando:

udevadm monitor

O spice-vdagent é necessário para iniciar completamente o driver [2].

Assim sendo, é possível utilizar o "udev" para redimensionar à janela, se utilizarmos algum comando que execute essa função. Mas antes, é necessário perceber que o "udev" não pode executar comandos longos (no tempo), pois há um bloqueio que ocorre (um pouco mais complicado que isso) [3], sendo que nem todos os eventos serão tratados caso o script demore.

Para evitar isso, será utilizado o utilitário "at" para lançar o comando de redimensionamento.

Assim, cria-se um arquivo de nome "/etc/udev/rules.d/20-monitor.rules" com o seguinte conteúdo:

ACTION=="change", SUBSYSTEM=="drm", ENV{DEVNAME}=="/dev/dri/card0", RUN+="/etc/udev/monitors.sh"

Obs.: note o uso do "+" logo após o RUN, significando um append.

Com isso, agora é necessário criar o "/etc/udev/monitors.sh" com o seguinte conteúdo:

#!/bin/bash
echo /etc/udev/monitors-run.sh | at now

Note o uso do "at", logo, é necessário instalá-lo. Para diminuir as dependências, instale-o utilizando a diretiva "--no-install-recommends":

# apt install --no-install-recommends at

Deve-se, por fim, criar o arquivo em "/etc/udev/monitors-run.sh", com o seguinte conteúdo:

#!/bin/bash
set +e
export DISPLAY=":0.0"
USER=$(loginctl --no-legend --no-pager list-users | head -1 | awk '{ print $2}')
export XAUTHORITY="/home/${USER}/.Xauthority"
sleep 1
if [ $USER ]; then
     xrandr --output Virtual-0 --auto
fi
set -e
exit 0

O comando utilizado para o redimensionamento é o:

# xrandr --output Virtual-0 --auto

... mas somente é executado se houver algum usuário logado para evitar erros durante o início e a finalização do Guest. Também é necessário um usuário logado para se obter as credenciais do servidor X.

Também é necessário alterar as permissões dos scripts para executável:

# chmod 755 /etc/udev/monitors*.sh

Com tudo isso ajustado, faz-se o recarregamento das regras do "udev" com o comando:

# udevadm control --reload-rules

Para testar, basta redimensionar a janela e verificar o funcionamento. Note que esse script pode não ser executado no primeiro redimensionamento, no caso do Xfce.

Também fiz o mesmo experimento no Slackware (current) com o KDE (sabe-se lá porque não funcionou aqui) e com o Xfce, nos quais o redimensionamento não funcionou logo na instalação. Colocarei aqui os passos para fazê-lo funcionar, mas sem maiores explicações.

Fazer o download do sbotools a partir do site do SlackBuilds. Utilizei o sbotools para facilitar a instalação das dependências.

Instalar o sbotools:

tar xfv sbotools.tar.gz
mv sbotools-2.7.tar.gz sbotools
cd sbotools
sudo ./sbotools.SlackBuild

Atualizar a base de dados do sbotools:

# sbosnap fetch
# sbosnap update

Instalar o QXL e o spice-vdagent (não é preciso configurações adicionais):

# sboinstall spice-vdagent
# sboinstall xf86-video-qxl

Comentar no "/etc/lilo.conf" as entradas do vga e executar o lilo. Alguma erro impede o sistema de iniciar se essa entrada estiver presente no "lilo.conf" e se utiliza o drive QXL.

Seguir os mesmos passos do Debian com o Xfce, somente comentando no "script monitors-run.sh" a linha que iniciar com "USER=" e adicionar uma outra em seu lugar com o seguinte conteúdo:

USER=nomedousuario

... substituindo o "nomedousuario" pelo seu usuário. O Slackware não possui esse comando por fazer parte do systemd.

Referências


E por hoje é só, pessoal!

   

Páginas do artigo
   1. Configuração
Outros artigos deste autor
Nenhum artigo encontrado.
Leitura recomendada

Montando Servidor de Internet com Ubuntu Server

Instalação do Nagios Core no CentOS 5.5

Colocando seu Fluxbox totalmente transparente

Como instalar o Compiz no Zenwalk e no Slackware de forma fácil

Configuração de Servidor Web no FreeBSD 9

  
Comentários
[1] Comentário enviado por Bequimao.de em 04/09/2019 - 04:19h

O QXL não é o driver único que funciona no Virt-Manager. Prefiro o Virtio e sempre escolho a opção "Aceleração 3D".

Nunca precisei configurar units do systemd ou udev. É suficiente no KDE Plasma configurar a resolução em System Settings -> Configuração da Tela e Monitor para ter a resolução persistente.

Bequimão

[2] Comentário enviado por mcnd2 em 19/09/2019 - 19:53h

Boa!!!

Funcionou aqui perfeitamente no Guest Debian Buster após a instalação do mesmo.

Parabéns pelo artigo e em poder ajudar a comunidade!

Tmj...

__________________
Linux User #606334 -- Open your mind!

[3] Comentário enviado por mrstarke em 11/02/2022 - 15:27h

Para o Debian 11 alterei a linha 'xrandr --output Virtual-0 --auto' para essas duas linhas abaixo:
DEVICE=$(xrandr | awk '/ connected / {print $1}')
xrandr --output $DEVICE --auto


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts