試験運用中なLinux備忘録・旧記事

はてなダイアリーで公開していた2007年5月-2015年3月の記事を保存しています。

GNU screenについて

GNU screenは、コマンドライン・インターフェース(CLI)の端末エミュレータ*1つまり、1つの端末*2を使用して、その中で端末をエミュレートする。これにより、色々と便利なことができるようになる。
しかし、個人的には、SSHで遠隔ログインをする場合や、作業の多くをCLI上で行う場合を除いて、他人に無理にすすめるようなものだとは思わない。
(2007/6/28)言葉足らずだったので補足すると、X上のデスクトップ環境などで、端末自体を必要なとき以外ほとんど使わないというような人や、端末エミュレータが持っている機能だけで特に不自由なく使えている人などにおいて、GNU screenを導入する必要性やメリットは、あまりないのではないかと思う。なお、GNU screenを否定するつもりはなく、自分の環境でも役に立っている。
以下、利点・欠点と基本的な使い方についてのみ紹介する。

利点

  • X上の端末エミュレータで使用した場合、ウィンドウを閉じたり、ログアウトをしたりしても、screenの中で動作しているプロセスは終了せず、後で再びセッションに接続することで、同じ状態に復帰できる。
  • 1つの端末の中で、複数の仮想端末(「ウィンドウ」と呼ぶ)を作成し、切り替えられる。これは、SSHで遠隔ログインしているときに、特に役に立つ。
  • 画面の文字列をコピペする機能がある。このとき、画面を後ろにスクロールさせることができる。
  • 画面の中に、日付・時刻や仮想端末一覧が表示でき、更に、情報を収集するスクリプトを書くことで、様々なシステム状態を表示させられる。
  • 画面を縦に分割して、別々の仮想端末の画面を同時に表示できる。これは、SSHで遠隔ログインしているときに特に役に立つが、X上の端末エミュレータの中の場合、切り替えが面倒に感じるため、おすすめはしない。
  • 画面からの出力をファイルに書き出すことができる。
  • 別々の端末から同一の画面を操作できる。screenセッションへのアクセス権などを設定した上で、相手にSSHで遠隔ログインをしてもらい、自分のセッションに接続してもらうことで、自分のコマンド操作などを離れた相手に見せることができ、教育にも使える。

関連URL:

欠点

  • 機能が豊富で強力なため、とっつきにくい。マニュアルページをいきなり読んでもやたら長いし、内容も難解な上、詳しく解説されていない部分もある。
  • GNU screen特有の様々な操作を実行するために使用する「コマンドキー」(エスケープキーなどとも呼ばれる)というキーの指定が必要で、デフォルトはCtrl+Aで、このキーはシェルなどで使われているが、GNU screenが優先してキーの入力を取ってしまうため、衝突するシェルやアプリケーションの側では使用できなくなる。(そのため、衝突の起きにくいキーに割り当てるのがよい)
  • 操作の実行は「コマンドキー」に続いてキー(例: ヘルプでは「?」)を押すという、2段階のキー入力であり、GNU Emacs同様、慣れるまでがつらく、面倒にも感じるかもしれない。

(2007/6/30)コマンドキーに関して、どのアプリケーションのどの機能と衝突するかが載っているページがあったので紹介。選択の参考になるかもしれない。

実行例

$ screen -UxR

この起動方法で実行すると、

  • screenセッションが存在しない場合には新しく作成し、接続する。
  • どこからも接続されていない(一度切断された)セッションがあれば、それに接続する。
  • 既にどこかと接続されているセッションにも接続をする。これにより、複数の端末から同じセッションに接続できるようになる。
  • UTF-8エンコーディングモードで動作する。

という挙動をするので、エイリアスとして指定しておくと楽。

仮想端末の作成・切り替え

大文字と小文字は区別するので注意。

仮想端末制御のキー操作
機能キー
作成(screen)Command-cもしくはCommand-Ctrl+c
次の番号(next)Command-nもしくはCommand-Ctrl+n
前の番号(prev)Command-pもしくはCommand-Ctrl+p
前に表示していた仮想端末(other)Command-Command
リストから選択(windowlist -b)Command-"

コピペ/後方スクロール機能

画面を後ろにスクロールしたい場合、コピーモードに入る必要がある。

コピー/貼り付け/後方スクロール機能のキー操作
機能キー
コピーモードに入る(copy)Command-[
貼り付け(paste)Command-]
コピーモードに入ったら、開始位置でEnterを一度押し、終点まで移動してもう一度Enterを押すと、その間の文字列が記憶される。*3その後、貼り付けができるようになる。

画面を縦に分割

これに慣れるのはしんどいので、変更するのをおすすめ。大文字と小文字の違いに注意。

画面分割のキー操作
機能キー
分割(split)Command-S
現在操作している領域以外を隠す(only)Command-Q
現在操作している領域を隠す(remove)Command-X
操作する仮想端末の切り替え(focus)Command-Ctrl+i, Command-Tab

screenセッションの切断

Command-Ctrl+dCommand-dでセッションを手動で切断*4することができる。
X上の端末エミュレータのウィンドウを「閉じる」ボタンなどで閉じた場合や、SSHで遠隔ログインしている状態でSSH接続が切れたりした場合は、自動的にセッションを切断する。

*1:正確には、CLI環境におけるウィンドウマネージャであり、本家においても「Screen is a full-screen window manager that multiplexes a physical terminal between several processes, typically interactive shells.」と記述されている。

*2:X上の端末エミュレータ、素のLinuxコンソール、SSHクライアント(例: sshコマンド、Windows上のPutty)など

*3:メッセージが表示されるので分かりやすい

*4:screenのセッションを切断することをdetachといい、接続することをattachという