screenコマンドの導入から利用するまでにやったこと

http://www.linux.or.jp/JM/html/GNU_screen/man1/screen.1.html#lbAK

mac port でインストール

% sudo port install screen

確認

% screen -v
Screen version 4.00.03 (FAU) 23-Oct-06

とりあえず起動してみる

% screen

メッセージが出る。

spaceバーを押すとプロンプトの画面になる。


このメッセージはいちいち表示されると面倒なので表示しないようにする。
.screenrcに書いておく。

startup_message off

操作方法を調べる。

http://www.linux.or.jp/JM/html/GNU_screen/man1/screen.1.html

コマンド 説明
^Ac 新しいウィンドウを作成する
^Aw ウィンドウ一覧をステータス行に表示する
^A数字 指定のウィンドウに切り替え
^An 次のウィンドウに切り替え
^A space 同じく。次のウィンドウに切り替え
^Ap 前のウィンドウに切り替え
^A" リストの中からウィンドウを選択する
^At システム情報を表示する
^Ak ウィンドウを閉じる

コマンドキーのC-aを押してから、なんらかのキーを押すことでコマンドを実行できる。
デフォルトではC-aがコマンドキーに割り当てられている。
でも、シェルではemacsライクなキー操作をしており、C-aはコマンドライン行の先頭に移動という操作が割り当てられているので、C-jに変えた。
.screenrcに書いておく。

escape ^Jj

ステータス行の表示を理解する


デフォルトでは^A"という操作によりステータス行を表示します。
*が現在のウィンドウを表し、
-が1つ前のウィンドウを表す。
zshという名前になっているのは、デフォルトだとシェル名がここに表記されるため。

@という記号が表記されることもある。
それは、そのウィンドウの状態に変化があったことを示す。

デタッチとアタッチについて

デタッチとは?

各ウィンドウでの作業状態を保存したまま終了すること。

アタッチとは?

デタッチしたscreenに対して再接続すること。

デタッチするには?

デフォルトだと

^Ad

デタッチされたものの一覧表示

% screen -ls
There are screens on:
	1570.ttys000.**************	(Attached)
	1615.ttys006.**************	(Attached)
2 Sockets in /tmp/screens/S-rdera.

PID、TTY、ホスト名が表示される。

アタッチするには?

% screen -r

複数のscreenがデタッチされているときはPIDを指定してアタッチする。

% screen -r <PID>

デタッチしていないscreenに対してもアタッチを行うことができる。

% screen -rx

これにより、画面共有ができるようになる。

コピーモード

端末に出力した文字列を他の端末にコピペしたいときに便利なコピーモードというものがある。
以下、デフォルトでの操作一覧

コマンド 説明
^A[ コピーモード開始
ESC コピーモード終了
SPACE コピーする範囲の開始、終了
^A] ペースト

コピーモード開始後の移動コマンドはviのキー操作になっている。
vim使いとしては大変有り難い。

スクロールバックできる行数は以下のオプションで指定できる。

defscrollback 2000

モニター機能

実行したコマンドの動きを検知してメッセージで知らせてくれる機能。
モニター機能を有効にするには、デフォルトでMは大文字。

^AM

デフォルトでモニター機能を有効にするには.screenrcに書いておく。

defmonitor on

ログファイルをtail -fで実行しておいて、とかして使える。

ウィンドウ分割

操作一覧、デフォルト。

コマンド 説明
^AS ウィンドウを上下2分割する
^AV ウィンドウを左右2分割する
^A tab 移動する
^AX アクティブな領域を閉じる
^AQ アクティブな領域以外を閉じる

Screen起動時のオプション

オプション 説明
-D デタッチした後に親プロセスにHUPシグナルを送る
-U UTF-8であることを指定する
-X 命令 命令を実行してScreenを起動する
-c ファイル ファイルを読込んで起動する(デフォルト~/.screenrc)
-d 指定セッションをデタッチする
-ls、-list セッション一覧表示する
-r アタッチする
-t 名前 ウィンドウのタイトルを変更する
-rx デタッチしていないScreenにアタッチする

Screen命令

Screen実行中にコマンドキーを入力してから:と入力するとScreen命令を実行するプロンプトがステータス行に表示される。
試しに?と入力するとデフォルトのキーバインド一覧が表示される。このコマンドは"コマンドキー?"にバインドされているので、この方法でも実行できる。


^B bというキーはコマンドキーの後にbを押せということ。
^VというキーはC-vを押せということ。

キー 命令名 説明
^B b break ウィンドウにブレーク信号を送る。でも、ブレーク信号って何?
C clear 現在のウインドウをクリアする。
: colon 命令の実行
^[ [ copy コピーモードに移行
^D d detach デタッチする
^V digraph 特殊文字を入力する。特殊文字って何?
displays 現在アタッチしているすべての画面のリストを表示する。
. dumptermcap ".termcap" ファイルを出力する。まったく、分かってない。
F fit ウィンドウサイズを現在の領域サイズに合わせる。
^F f flow フロー制御のon、off、autoをトグルする。フロー制御って何?
^I tab focus 分割したウィンドウに移動
h hardcopy 現在のウィンドウ番号nのハードコピーをファイル"hardcopy.n"に書き込む。
? help ヘルプ
{ } history 1つ前のコマンドラインを表示
i info ウィンドウの情報を表示する
K k kill アクティブなウィンドウを閉じる
^M m lastmsg ステータス行に最後に表示されたメッセージを再表示
, license スクリーンの由来を表示
^X x lockscreen ディスプレイをロックする。ロックプログラムはシェルの$LOCKPRGで指定可能
H log 出力を書き込む。でも、制御文字とか入るのでハードコピーの方が良い。
L login よく分からん
j meta よく分からん
M monitor モニター機能のオンオフ
^@ ^N sp n next 次のウィンドウへ切り替える
N number 現在のウィンドウ番号とタイトルを表示する
Q only 画面分割のとき、アクティブな領域以外を閉じる
^J other 前に表示されていたウィンドウに切り替える。
B pow_break よく分からん
D pow_detach デタッチ後に親プロセスにHUPシグナルを送る
^H ^P p ^? prev 前のウィンドウへ切り替える
\ quit すべてのウィンドウを破棄し、screenを終了する
readbuf よく分からん
^L l redisplay 現在のウィンドウを再描画する。よく分からん。
X remove アクティブな領域を閉じる
= removebuf よく分からん
Z reset 仮想端末を電源投入状態の状態に戻す。変になったときに使えば良い。
^C c screen 新しいウィンドウを開く
' select 切り替え先のウィンドウ名・ウィンドウ番号を問い合わせる。
_ silence 現在のウィンドウが非アクティブかどうかの監視を開始/停止する。
S split ウィンドウを上下2分割にする
^Z z suspend screenをサスペンドする
^T t time システム情報を表示
A title ウィンドウのタイトルを編集する
^G vbell このウィンドウの可視ベル (visual bell) を設定する。
v version 現在のバージョンとコンパイルされた日時をステータス行に表示する。
V vert_split 左右に2分割する
W width よくわからん
^W w windows ウィンドウ一覧を表示する
^R r wrap 行折り返し設定をトグルする
> writebuf よく分からん
^S s xoff 現在のウィンドウにC-sを送る
^Q q xon 現在のウィンドウにC-qを送る
^] paste . コピーバッファの内容をペースト
" windowlist -b ウィンドウ切り替えをメニューで選択する
- select - ウィンドウを番号で指定して切り替える
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 同上
I login on よく分からん
O login off よく分からん
] paste . ペーストでしょ。って。安易かな。


キーバインドはbind命令で変更できる。
ウィンドウの上下2分割はコマンドキーが^Jだとすると、^JSにバインドされている。
でも、以下のようにすると、

bind 2 split

このように.screenrcに書いておけば、

^J2

で画面を分割することができるようになる。

元の設定に戻すには、

bind 2 select 2

sourceあったのか

http://unknownplace.org/memo/2005/12/06#e006

:source $HOME/.screenrc

読んだもの

しげふみメモ : GNU screen メモ
ウィンドウ番号を1番からにする方法を知る。


zshとscreenの設定 - サーバー技術メモ

zshとscreenの設定 - サーバー技術メモ

cl.pocari.org - zsh でログイン時に screen を起動する方法

s5r.jp

vimrc + screenrc晒し - Cocelo Style

http://d.hatena.ne.jp/Ubuntu/20080115/1200377880

http://viz.is-a-geek.com/~viz/cw/index.php?Screen
複数台のマシンのログを見る方法が参考になりました。

http://d.hatena.ne.jp/aki03/20080216/1203146992
ハードステータスに$USERと$HOSTを使うという発想を勉強させて頂いた。


iandeth. - 続 screen の使い方


cd で移動したディレクトリを screen のタイトルに表示 - #生存戦略 、それは - subtech


GNU screen$B$r;H$$E]$;!*(B
resizeについて勉強させて頂いた。


http://www.tees.ne.jp/~sin-x/200704b.html
“C-a s 文字”で、指定した文字からはじまるウィンドウ名のウィンドウに移動する。をやりたっかたけどうまく行かなかった。ウィンドウ名って全部入力しなければ移動できないのでは?

screenのステータスバーを実行したコマンド名にする。 - zenpouの日記
ウィンドウ名を実行したコマンド名にする方法。
${${(s: :)1}[0]}がよく分からない。







deflogin分からねぇ〜

追記します。