試験運用中なLinux備忘録

2007/06/26

GNU screenの設定

設定ファイル

はじめは/etc/screenrc${HOME}/.screenrcとしてコピーして編集するのがよいかもしれない。

「autodetach on」など、既定値を書いているものは書いていないが、「startup_message off」など、環境によって必要なものは書いている。

ファイル名: ${HOME}/.screenrc

## 一部キー割り当てを変更
escape ^Tt             # 比較的無難(衝突自体は存在する)
bind ^W windowlist -b  # リストから選択してEnterで切替
bind ^Q quit           # 確認の後、全て終了

## Emacs風ウィンドウ管理
bind 1 only     #  C-x 1
bind 2 split    #  C-x 2
bind 0 remove   #  C-x 0
bind o focus    #  C-x o

## 一発切替(あまり使っていない)
bindkey -k k1 select 0
bindkey -k k2 select 1
bindkey -k k3 select 2
bindkey -k k4 select 3
bindkey -k k5 select 4
bindkey -k k6 select 5
bindkey -k k7 select 6
bindkey -k k8 select 7
bindkey -k k9 select 8
bindkey -k k; select 9
bindkey -k F1 select 10
bindkey -k F2 select 11

## 新規ウィンドウに対しての後方スクロールの長さ Gentoo Linuxでは1000
defscrollback 1000			# default: 100

## 起動時のメッセージを表示しない(Gentoo Linuxではoff)
startup_message off

## シェルのウィンドウタイトル(好みで変更)
#shelltitle "$ |$SHELL"
#shelltitle "$ |sh"
#shelltitle "$ |*"
shelltitle "$ |shell"

## 情報収集スクリプトからデータを読み込んで表示
# backtick [id] [lifespan] [autorefresh] [cmd] [args...]

# 例(1分ごとに更新の場合の設定)
#backtick 0 60 60 /home/xxx/bin/screen_cputemp.sh
#backtick 1 60 60 /home/xxx/bin/screen_hddtemp.sh

## 状態表示のカスタマイズ
# %0`, %1`, ...: backtickのidによる出力
# %{=b cw}: ANSIエスケープコードによる書式設定例(太字 シアンの背景に白文字)
#           %{=b c}のように片方の指定では前景色として指定される
#           blac[k] [r]ed [g]reen [y]ellow [b]lue [m]agenta [c]yan [w]hite
# %{-}, %{--}: 書式解除
# %a: am/pm
# %A: AM/PM
# %c: 24h表記の時・分
# %C: 12h表記の時・分
# %d: 月の中の日
# %h: X端末のウィンドウタイトル(シェルからの出力部分)
# %H: ホスト名
# %l: system load
# %m: 月(01-12)
# %n: アクティブなウィンドウの番号
# %M: 月(1-12)
# %s: 秒
# %t: タイトル
# %-w: 現在アクティブなウィンドウ番号より小さいウィンドウの表示部分
# %+w: 現在アクティブなウィンドウ番号より大きいウィンドウの表示部分
# %w: 現在アクティブな番号/タイトルに「*」を付けた全ウィンドウリスト
# %y: 西暦年(2桁)
# %Y: 西暦年(4桁)

## 情報の表示

## X上の端末エミュレータ向け
## splitするとcaptionが複数箇所になってしまうが、
## 端末のウィンドウタイトルを変更できる
hardstatus string "[ SCREEN %n: %t ] %h"  # X端末のタイトルの最終的な出力
caption always "%{=b b}%-w%{=b rw}%n %t%{-}%+w %=%{=b g}%c:%s %Y/%m/%d"
#caption always "%{=b b}[%0` %1`]%-w%{=b rw}%n %t%{-}%+w %=%{=b g}%c:%s %Y/%m/%d" # 温度表示のテスト

## ウィンドウタイトルの変更がされないが、一番下の行だけになる
#hardstatus alwayslastline "%{=b b}%-w%{=b rw}%n %t%{-}%+w %=%{=b g}%c:%s %Y/%m/%d"

スクリプトによる情報取得の例

screen_cputemp.shの例(k8tempの値を直接読んでいる例なので、読んでいる場所などは環境によって書き換える)

#! /bin/sh
cputempsrc=/sys/bus/pci/drivers/k8temp/0000:00:18.3/temp1_input
cputemp=$(cut -c 1-2 $cputempsrc).$(cut -c 3- $cputempsrc | sed -e s/00$//)
echo "CPU:${cputemp}"

screen_hddtemp.shの例(hddtempを使用)

#! /bin/sh
echo "HDD:$(nc 127.0.0.1 7634 | awk -F\| '{printf $4}')"

(2009/1/20)ncというのは多くのディストリで「netcat」というパッケージにより提供されるコマンドで、ディストリによってはコマンド名はnetcatとなることがある。

f:id:kakurasan:20070626201315p:image

このようなものが表示できるので、表示させたい情報を出力するようにスクリプトを書いて指定する。

(2009/1/20)この部分については後からの説明となってしまうが、一番下にステータス行(キャプションかハードステータス)を表示するようにしたとき、情報(文字列)を出力するスクリプトを用意して関連付けることで、外部コマンド/スクリプトを定期的に呼び出してステータス行の指定した場所へ出力・更新することができる。

このあたりは便利な機能ではあるのだが分かりにくい。以下の設定が必要となる。

  • ステータス行を使用する設定を記述
  • 実行されるスクリプトを準備
  • backtickの登録
  • キャプションかハードステータスの文字列中に、backtickのID番号を用いた「%[番号]`」の文字列を埋め込む

スクリプトの出力結果は1行のテキストで最後に改行を含むようにする(例:echoコマンド)。

現在実行中なコマンド名をタイトルとして表示する機能の注意点

shelltitle "$ |(シェルの入力待ちのときにタイトルとして表示する文字列)"

の「|」の左の部分は、プロンプトの一番最後の部分と合わせておく必要がある。

shelltitle "% |shell"
shelltitle "# |shell"

のように、使用しているプロンプトに合わせて修正しておく。

また、この機能では、コマンドの引数までは表示してくれないので、bashの設定に追記しておいた関数tとsを使用することで、最大2つまでの引数を付けてタイトルに反映できる。これらの関数は、bashだけでなく、zshでも使用できる。下は実行例。

$ t man 3 printf
$ s emerge -avuD world

f:id:kakurasan:20070626213804p:image

使用したバージョン:

  • screen 4.0.3

rderardera 2009/01/20 20:21 スクリプトによる情報取得の例を参考にさせて頂きました。
ご丁寧に解説ありがとうございます。

kakurasankakurasan 2009/01/20 21:59 コメントありがとうございます。
参考になったというコメントはとても励みになります。こちらこそ感謝です。
「スクリプトによる情報取得の例」については関連した設定に複雑・難解なところがあるのですが、今になって見てみるとかなり説明不足で分かりにくく感じてしまったため、改めて補足説明を追加しました。

rderardera 2009/01/21 00:40 補足説明を追加感謝です。
backtickって面白いですね。

kakurasankakurasan 2009/01/21 12:14 自分以外の方が読んだときに少しでも分かりやすくなったのであれば幸いです。
端末の環境上で *常に* 色々な情報が表示できるというのは、特にGUI無しでSSH接続しているときなどに便利だと思います。自分はデスクトップ環境上の端末を使用していることもあり、普段は使用していませんが、複雑なスクリプトを書いて使いこなしている方もいらっしゃるようです。

はてなユーザーのみコメントできます。はてなへログインもしくは新規登録をおこなってください。

(C) 2007-2015 kakurasan
本ウェブログの表示につきましては、横幅1,000ピクセル以上を推奨します。