screenの設定
MacBook内のApacheでTracを動かそうとしてはまっている山葵です。
Tracのこともおいおい書きたいのですが、今回はScreenについてです。
Screenとは
UNIXやLINUXでは単一のコンソールだけでは、足りないことがあります。
コンソール上でパッケージ管理システムでインストール作業などを行っている場合に
他の作業などを行いたい場合にはAlt+→などで他のコンソール画面を呼び出すこともできますが。
X上でのktermなどではそれができません。
screenはこのような場合に、単一のコンソール上で仮想画面を複数操作するためのソフトウェアです。
インストール方法
すでに、さくらインターネットへのインストール方法は書きました。
BSD、Linuxでのインストール方法は以下のとおり。
あ、うろ覚えなので間違ってるかもです(ぇ
# port install screen
# aptitude install screen
# yum install screen
で、実際の設定について
設定ファイルはホームディレクトリ(~/)に.screenrcを作成しましょう。
Prefixキーの設定
次にPrefixキーの設定を行います。
Screen起動後に、Screenの操作を行うためには、そのことをscreenに教えてあげるために
Prefixキーを打つ必要があります。
初期設定ではPrefixキーは!^Aa(Control+a)に割り当てられていますが、
僕はEmacsユーザなので、このキーをscreenに取られると困ることが多々あるので、
他のPrefixキーを割り当てます。
例えば、Control+zとか。
escape ^Zz
スタートアップメニューの削除
Screen起動後に端末に表示されるメッセージの表示がうざい人は消しましょう。
startup_message off
デタッチ
現在利用中のScreenを中断することをデタッチ(中断)、
再開することをアタッチ(再開)と呼びます。
不安定な端末などをScreen上に表示している場合などには、
端末が突然終了する場合もあり、そのような場合には自動的に端末を中断状態にしたいです。
autodetach on
現在実行しているscreenから抜けるには、C-z dとタイプします。
デタッチしたscreenにもう一度アタッチすることで前の状態に戻る。
アタッチ
一度抜けたscreenを再度起動するには以下のコマンドを実行する。
$ screen -x (screenのプロセス番号)
screenプロセスが1つしかない場合は、プロセス番号は省略可能です。
プロセス番号の確認
端末のプロセス番号の確認方法
$ screen -ls
コピーモード
C-z [ とタイプすると、screenはコピーモードになります。
viなキーバインドでカーソル移動が可能である。
なお、Emacsのキーバインドを用いるには下記の設定を記述する。
markkeys h=^b:l=^f:$=^e:^d=^v:^D=^V
スペースキーを押せばコピーの始点が記憶され、二度目で終点が記憶されてコピーモードを抜ける。
C-z [ でコピーモードを抜けます。
Emacs key bind
bind 2 split などとするとデフォルトの
ウインドウ切り替えコマンドを上書きしてしまう場合がある
bind x eval 'echo "2: split / 1: only / 0: remove / o: focus r: resize"' 'command -c REGION' bind -c REGION 2 split bind -c REGION 1 only bind -c REGION 0 remove bind -c REGION o focus bind -c REGION r eval 'echo "j: -1 / k: +1 / other: quit"' 'command -c RESIZE' bind -c RESIZE = eval 'resize =' 'command -c RESIZE' bind -c RESIZE J eval 'resize +5' 'command -c RESIZE' bind -c RESIZE K eval 'resize -5' 'command -c RESIZE' bind -c RESIZE j eval 'resize +1' 'command -c RESIZE' bind -c RESIZE k eval 'resize -1' 'command -c RESIZE'
# 本当はevalとかについても詳しく書くべきなのだろうなぁ。
logging
Screenでのコマンド履歴を保存します。
logで保存のon、offを指定し、logfileでlogfileの場所を指定する。
(以下は僕のMacBookの場合です。)
log on deflog on logfile "/Users/hogehoge/log/screen-%Y%m%d-%n.log"
コマンド履歴
コマンドの履歴の保存行数を示す。
defscrollback 3000
ビジュアルベル
Screenではビープ音を鳴らす代わりに、端末下部にメッセージを表示します。
うざい人は消しましょう。
vbell off
端末下部のステータスラインに情報を表示する
ステータスラインに情報を表示すること設定も可能です。
ここでは、見つけたものをいくつか。
- ステータスラインに端末一覧と時刻を表示する。
hardstatus alwayslastline "[%02c] %`%-w%{=b bw}%n %t%{-}%+w"
- ステータスラインに端末一覧と時刻を表示する。
hardstatus alwayslastline "%{= rw} %H %{= wk}%-Lw%{= bw}%n%f* %t%{= wk}%+Lw %{= wk}%=%{= gk} %y/%m/%d %c "
- ステータスラインに端末一覧のみを表示する。
hardstatus alwayslastline "%w"
表示方法については、おぼえがき@tips for GNU screenが詳しいです。
参考文献など。
コピペ用
# エンコーディング defencodig utf-8 ## Prefixキーの設定 escape ^Zz # スタートアップメニューの削除 startup_message off # プロセス番号の確認 ## $ screen -ls # オートデタッチ autodetach on # コピーモード # C-z [ とタイプすると、screenはコピーモードになる。 # viなキーバインドでカーソル移動可能 # スペースキーを1度押せばmark set 二度目でコピー。 # C-z [ でコピーモードを抜ける。 # emacs keybind for copy mode markkeys h=^b:l=^f:$=^e:^d=^v:^D=^V # Emacs key bind # bind 2 split などとするとデフォルトの # ウインドウ切り替えコマンドを上書きしてしまう場合がある bind x eval 'echo "2: split / 1: only / 0: remove / o: focus r: resize"' 'command -c REGION' bind -c REGION 2 split bind -c REGION 1 only bind -c REGION 0 remove bind -c REGION o focus bind -c REGION r eval 'echo "j: -1 / k: +1 / other: quit"' 'command -c RESIZE' bind -c RESIZE = eval 'resize =' 'command -c RESIZE' bind -c RESIZE J eval 'resize +5' 'command -c RESIZE' bind -c RESIZE K eval 'resize -5' 'command -c RESIZE' bind -c RESIZE j eval 'resize +1' 'command -c RESIZE' bind -c RESIZE k eval 'resize -1' 'command -c RESIZE' # logging log on deflog on logfile "/Users/hogehoge/log/screen-%Y%m%d-%n.log" # copy/scrollback mode (C-t esc)で戻れるhistory bufferを増やす。 defscrollback 3000 # ビジュアルベルをoffにする。 vbell off # 画面下に時刻&スクリーン一覧を表示する。 # hardstatus alwayslastline "[%02c] %`%-w%{=b bw}%n %t%{-}%+w" # 色つき。 hardstatus alwayslastline "%{= rw} %H %{= wk}%-Lw%{= bw}%n%f* %t%{= wk}%+Lw %{= wk}%=%{= gk} %y/%m/%d %c " # 画面下にスクリーン一覧を表示する。 # hardstatus alwayslastline "%w"