为什么 CLI QEMU 在启动时使用完整的终端宽度,但在使用 nano 或 gdb 时不使用?

为什么 CLI QEMU 在启动时使用完整的终端宽度,但在使用 nano 或 gdb 时不使用?

我目前正在启动 RISC-V qemu 会话,如下所示:

/usr/bin/qemu-system-riscv64 -machine virt -m 4G -smp cpus=2 -nographic \
    -bios /usr/lib/riscv64-linux-gnu/opensbi/generic/fw_jump.bin \
    -kernel /usr/lib/u-boot/qemu-riscv64_smode/u-boot.bin \
    -netdev user,id=net0 \
    -device virtio-net-device,netdev=net0 \
    -drive file=qemu_disk.bin,format=raw,if=virtio \
    -device virtio-rng-pci \
    -vga virtio \
    -no-reboot

特别是-vga virtio要让它在启动时使用完整的终端宽度,如下所示: 在此输入图像描述

但是,如果我从 qemu VM 中打开 nano 或 gdb 等应用程序,它会停止使用封闭终端窗口的整个宽度,如下所示: 在此输入图像描述

我如何告诉 QEMU 表现得好像它有更多空间,以便 nano 和 gdb 等应用程序在启动时识别到这一点?

(注意:我随后发现我可以安装“调整大小”工具,并手动运行它,但我想知道是否有办法让 qemu 自动处理这个问题。)

答案1

回答“为什么”:

nanogdb使用相同的信息stty显示,因为这通常就足够了。

第一个屏幕截图仅显示不尝试使用终端特征的程序的输出,而第二个屏幕截图显示了尝试 - 并且缺乏底层配置信息 - 因此您得到默认值(看起来像 25x80)。

如果你仔细观察,qemu自己的控制台,无法获得好的信息。例如,它实际上可能是通过伪终端连接的。这在其他程序中很容易看到。这是我正在使用的示例屏幕。这斯蒂程序给出了正确的大小,但让我假装它是不同的大小。这就是(相反)调整大小作用:使用终端的转义序列计算正确的大小并更新使用的设置斯蒂

stty 被忽略的示例

如果 qemu 没有内置解决方法,请使用调整大小(或类似的东西)就是解决方案。

相关内容