「Screen」の版間の差分

提供: Wikinote
移動: 案内検索
(ウィンドウタイトルを "ログイン名@ホスト名" にする)
行32: 行32:
 
  hardstatus alwayslastline "%-w%{=b bw}%n %t%{-}%+w"
 
  hardstatus alwayslastline "%-w%{=b bw}%n %t%{-}%+w"
  
=== bash の設定 ===
+
== Tips ==
  
==== ウィンドウタイトルを "ログイン名@ホスト名" にする ====
+
=== ウィンドウタイトルを "ユーザ名@ホスト名" にする ===
 +
 
 +
screen デフォルトでは、hardstatus 行のタイトルはどこにログインしても "bash" となってしまい、
 +
どのウィンドウがどのホストへログインしているのか、どのユーザ名でログインしているのかわからない。
 +
以下のように、ウィンドウ毎にユーザ名とホスト名が表示できたら便利だ。
 +
 
 +
0 hagio@lab  1 root@centos39  2 root@centos47  3 root@lab
  
su などでユーザを切り替えた際にも自動的にタイトルが切り替わるようにしたい。
+
さらに、su などでユーザを切り替えた際にも自動的にタイトルが切り替わるようにしたい。
 
bash には PROMPT_COMMAND という環境変数があり ([[bash#コマンド実行後に任意の処理を行う|bash のページ参照]])、
 
bash には PROMPT_COMMAND という環境変数があり ([[bash#コマンド実行後に任意の処理を行う|bash のページ参照]])、
 
これにコマンドを設定しておくと、プロンプト表示前に実行される。
 
これにコマンドを設定しておくと、プロンプト表示前に実行される。
 
screen のウィンドウタイトルは echo で変更可能なので、PROMPT_COMMAND に echo を登録して
 
screen のウィンドウタイトルは echo で変更可能なので、PROMPT_COMMAND に echo を登録して
 
プロンプト表示時に毎回タイトルを設定するようにすれば、su や ssh などの結果が即座に反映される。
 
プロンプト表示時に毎回タイトルを設定するようにすれば、su や ssh などの結果が即座に反映される。
 +
 +
==== RHEL の場合 ====
  
 
もし root 権限を持っているなら (そして自由に設定を変更してもよいなら)、
 
もし root 権限を持っているなら (そして自由に設定を変更してもよいなら)、
行55: 行63:
 
  fi
 
  fi
  
すると、hardstatus にログインしているホスト名とログイン名が表示されてわかりやすい。
+
==== SLES の場合 ====
  
0 hagio@lab  1 root@centos39  2 root@centos47  3 root@lab
+
SLES には /etc/sysconfig/bash-prompt-screen のようなファイルは無いようなので、
 +
全ユーザに適用するには /etc/bash* あたりに追記するしかないようだ。
  
== Tips ==
+
しかし、/etc/bash.bashrc には以下のような記述がある。
 +
 
 +
# /etc/bash.bashrc for SuSE Linux
 +
#
 +
# PLEASE DO NOT CHANGE /etc/bash.bashrc There are chances that your changes
 +
# will be lost during system upgrades.  Instead use /etc/bash.bashrc.local
 +
# for your local settings, favourite global aliases, VISUAL and EDITOR
 +
# variables, etc ...
 +
 
 +
/etc/bash.bashrc.local を使えということなので、それに従って以下で作成。
 +
 
 +
if [[ $TERM = 'screen' ]]; then
 +
    PROMPT_COMMAND='echo -ne "\033k${USER}@${HOSTNAME%%.*}\033\\"'
 +
fi
  
 
=== ウィンドウ監視 ===
 
=== ウィンドウ監視 ===

2010年1月31日 (日) 12:56時点における版

意味がなければ screen はない。

覚え書き

  • 設定ファイル (.screenrc) を適用するには、screen を再起動させ… なくても、:source ~/.screenrc で可能。

screen の設定

基本設定

最低限これだけは設定しないと使いものにならない。

escape ^Zz
hardstatus alwayslastline "%w"
defencoding UTF-8
encoding UTF-8
  • escape の ^Z は、Ctrl-Z で screen のコマンドに入るという意味。末尾の z は、Ctrl-Z + z でコマンド文字 (Ctrl-Z 自体) をプロセスに送るという意味 (つまり、プロセスがバックグラウンドに送られる)。
  • hardstatus は "%w" でウィンドウのリストを表示できる。alwayslastline で常に表示する。これが設定されていないと使いにくさが 256 倍になる。これがデフォルトだったら、screen ユーザが今の 256 倍くらいいたと思うのだが…。
  • encoding 系はメインマシンに合わせる。

コマンドでエンコーディングを変更

RHEL 2/3/4/5 全部使うので…。そのうち、自動で切り替わるようにしよう。

bind "u" encoding UTF-8 # Ctrl-Z u でエンコーディングを UTF-8 にする
bind "e" encoding eucJP # Ctrl-Z e でエンコーディングを eucJP にする

認識性の高い hardstatus

色を用いて、現在のウィンドウを認識しやすくしたもの。

hardstatus alwayslastline "%-w%{=b bw}%n %t%{-}%+w"

Tips

ウィンドウタイトルを "ユーザ名@ホスト名" にする

screen デフォルトでは、hardstatus 行のタイトルはどこにログインしても "bash" となってしまい、 どのウィンドウがどのホストへログインしているのか、どのユーザ名でログインしているのかわからない。 以下のように、ウィンドウ毎にユーザ名とホスト名が表示できたら便利だ。

0 hagio@lab  1 root@centos39  2 root@centos47  3 root@lab

さらに、su などでユーザを切り替えた際にも自動的にタイトルが切り替わるようにしたい。 bash には PROMPT_COMMAND という環境変数があり (bash のページ参照)、 これにコマンドを設定しておくと、プロンプト表示前に実行される。 screen のウィンドウタイトルは echo で変更可能なので、PROMPT_COMMAND に echo を登録して プロンプト表示時に毎回タイトルを設定するようにすれば、su や ssh などの結果が即座に反映される。

RHEL の場合

もし root 権限を持っているなら (そして自由に設定を変更してもよいなら)、 /etc/sysconfig/bash-prompt-screen というファイルを以下の内容で作成し、実行権限を付与しておく。

# vi /etc/sysconfig/bash-prompt-screen
echo -ne "\033k${USER}@${HOSTNAME%%.*}\033\\"
# chmod +x /etc/sysconfig/bash-prompt-screen

root 権限を持っていなければ、ログインするホストの ~/.bashrc に以下を記載しておく。

if [ $TERM = 'screen' ]; then
    PROMPT_COMMAND='echo -ne "\033k${USER}@${HOSTNAME%%.*}\033\\"'
fi

SLES の場合

SLES には /etc/sysconfig/bash-prompt-screen のようなファイルは無いようなので、 全ユーザに適用するには /etc/bash* あたりに追記するしかないようだ。

しかし、/etc/bash.bashrc には以下のような記述がある。

# /etc/bash.bashrc for SuSE Linux
#
# PLEASE DO NOT CHANGE /etc/bash.bashrc There are chances that your changes
# will be lost during system upgrades.  Instead use /etc/bash.bashrc.local
# for your local settings, favourite global aliases, VISUAL and EDITOR
# variables, etc ...

/etc/bash.bashrc.local を使えということなので、それに従って以下で作成。

if  $TERM = 'screen' ; then
    PROMPT_COMMAND='echo -ne "\033k${USER}@${HOSTNAME%%.*}\033\\"'
fi

ウィンドウ監視

何か時間のかかるコマンドを実行していて、別のウィンドウで作業を行っている場合、 ウィンドウを切り替えずにコマンドの実行が終わったかどうかがわかると嬉しい。

コマンドが何か出力したことを知る (C-z M)
これをセットしたウィンドウで何か出力されると、"Activity in window 1" といったメッセージがステータス行に出力される。
コマンドが何も出力しなくなったことを通知する (C-z _)
これをセットしたウィンドウで 30 秒間動きが見られなければ、"Window 1: silence for 30 seconds" といったメッセージがステータス行に出力される。
コンパイル作業などに向いている。

監視をオフにするには、同じコマンド (C-z M あるいは C-z _) を叩けばよい。