転載・引用について

ユーザ用ツール

サイト用ツール


userapps:screen

差分

このページの2つのバージョン間の差分を表示します。


userapps:screen [2024/09/03 14:15] (現在) – 作成 - 外部編集 127.0.0.1
行 1: 行 1:
 +====== screen ======
  
 +**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 Multiplexerの意味 =====
 +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 =====
 +screenとtmuxはTerminal Multiplexerに分類されるtool/commandだが、用語や管理モデルが大きく異なっているように見える。
 +単に使う分には慣れの問題だが、凝ったことをしようとすると、用語と管理モデルの違いを認識しないと迷ってしまうことになる。
 +
 +==== 用語の違い ====
 +大きな違いとして、Session, Window, Pain, Layoutがある。
 +
 +
 +
 +
 +===== Screen KeyBind =====
 +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            |                                                          |
 +
 +===== History =====
 + --- //[[seirios@seirios.org|seirios]] 2024/09/02 02:12//
userapps/screen.1725287825.txt.gz · 最終更新: (外部編集)

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki