LoginSignup
14
14

More than 5 years have passed since last update.

ログイン後に端末エミュレータのウィンドウサイズを変えると表示が崩れるのを直す

Last updated at Posted at 2017-03-30

某クラウドのサーバに、iTermで多段SSHログインしたら下記の事象に遭遇したのでメモ

事象

リモートのサーバにログインする

Screen Shot 2017-03-30 at 6.21.04 PM.png

numbersという、1から100までの数字が表示されたファイルをlessで表示する。

$ cat numbers | less

下記のような表示になる。ここまでは想定した動作。

Screen Shot 2017-03-30 at 6.21.13 PM.png

そこから、ウィンドウサイズを変える。ちょっと大きくして、同じことをする。

Terminal
$ cat numbers | less

すると表示がくずれる。

Screen Shot 2017-03-30 at 6.22.42 PM.png

くずれる……。

Screen Shot 2017-03-30 at 6.22.36 PM.png

原因

ローカルのウィンドウサイズの変更が、リモート側の端末デバイスまでうまく反映されていない模様。ウィンドウサイズが変更されると、リモートホストのカーネル1にもその情報を伝える必要があるが、できていない。多段SSHのために中継したサーバで損失しているのかも?このクラウド以外では発生しないため、特定のサーバ固有の問題っぽい。

そのためvimlessなど、対話スクリーンを独自に開くソフトウェアはレイアウト崩れに見舞われてしまう。

$ stty size と打つことで、端末デバイスが認識している端末の行数と列数が表示できる2が、端末エミュレータのウィンドウサイズを変更してもそれが変更されない。

ウィンドウサイズ変更前

Screen Shot 2017-03-30 at 6.21.50 PM.png

14 x 62 を指している。

ウィンドウサイズ変更後

Screen Shot 2017-03-30 at 6.22.16 PM.png

サイズが変わったにもかかわらず、同じ値である14 x 62 を指している。

解決方法

sttyコマンドで端末デバイスに適切な端末サイズを教えてあげれば、レイアウトは戻る。

Terminal
$ stty rows <列数> cols <行数>

iTermの場合、ウィンドウサイズを変更しようとしてウィンドウの端をドラッグすると、入力できる文字の端末サイズを表示してくれるので、その値を入れる。

Screen Shot 2017-03-30 at 6.58.21 PM.png

なおる。

Screen Shot 2017-03-30 at 6.58.31 PM.png

TMUX Pluginを使う

いちいちsttyなんちゃらと入力するのも面倒だが、普段tmuxを使っている人には、もっと簡単な方法がある3。tmuxのウィンドウ、あるいはペインサイズをsttyコマンドの引数として渡して実行してやればレイアウトは戻るからだ。

<tmuxのprefix> + aキーを入力するだけで、上記のstty rows <列数> cols <行数>を入力してくれるtmuxのプラグインを作った。キーバインドは変更可能であるため活用されたし。導入方法は下記のリンクにあり。

Github: tmux-adtty

実行例

一番下のペインで開いているviのレイアウトが崩れてるため、一旦viを抜けて、<tmuxのprefix> + aキーを入力。

Screen Shot 2017-03-30 at 6.06.26 PM.png

すると、なおる(^_^)v

Screen Shot 2017-03-30 at 6.06.45 PM.png


  1. sttyの説明より。例えば stty rows コマンドの説明として "tell the kernel that the terminal has N rows" とあり、カーネル側に端末の行数と列数を教えている模様。 http://man7.org/linux/man-pages/man1/stty.1.html 

  2. bashではLINESCOLUMNSという変数に行数と列数の情報が入る。 

  3. そもそも、リモート側に端末サイズが伝わるようにするのが理想的だが、大人の事情でできない人はここにあるような方法で頑張るしかない、のかもしれない。 

14
14
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
14