我有一个通过 ssh 连接的虚拟化服务器。如果我现在更改窗口大小,它将自动传播到服务器。使用 最容易看到stty -a
,检查列和行值。
然后,我使用virsh console
连接到基于 KVM 的虚拟机上的串行接口。当我现在更改窗口大小时,它不会传播到虚拟服务器。通过检查 最容易看到这一点stty -a
,当我更改窗口大小时,虚拟机上不会更新它。这意味着换行符在终端中无法正常工作,并且任何依赖窗口大小进行格式化的应用程序(emacs、man 等)都会变得混乱,除非客户端上的窗口大小与服务器上的默认大小匹配。
一种解决方法是使用 stty 手动设置窗口大小以匹配客户端窗口,但我想知道是否有任何方法可以让此信息传播并自动在虚拟机中设置窗口大小。
答案1
您基本上可以在 shell 中解决这个问题。
命令:
eval `/usr/bin/resize`
将适当地设置 COLUMNS 和 LINES shell 变量,然后导出它们。因此在 bash 中,您可以将以下内容添加到 .bash_profile(或 .profile,取决于您使用的)
PROMPT_COMMAND="eval `/usr/bin/resize`"
或者在 zsh 中:
function precmd {
eval `/usr/bin/resize`
}
这样,在显示每个提示之前都会执行调整大小操作。效果不会像 ssh 或 telnet 那样,窗口更改会立即得到处理,但我认为这可能是您能得到的最好的效果。
答案2
Telnet 和 SSH 具有带外通道来配置这些设置。串行接口没有。请参阅:https://www.rfc-editor.org/rfc/rfc1073和https://www.rfc-editor.org/rfc/rfc4254#page-14
答案3
如果你的系统中没有 resize 命令,你可以尝试以下操作:
stty rows 45
stty columns 140
但你必须把它放在你的 .bash_profile
坚持改变然后来源它来看到变化
答案4
只是补充一下马克的答案,因为 Serverfault 不允许我发表评论。
当目标域是OpenBSD 6.6,resize 位于其他地方并且至少需要 xbase66 设置。
此外,如果您使用默认什,运行即可:
eval `/usr/X11R6/bin/resize`
遗憾的是,Red Hat 的 KVM 管理指南中没有此内容。