web-dev-qa-db-ja.com

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

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

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

ただし、どちらのモードもフレームバッファテキストモードでは機能しません。一部のLinuxディストリビューション(Fedora 25など)での新しいデフォルトは、ブート中にフレームバッファーテキストモードがアクティブになり、-display cursesでQEMUが '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(ゲスト)カーネルパラメータとともに表示されます。

6
maxschlepzig

2017年の時点で、qemuは、ゲストをテキストモードのままにすることを強制するx86-64用のテキストモードのみのグラフィックカードエミュレーションを提供していません。

Fedora 25のような現在のディストリビューションには、デフォルトでフレームバッファー(1024x768グラフィックモードなど)を有効にするbochs_drmカーネルモジュールが付属しています。それとは対照的に、例えばDebian 8(安定版)はこのモジュールを提供していないため、完全な起動中は旧式のテキストモードのままです。

したがって、ターミナルからqemuを実行するとき(たとえば、-display cursesを使用)、シリアルコンソールをフェイルセーフとして有効にすることは理にかなっています。

console=tty0 console=ttyS0

または

console=tty0 console=ttyS0,115200

(ゲストのカーネルパラメータ、デフォルトの速度は9600、両方の設定はqemuで機能し、GRUB_CMDLINE_LINUX/etc/sysconfig/grubに割り当ててgrub2-mkconfig -o /etc/grub2.cfgまたはgrub2-mkconfig -o /etc/grub2-efi.cfg

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

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

bochs_drm.fbdev=off

ブラックリスト代替

または、bochs_drmモジュールをブラックリストに登録することもできます。つまり、/etc/modprobe.dの下に設定を作成します-言う-bochs.conf

blacklist bochs_drm

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

# dracut -f

UEFIブート

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

シリアルコンソール

Cursesがvt110/vt220端末エミュレーションに干渉するため、シリアルコンソールを-display cursesと組み合わせて使用​​すると、ユーザーエクスペリエンスが最適ではなくなります。したがって、緊急時にのみ十分です。

より良い解決策は、ディスプレイを完全にオフにして、シリアル/モニターを組み合わせたQemuモードを使用することです。

-display none -serial mon:stdio -echr 2

(どこ Ctrl+bh ヘルプを表示し、 Ctrl+bc モードを切り替えます)

Fedora 27では、Grub2はデフォルトでシリアルコンソールサポートで構成されています。したがって、シリアル端子を介して制御することもできます。

ログイン後にresizeを呼び出すと、端末のジオメトリが更新されるため、結果の端末はローカルの端末と同じように動作します。

マルチユーザーターゲット

ゲストイメージにグラフィカルログインマネージャーインストーラーがある場合、 無効にする に意味があります。

# systemctl set-default multi-user.target

それ以外の場合、各ブート後に最初の仮想コンソールに切り替える必要があります(cursesディスプレイを使用する場合は、Alt + 2またはAlt + 3など)。

7
maxschlepzig