GitHub

ScreenHowTo

GNU Screenの始め方。

{{toc_here}}

Screenって何?

GNU Screen(以下Screen)は、Unix上の端末を「タブ化」するソフトウェアです。

Unix上で作業をしていて、下のような経験をしたことはありませんか?

使いたいソフトの数だけターミナルを起動していたら、画面がウィンドウで一杯になってしまった
Screenを使うと、一つの画面でいくつもの端末を切り替えて使うことができます。
コマンドの出力結果を使いまわすのに、いちいちファイルに保存するのは面倒
Screenを使うと、端末間で文字列を「コピー&ペースト」することができます。
ログインするたびに、前回作業していた状態に戻すのが面倒
Screenを使うと、前回ログアウトしたときの状態から作業を再開することができます。
ネットワーク越しに研究室のマシンに繋いでいたら、突然接続が切れて書きかけの文書がパーに
Screenを使うと、ネットワーク接続が切れても作業中の状態を保存してくれます。

0. 設定ファイルを用意する

まずは、自分の/home直下に「.screenrc」という名前のファイルを作り {{fn "例えば僕なら/home/yhara/.screenrc"}}、以下の内容をコピー&ペーストして保存してください。

defkanji euc
escape ^]v

hardstatus on
hardstatus alwayslastline "screen | %w | %u %= %m/%d %D %c"

1. 使ってみる

シェルでscreen[Enter]と打つとScreenが起動し、下のような起動画面が表示されます。 {{attach_view("screen.png")}}

スペースかエンターキーを押すと、シェルのプロンプトが表示され、普通の端末と同じように 使えるようになります。一番下の行に、何か表示されていますね。この「0* zsh」 というのが、「いま0番目の端末にいる」という意味です。

とりあえず、emacsでC言語のプログラムでも書いてみましょうか。 {{attach_view("screen-emacs.png")}}

由緒正しい「Hello, world!」ですね。

さて、プログラムが書けたらコンパイルですが……ちょっと待って!emacsを終了するのではなく、 「^] c」(Ctrlを押しながら「]」→Ctrlを離して、「c」)と押してみてください。 {{attach_view("screen-newterm.png")}}

一番下の行に「1* zsh」という表示が加わりました。

Screenでは、「^]」に続けてキーを押すことでいろいろなコマンドを実行できます。 「c」は新しい端末を開くコマンドです。

では、さっきのプログラムをコンパイルしてみましょう。 {{attach_view("screen-compile.png")}}

あれ、なにかコンパイルエラーがあるようですね。ソースを見てみましょう。

端末を切り替えるには、「^] (端末の番号)」とします。「^] 0」と押して、emacsの画面に 戻ってみましょう。 {{attach_view("screen-semicolon.png")}}

どうも、行末のセミコロンを忘れていたようです。 {{fn "Rubyに慣れた人にありがちな罠です:-P"}}

これを直して、もう一度コンパイルしてみましょう。 「^] 1」と押して、コンパイルの画面に戻ります。 {{attach_view("screen-recompile.png")}}

今度はちゃんとコンパイルできました。

まとめ

  • screen [Enter] で起動
  • ^] c で新しい端末を開く
  • ^] (番号) で端末の切り替え

ソフトウェアの操作は、「習うより慣れろ」です。自分でscreenを起動して、 新しい端末を作ったり、切り替えたりしてみてください。 また、1番の端末にいるときに「^] 1」とするとどうなるか?というのも試してみてください。 {{fn "どのようなエラーが出るかを知っておけば、エラーが出たときに慌てなくてすみますね。"}}

上では説明しませんでしたが、「^] ^]」(Ctrlを押しながら]を2回)とすると、 直前の端末に戻ることができます。これが一番良く使うコマンドかも知れません。

そのほかの操作について補足しておきます。

  • 端末を閉じるには、シェルでexit[Enter]と打つ
  • Screenを終了するには、全ての端末を閉じる

2. デタッチ

デタッチ・アタッチは、起動中のプログラムを全て保持したまま、screenだけを終了/再開するコマンドです。

screenの起動中に「^] d」と押すと、screenを「デタッチ」し、終了します(「[detatched] というメッセージが表示されます)。

ここで、screen -r[Enter]と入力すると、デタッチしたセッションを再開することができます。

これを使うと、会社や研究室から帰る前に「デタッチ」し、つぎに来たときに「アタッチ」して、 作業を再開することができます。

まとめ

  • ^] d でデタッチ(中断)
  • screen -r でアタッチ(再開)

3. コピーモード

まとめ

  • ^] [ でコピーモードに入る
  • スペースでコピー開始・h,j,k,lで移動・Enterでコピー終了
  • ^] ] でペースト

FAQ

「^]」はどうも押しにくいので、別のキーに変えたい

.screenrcを書き換えることで、Screenのコマンド入力に使うキーを変更することができます。

例えば「^T」をプレフィックスキーにするなら、

escape ^ty

などと書きます。後ろの「y」は、『「^T」そのものを入力したいときには「^T y」と押す』 という意味です。 {{fn "「^T」そのものを入力したいというシチュエーションはめったにないかも知れませんが、 「Screenの中で別のマシンにリモートログインし、その中でScreenを起動してしまった」時に使ったりします。"}}

yの部分は何でも構いませんが、「d」に割り当てたりすると「^T d」でデタッチできなくなるなど、 もとの機能が使えなくなるので注意しましょう。 各コマンドのキー割り当てはman screenで参照できます。

なんかパスワードを聞かれる画面が出た

「^] x」または「^] ^x」と入力すると、下のような画面が出てScreenがロックされます。

Screen used by 名前 <ユーザー名>
Password:

自分のUnixのログインパスワードを入力すると元に戻ります。

リンク

より詳しく知りたい方は、以下のURLを参照してください。

また、man screen、 info screenも参考になるでしょう。

source: ScreenHowTo.hd
View on github | Report issue