web-dev-qa-db-ja.com

virshコンソールとttyサイズ

Ssh経由で接続する仮想化サーバーがあります。ウィンドウのサイズを変更すると、自動的にサーバーに反映されます。これは、stty -aを使用して列と行の値を確認することで最も簡単に確認できます。

次に、virsh consoleを使用して、KVMベースの仮想マシン上のシリアルインターフェイスに接続します。ウィンドウのサイズを変更すると、仮想サーバーに反映されません。これはウィンドウサイズを変更しても仮想マシンで更新されないstty -aをチェックすることで最も簡単に確認できます。これは、改行がターミナルおよびウィンドウサイズに依存するすべてのアプリケーション(emacs、 manなど)は、クライアントのウィンドウサイズがサーバーのデフォルトサイズと一致しない場合、めちゃくちゃになります。

回避策は、sttyを使用してウィンドウサイズをクライアントウィンドウと一致するように手動で設定することですが、この情報を取得して仮想マシンのウィンドウサイズを自動的に設定する方法があるのでしょうか。

11
pehrs

ほとんどの場合、シェルでこの問題を回避できます。

コマンド:

eval `/usr/bin/resize`

cOLUMNSおよびLINESシェル変数を適切に設定してから、それらをエクスポートします。したがって、bashでは、次のものを.bash_profile(または.profile、使用するものに応じて)に追加できます。

Prompt_COMMAND="eval `/usr/bin/resize`"

またはzshで:

function precmd {
    eval `/usr/bin/resize`
}

そのため、各プロンプトが表示される直前にサイズ変更が実行されます。その効果は、結果としてウィンドウの変更がすぐに処理されるsshやtelnetの効果とは異なりますが、おそらくこれが最良の方法だと思います。

7
mark

TelnetおよびSSHには、これらの設定を構成するための帯域外チャネルがあります。シリアルインターフェースにはありません。参照: http://tools.ietf.org/html/rfc107 および http://tools.ietf.org/html/rfc4254#page-14

2

マークの答えに追加するだけで、Serverfaultではコメントできません。

ターゲットドメインがOpenBSD 6.6の場合、サイズ変更は別の場所にあり、少なくともxbase66セットが必要です。

さらに、デフォルトのkshを使用している場合は、次のコマンドを実行するだけで十分です。

eval `/usr/X11R6/bin/resize`

これがRed HatのKVM管理者ガイドにないことは残念です。

0
tryfail