Отключить кадровый буфер в гостевых системах QEMU

Какой-то монстр) С perl должно быть проще

cat file
ba bla bla hyphe-</page>
<page>nated bla bla bla
and the output should look like

bla bla bla</page>
<page>hyphenated bla bla bla

Это GNU sed (в некоторых других sed-s опция -E используется для расширенных регулярных выражений)

sed -nr '/[[:alpha:]]+-<\/[[:alpha:]]+>$/{
N
s!([[:alpha:]]+)-(</[[:alpha:]]+>)\n(<[[:alpha:]]+>)([[:alpha:]]+)!\2\n\3\1\4!}
p' file
ba bla bla </page>
<page>hyphenated bla bla bla
and the output should look like

bla bla bla</page>
<page>hyphenated bla bla bla
6
19.02.2017, 15:58
1 ответ

По состоянию на 2017 год qemu не обеспечивает эмуляцию графической карты только в текстовом режиме для x86-64, которая заставляла бы гостя оставаться в текстовом режиме.

Текущие дистрибутивы, такие как Fedora 25, поставляются с модулем ядра bochs_drm , который по умолчанию включает буфер кадра (например, графический режим 1024x768). В отличие от этого, например, Debian 8 (стабильный) не предоставляет этот модуль, и поэтому он остается в текстовом режиме старой школы во время полной загрузки.

Таким образом, при запуске qemu с терминала (например, с -display curses ) имеет смысл включить последовательную консоль как отказоустойчивую:

console=tty0 console=ttyS0

или

console=tty0 console=ttyS0,115200

(параметры ядра для гостя, скорость по умолчанию 9600, обе настройки работают с qemu, сделайте настройки постоянными в Fedora, назначив их GRUB_CMDLINE_LINUX в / etc / sysconfig / grub и выполнив grub2-mkconfig - o /etc/grub2.cfg или grub2-mkconfig -o /etc/grub2-efi.cfg)

Если ничего не работает, можно переключиться внутри qemu с помощью Alt + 3 на тогда последовательную консоль.

Вторая мера заключается в отключении фреймбуфера с помощью параметра модуля bochs_drm , то есть путем установки его в командной строке гостевого ядра:

bochs_drm.fbdev=off

Альтернатива черного списка

В качестве альтернативы bochs_drm может быть занесен в черный список - т.е. путем создания конфигурации в /etc/modprobe.d - скажем - bochs.conf :

blacklist bochs_drm

Поскольку initramfs не должен загружать также модуль bochs_drm, необходимо убедиться, что этот конфиг включен в initramfs. В дистрибутивах типа Fedora это достигается с помощью:

# dracut -f

UEFI Boot

При загрузке qemu с прошивкой UEFI (например, -bios /usr/share/edk2/ovmf/OVMF_CODE.fd) отключение bochs fbdev недостаточно. Затем загрузка Fedora зависает при попытке переключиться на фреймбуфер bochs. Внесение bochs_drm в черный список исправляет это, но этого недостаточно. Можно просто получить графический режим 640 x 480, который не сбрасывается ядром в текстовый режим. Таким образом, для гостей UEFI необходимо выбрать путь через последовательную консоль.

Последовательная консоль

Использование последовательной консоли в сочетании с -display curses приводит к неоптимальному взаимодействию с пользователем, поскольку curses мешает эмуляции терминала vt110 / vt220. Таким образом, этого достаточно только в экстренных случаях.

Лучшее решение - полностью выключить дисплей и использовать комбинированный режим Qemu последовательного порта и монитора:

-display none -serial mon:stdio -echr 2

(где Ctrl + b h отображает справку и Ctrl + b c переключает режимы)

В Fedora 27 Grub2 по умолчанию настроен с поддержкой последовательной консоли. Таким образом, им можно управлять и через последовательный терминал.

Вызов resize после входа в систему обновляет геометрию терминала, таким образом, результирующий терминал ведет себя так же хорошо, как и локальный.

Многопользовательская цель

В случае, если гостевой образ имеет графический установщик диспетчера входа, имеет смысл отключить его :

# systemctl set-default multi-user.target

В противном случае он должен переключаться на первую виртуальную консоль после каждого загрузка (например, Alt + 2 или Alt + 3 при использовании дисплея curses).

8
27.01.2020, 20:27

Теги

Похожие вопросы