GNUscreen 5.0.0が2024/08/28 UTCにReleaseされた。
筆者はTerminal multiplexerとしてscreenを補助的に使う生活を3年くらい前までしていた。 要するにMultiplexerを使わずともTerminal Windowを複数立ち上げれば事足りた。
本格的にTerminal Multiplexerを利用するようになったのは、2021年ごろに海外の仕事を受けた際だったとおもう。 業務上、remoteの環境を操作する必要があったのだが、回線状況が悪いため、しばしばconnectionが切断される羽目に陥った。 おかげで、日本にいる時は海外側の機器の操作にストレスが溜まり、海外で作業している時は「誤家庭のサーバー環境」の保守もできなくなった。
というわけで、さすがにTerminal Multiplexerを使うしかなくなったタイミングで色々調べた上でtmuxを利用し始めた。
なぜscreenではなくtmuxにしたかというと、tmuxでは複数painに対して同時にキー入力を行うことができたから。 sshで接続している複数のVMに同じコマンドをバラバラに打つのは面倒である。 特にOSのUpdateの時などは、対象の台数が多く同時に9台の更新を行うこともあるので、painを移動しながら9回同じコマンドを入力するのは辛かった。 当時のscreen(4.8.0かな)ではこの問題を解決できなかったので、tmuxを選択した。
しかし、筆者には、tmuxを使うようになってもscreenを使わざるを得ない状況が残っていた。それがserial console経由での機器設定である。 MacからUSB serial cableやBluetooth serial adapterを利用してシリアルコンソール経由で機器設定する際にscreenが便利だったのだ。 しかし、tmuxのpainの中でscreenを起動すれば、手が迷ってしまう。 特にlog取得や(screen側の)region移動と(tmux側の)pain移動など、command側に何かさせようとしたら手が迷って失敗も増えてしまった。 もちろんserial制御にtipやcuなどの慣れている、古のcommandを利用することも十分に考慮の範囲だったのだが、macOS側の設定まで考えると設定の維持管理は面倒。 screenの保守と比べたら比較にならない。
というわけで、tmuxを使って手が慣れた今頃になって、screenが20年ぶりのMajor Version Upし、そこにmultiinputが入ったというアナウンスがあった。 (なお、screenのMinor Version Upは年1回程度続いており、BugFixなどは継続して行われている。)
tmuxとscreenの同時併用に面倒な思いをしていた筆者は、multiinputに期待しscreenに一本化できることを期待して、screenを再度一から設定しようと考えたのであった。
(マクラが長い…しかも単にポエムになっている… orz)
TerminalをMultiplex(複合的な、多重送信→多重化)する(笑)というのは、直感的にはいわゆるTerminal Applications(xterm, Terminal.App, Console画面, WezTermなど)で動かしているshell下で、複数の「画面表示を要するApplication」を、Terminal画面を分割して自由に表示させる、というイメージになると思われる。 画面分割などによる制御を手元のTerminal Appsで実行すると、Terminal Appsが死んだ時に動かしていたProcessが停止して困ったことになる。 また、UNIXにおいてApplicationがつかんでいるptyを乗っ取ることはSecurityの観点などからよろしくないため、他のcommandsが握っているptyを乗っ取ることは原則としてしない。 (多くの人にとっては事実上できないと言えるだろう)
というわけで、手元、Remoteを問わず、screenを用いて踏み台単位でMultiplexすれば良いということになる。 そうすれば、multiplexerがptyやconnectionを維持しつつ、Detachしてlogoutすることもできるし、次回loginした時に、再度Attachして制御を取り戻すこともできる。
この制御の継続性が、筆者がTerminal Multiplexerを利用する意味である。(この意味はあくまでも筆者にとってなので、そうでない人が多数いるだろうことは自明である。為念)
screenとtmuxはTerminal Multiplexerに分類されるtool/commandだが、用語や管理モデルが大きく異なっているように見える。 単に使う分には慣れの問題だが、凝ったことをしようとすると、用語と管理モデルの違いを認識しないと迷ってしまうことになる。
大きな違いとして、Session, Window, Pain, Layoutがある。
screenにおけるKeyBind表
| Key | raw | Sft | Ctl | raw | Sft | Ctl |
|---|---|---|---|---|---|---|
| a | meta | tittle | other | |||
| b | break | pow_break | break | |||
| c | screen | clear | screen | |||
| d | detach | pow_detach –confirm | detach | |||
| e | ||||||
| f | flow | fit | flow | |||
| g | vbell | |||||
| h | hardcopy | log | prev | |||
| i | info | focus | ||||
| j | ||||||
| k | kill –confirm | kill –confirm | ||||
| l | redisplay | redisplay | ||||
| m | lastmsg | monitor | lastmsg | |||
| n | next | number | next | |||
| o | ||||||
| p | prev | |||||
| q | xon | only | xon | |||
| r | wrap | wrap | ||||
| s | xoff | spit | xoff | |||
| t | ||||||
| u | parent | parent | ||||
| v | version | digraph | ||||
| w | windows | width | windows | |||
| x | lockscreen | remove | lockscreen | meta | other | |
| y | ||||||
| z | suspend | reset | suspend | |||
| 0 | select 0 | |||||
| 1 | select 1 | |||||
| 2 | select 2 | |||||
| 3 | select 3 | |||||
| 4 | select 4 | |||||
| 5 | select 5 | |||||
| 6 | select 6 | |||||
| 7 | select 7 | |||||
| 8 | select 8 | |||||
| 9 | select 9 | |||||
| [ | copy | copy | ||||
| ] | paste . | paste . | ||||
| < | readbuf | |||||
| > | writebuf | |||||
| { | history | |||||
| } | history | |||||
| . | dumptermcap | |||||
| . | license | |||||
| : | colon | |||||
| * | displays | |||||
| ' | select | |||||
| ? | help | |||||
| @ | next | |||||
| - | select - | |||||
| = | removebuf | |||||
| _ | silence | |||||
| \ | quit –confirm | |||||
| | | ||||||
| “ | windowlist -b | |||||
| Tab | focus | |||||
| Spc | next |
— seirios 2024/09/02 02:12