Desativar framebuffer em convidados do QEMU

6

As opções do QEMU -display curses e -nographic -device sga (o adaptador gráfico serial) são muito convenientes para executar o QEMU fora de um ambiente gráfico.

(pense: conexão ssh remota, sistema de resgate etc.)

Ambos os modos não funcionam com o modo de texto framebuffer. O novo padrão com algumas distirbutions do Linux (por exemplo, Fedora 25) parece ser que em algum momento durante a inicialização um modo de texto framebuffer parece estar ativado de tal forma que com -display curses QEMU exibe apenas '1024x768 Graphic mode'. Com o SGA, nada é impresso.

Assim, minha pergunta: como posso forçar o kernel (e o restante da inicialização) a usar apenas o modo de texto inicial da antiga escola?

Adendo

Adicionar o parâmetro nomodeset kernel (e remover o rhgb one) não faz diferença.

O mais conveniente seria alguma configuração do QEMU que força o kernel a detectar apenas o modo de texto mais básico - já que o convidado não precisaria ser modificado.

A configuração de um console serial (por exemplo, adicionando o parâmetro console=ttyS0 kernel ao convidado) funciona no meu ambiente, mas observei alguns problemas de seqüência de escape com o terminal Gnome. Além disso, isso não ajuda com os carregadores de boot que já usam o framebuffer (por exemplo, aquele no ISO do servidor Fedora 25) - e precisa de uma modificação do guest.

Exemplo de convidado do Fedora

Com o Fedora 25 como convidado, a mudança para o framebuffer acontece durante o tempo de execução do initrd, algumas mensagens de log (do console serial):

[    1.485115] Console: switching to colour frame buffer device 128x48
[    1.493184] bochs-drm 0000:00:02.0: fb0: bochsdrmfb frame buffer device
[    1.502492] [drm] Initialized bochs-drm 1.0.0 20130925 for 0000:00:02.0 on minor 0

Essas mensagens também aparecem com os parâmetros do kernel nofb e vga=normal (guest).

    
por maxschlepzig 19.02.2017 / 10:42

1 resposta

7

A partir de 2017, o qemu não fornece emulação de placa gráfica somente em modo texto para x86-64 que forçaria um convidado a permanecer no modo de texto.

As distribuições atuais como o Fedora 25 vêm com o módulo bochs_drm do kernel que ativa um buffer de quadros (por exemplo, o modo gráfico de 1024x768), por padrão. Em contraste com isso, e. O Debian 8 (estável) não fornece este módulo e, portanto, permanece no modo de texto tradicional durante a inicialização completa.

Assim, ao executar o qemu a partir de um terminal (por exemplo, com -display curses ), faz sentido ativar um console serial como seguro contra falhas:

console=tty0 console=ttyS0

ou

console=tty0 console=ttyS0,115200

(Parâmetros do kernel para o convidado, a velocidade padrão é 9600, ambas as configurações funcionam com o qemu, tornam as configurações persistentes no Fedora, atribuindo-as a GRUB_CMDLINE_LINUX in /etc/sysconfig/grub e executando grub2-mkconfig -o /etc/grub2.cfg ou grub2-mkconfig -o /etc/grub2-efi.cfg )

Caso nada mais funcione, é possível alternar o qemu via Alt + 3 para o console serial.

Uma segunda medida é desabilitar o framebuffer por meio de um parâmetro bochs_drm module - ou seja, definindo-o na linha de comando do guest kernel:

bochs_drm.fbdev=off

Alternativa na lista negra

Como alternativa, o módulo bochs_drm pode estar na lista negra, por exemplo, criando uma configuração em /etc/modprobe.d - say - bochs.conf :

blacklist bochs_drm

Como o initramfs também não deve carregar o módulo bochs_drm, é necessário certificar-se de que essa configuração esteja incluída no initramfs. Nas distribuições do Fedora, isto é conseguido via:

# dracut -f

Inicialização UEFI

Ao inicializar o qemu com um firmware UEFI (por exemplo, -bios /usr/share/edk2/ovmf/OVMF_CODE.fd ), a desativação do bochs fbdev não é suficiente. A inicialização do Fedora do que trava ao tentar mudar para o framebuffer bochs. A lista negra do bochs_drm corrige isso, mas não é suficiente. Um só recebe um modo gráfico de 640 x 480 que não é redefinido para o modo de texto pelo kernel. Assim, para os visitantes da UEFI, é necessário seguir a rota do console serial.

Console serial

O uso do console serial em combinação com -display curses gera uma experiência de usuário inferior ao ideal, pois as pragas interferem na emulação do terminal vt110 / vt220. Assim, basta apenas para emergências.

Uma solução melhor é desligar completamente o monitor e usar o modo Qemu serial / monitor combinado:

-display none -serial mon:stdio -echr 2

(onde Ctrl + b h exibe uma ajuda e Ctrl + b c alterna entre os modos)

Com o Fedora 27, o Grub2 é configurado com suporte ao console serial, por padrão. Assim, também pode ser controlado através do terminal serial.

Chamar resize após o login atualiza a geometria do terminal, portanto, o terminal resultante se comporta tão bem quanto o local.

Meta para vários usuários

Caso a imagem do convidado tenha um instalador gráfico do gerenciador de login, faz sentido desativá-la :

# systemctl set-default multi-user.target

Caso contrário, o on deve alternar para o primeiro console virtual após cada inicialização (por exemplo, Alt + 2 ou Alt + 3 ao usar a exibição de curses).

    
por 26.02.2017 / 23:26