「Screen」の版間の差分
細 (→ウィンドウタイトルを "ログイン名@ホスト名" にする) |
|||
行32: | 行32: | ||
hardstatus alwayslastline "%-w%{=b bw}%n %t%{-}%+w" | 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#コマンド実行後に任意の処理を行う|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 | ||
− | + | ==== 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 | ||
=== ウィンドウ監視 === | === ウィンドウ監視 === |
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 _) を叩けばよい。