Open4

socatで仮想シリアルコンソールポートを用意したい会

okuokuokuoku

サーバーの起動

./socat TCP4-LISTEN:5666,reuseaddr "EXEC:/bin/bash -l,pty,stderr,setsid,ctty"

これで上手くいった。 setsid,ctty しないと Ctrl + C できない。 ...いわゆるline edit中のキャンセルもCtrl + Cだけど、それすらできなくなるのは意外だった。

あとは適当なTCP/IP端末でポート 5666 に接続すれば良い。

この構成だと誰も SIGWINCH を投げないので、コンソールのサイズを変更した場合は手動でリサイズする必要がある。XTermにはこれを行う resize プログラム https://invisible-island.net/xterm/manpage/resize.html が付属している。

Busyboxにも resize プログラムがある(未確認)

https://github.com/mirror/busybox/blob/2d4a3d9e6c1493a9520b907e07a41aca90cdfd94/console-tools/resize.c

okuokuokuoku

PuTTYの罠

PuTTYでは、今回のような接続にはtelnetではなくRaw TCP/IPを使う。

ただし何故かPuTTYはRaw接続であってもデフォルトでline disciplineしようとしてしまう。

Terminalの設定から、どちらも "Force off" を選ぶことで正常に制御できる。

... まぁそもそもBusyboxに telnetd あるんだからそっちを使えば良い話ではあるが。。