virsh 控制台和 tty 大小

virsh 控制台和 tty 大小

我有一個透過 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/rfc1073https://www.rfc-editor.org/rfc/rfc4254#page-14

答案3

如果調整大小命令在您的系統中不可用,您可以嘗試以下操作:

stty rows 45 
stty columns 140

但你必須將 .bash_profile其持久化,然後獲取它以查看更改

答案4

只是添加到標記的答案中,因為 Serverfault 不允許我發表評論。

當目標域為OpenBSD 6.6, resize 位於其他位置並且至少需要 xbase66 設定。

此外,如果您使用預設的克什,運行就足夠了:

eval `/usr/X11R6/bin/resize`

遺憾的是,這並不在 Red Hat 的 KVM 管理指南中。

相關內容