シリアル (UART等でも) 接続した場合、SIGWINCH が届かないのでウィンドウサイズを変更したときに画面がおかしくなることがある。それを直すための bash
スクリプト。
手動で stty cols ${COL} rows ${ROW}
と叩くのと一緒。
xterm
が入っていると reset
コマンドで済むらしいですが。
winch_
# !/bin/bash
# カーソル位置を保存
echo -ne '\e7'
SAVE_STTY=$(stty -g)
stty raw -echo min 0
# (x,y)=(999,999) へカーソルを移動、現在位置を表示する
echo -ne '\e[999;999H\e[6n'
IFS=';' read -rd R -a POSITION
stty ${SAVE_STTY}
# 出力をパース
ROW=${POSITION[0]:2}
COL=${POSITION[1]}
# カーソル位置を復旧
echo -ne '\e8'
# 端末を設定して表示する
stty cols ${COL} rows ${ROW}
stty size
エスケープシーケンスを出力してる echo 文 3つは一度に出力しても変わりません。
read をなんとかしたら sh で動きそうなんだけどなぁ。
putty で UART 接続すると速度を手打ちしないといけないので、カンニング用に。
110, 300, 600, 1200, 2400, 4800, 9600,
14400, 19200, 38400,
57600, 115200, 230400,
460800, 921600
stty 1200
で速度を設定、stty speed
で現在の速度を表示。
参照:
Arch Linux/シリアルコンソール
ANSIエスケープコード
おまけ:ウィンドウタイトルを変更するには
printf "\033P\033]0;`uname -n`:`tty`\007\033\\"
こんな感じ。