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 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
(ゲスト)カーネルパラメータとともに表示されます。
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ファームウェア(-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など)。