QEMUゲストでフレームバッファを無効にする

QEMUゲストでフレームバッファを無効にする

QEMUオプション-display curses-nographic -device sga(シリアルグラフィックアダプタ)は、グラフィック環境の外部でQEMUを実行するのに非常に便利です。

(考えてみてください:リモートSSH接続、構造システムなど)

ただし、どちらのモードもフレームバッファテキストモードでは使用できません。一部のLinuxディストリビューション(Fedora 25など)の新しいデフォルトでは、起動中のある時点でフレームバッファテキストモードが有効になり、-display cursesQEMUが「1024x768グラフィックモード」のみを表示するように見えます。 SGAの場合、何も印刷されません。

だから私の質問は:カーネル(そして残りのブート部分)が古い初期テキストモードを使用するようにどのように強制できますか?

付録

nomodesetカーネルパラメータを追加することとカーネルパラメータを削除することrhgbには違いはありません。

最も便利なのは、ゲストの変更を必要としないため、カーネルが最も基本的なテキストモードのみを検出できるようにするいくつかのQEMU構成です。

私の環境では、シリアルコンソール設定(console=ttyS0ゲストにカーネルパラメータを追加するなど)が機能しますが、Gnome端末でいくつかのエスケープシーケンスの問題が観察されました。また、これはすでにフレームバッファ(Fedora 25サーバーISOなど)を使用しているブートローダには役立ちません。クライアントの変更が必要です。

Fedora ゲストの例

Fedora 25をゲストとして使用すると、initrdの実行中にフレームバッファに切り替えられます(シリアルコンソールから)

[    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

nofbこれらのメッセージはvga=normalおよび(ゲスト)カーネルパラメータとともに表示されます。

ベストアンサー1

2017年以来、qemuはx86-64用のテキスト専用グラフィックカードエミュレーションを提供しなくなり、ゲストはテキストモードのままになります。

現在のディストリビューション(Fedora 25など)に付属しているカーネルモジュールは、デフォルトでbochs_drmフレームバッファを有効にします(例:1024×768グラフィックモード)。これとは対照的に、たとえばDebian 8(安定)はこのモジュールを提供していないため、ブート全体で古いテキストモードになります。

したがって、-display curses端末でqemuを実行するときは、シリアルコンソールをセーフティデバイスとして有効にすることが合理的です(例:次のように)。

console=tty0 console=ttyS0

または

console=tty0 console=ttyS0,115200

GRUB_CMDLINE_LINUX(顧客のカーネルパラメータ、デフォルトの速度は9600です。どちらの設定もFedora/etc/sysconfig/grubに割り当て、実行、または設定をgrub2-mkconfig -o /etc/grub2.cfg維持することによってqemuで動作しますgrub2-mkconfig -o /etc/grub2-efi.cfg。)

他の方法が機能しない場合は、Alt + 3を介してqemu内からシリアルコンソールに切り替えることができます。

2番目のアクションは、モジュールパラメータを介してフレームバッファを無効にすることですbochs_drm。つまり、ゲストカーネルコマンドラインで設定してフレームバッファを無効にすることです。

bochs_drm.fbdev=off

ブラックリストの代替

または、モジュールをブラックリストに追加することもできます。bochs_drmたとえば、次のように構成を作成できます。/etc/modprobe.dbochs.conf

blacklist bochs_drm

initramfsもbochs_drmモジュールをロードできないため、この構成がinitramfsに含まれていることを確認する必要があります。 Fedora などのディストリビューションでは、次のことを実現します。

# dracut -f

UEFIブート

UEFIファームウェア(たとえば-bios /usr/share/edk2/ovmf/OVMF_CODE.fd)でqemuを起動するときにbochs fbdevを無効にするだけでは不十分です。その後、bochsフレームバッファに切り替えようとすると、Fedoraの起動が中断されます。 bochs_drmをブラックリストに載せると、この問題は解決されますが、それだけでは不十分です。 640 x 480のグラフィックモードを取得するだけで、カーネルはこれをテキストモードにリセットしません。したがって、UEFIゲストの場合はシリアルコンソールパスを使用する必要があります。

シリアルコンソール

シリアルコンソールを一緒に使用すると、-display 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)。

おすすめ記事