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
読んだもの
しげふみメモ : GNU screen メモ
ウィンドウ番号を1番からにする方法を知る。
cl.pocari.org - zsh でログイン時に screen を起動する方法
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を使うという発想を勉強させて頂いた。
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分からねぇ〜
追記します。