アップデート後に要リブートの場合はscreenのステータス行に通知 (11/11 .screenrc 単体版追記)
2012-11-10-1 / カテゴリ: [ubuntu][screen] / [permlink]

前から気になってたんだけど、GNOMEデスクトップで使ってたら問題ないんだけど、ssh接続のみとか画面なしでターミナルのみで使ってると、aptでカーネル込みで更新して要リブートの場合にsshで接続しなおさないと明示的にメッセージが表示されないのが不便だなーと何となくつぶやいたら、ざきさんからヒントが。


ファイルの中身を追っていくと、リブートが必要なときは /var/run/reboot-required の中身を表示していることが判明。しばらく点火していなくてカーネルの更新がありそうなノートに入れてる ubuntu で試したらビンゴ。普段は存在しないこのファイル、「*** システムの再起動が必要です ***」という中身が入ってた。

この状態を普段使ってる screen のステータス行に表示できたらスゲー捗るなと思って設定してみた。
こんな感じ(右下)。


.screenrc のみで構成できれば楽だったけどちょっとわからなかったのでスクリプト書いた。 ワンライナーも教わったので後述
#!/bin/sh

FILE=/var/run/reboot-required

if [ -f ${FILE} ]; then
echo " !!REBOOT REQUIRED!!"
fi

んで .screenrc (抜粋)
hardstatus alwayslastline "%{= kw}%-w%{= rw}% %t%{= kw}%+w %=%H %c / %l%0`"

backtick 0 60 60 /home/zaki/bin/reboot-required.sh
外部コマンドの実行結果を表示するには、%0` の部分。
%id`
で、後述の
backtick id lifespan autorefresh cmd
のコマンドを実行・結果表示する。man参照
面倒だったら /etc/update-motd.d/98-reboot-required を直接叩いても良いかもね。

というか、ツイートのサイト埋め込みに対応しないとダメだな(笑)
対応した [2012-11-11-1]



11/11 追記
ざきさんがここを見てくださったようで、.screenrc 単体で書けるシェルスクリプトを教えてもらったのでこんな感じになった。
backtick 0 60 60 /bin/sh -c '[ -f "/var/run/reboot-required" ] && echo " !!REBOOT REQUIRED!!"'




というかmanちゃんと見ろよってね>自分
           -c               Read commands from the command_string operand
                            instead of from the standard input.  Special
                            parameter 0 will be set from the command_name op‐
                            erand and the positional parameters ($1, $2, etc.)
                            set from the remaining argument operands.

ので、~/bin/reboot-required.sh はポイーで。

別ターミナルで動いているscreenに外部からコマンド実行
2007-03-16-2 / カテゴリ: [screen] / [permlink]

-X を使う。
Manpage of SCREENより。
-X
    動作中の screen セッションに特定のコマンドを送る。 -d や -r オプションを用いれば、アタッチされているセッションやデタッチされているセッションのみを探すよう、screen に伝えることもできる。ただしこのコマンドは、セッションがパスワードで保護されている場合には動作しないことに注意。

外部から新しいウィンドウを作る

% screen -X screen

外部から新しいウィンドウを作ってそこでプログラムを実行する

% screen -X screen lv /etc/hosts
ただし、プログラム終了でウィンドウは破棄される…

外部から指定したディレクトリをカレントとして新しいウィンドウを作る

多分そんな機能はない…
ので
% screen -X chdir /path/to; screen -X screen
chdir [path]で、新しいウィンドウを生成したときのカレントディレクトリを変更できる。んで、新しいウィンドウ生成コマンドを発行。
でも同時に実行できない…? (screen -X ... -X ... はダメだった)
注意点として、以降の新ウィンドウ生成は、ここで指定したディレクトリになってしまう。


ただし、生きている screen プロセスがない場合は、全部失敗する...
生きていても detach されていれば、atach せにゃ使えない...

ちなみに cygwin の場合、「ファイル名を指定して実行(R)...」からは、screen がコマンドプロンプト上からしか使えない(This is cannot be run in DOS mode)っぽいけど、
zsh -c "screen -X screen"
で起動は可能(実行時にコマンドプロンプトが表示されるけど)

だいなとの連携はまた後で考えよう…

cygwinでscreen
2007-03-16-1 / カテゴリ: [cygwin][screen] / [permlink]

[2005-09-25-3]の続き。
1年半放置してたけど、久々に調べてみたらよーやく解決。
cygwinのscreen
症状がまったく同じだ^^;
めんどっちいのでバイナリを落としてきた。

Cygwin に screen インストール(リベンジ)
2005-09-25-3 / カテゴリ: [win][cygwin][screen] / [permlink]

[2005-06-09-1]の続き。なんとなく再チャレンジ。

configure: checking fifos...
- your fifos are usable
rm: cannot remove `conftest.exe': Permission denied
やっぱ同じところでエラーになり、conftest.exe が削除できない。
で、調べてみると、conftest プロセスが実行中で削除できないみたい。
rm は効かないが、mv は効くようなので、configure スクリプトで rm のところを mv に変えてみた。

変更点は、4263 行目付近の
fi
rm -f core core.* *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
fi
rm -f /tmp/conftest*
の直後に
if [ -f conftest.exe ]; then
mv conftest.exe /tmp/zzz
fi
と追加。

すると、configure はとりあえず正常に終了した。

が、make すると、
hmiyazaki@chaource:/usr/local/src/screen-4.0.2$ make
CPP="gcc -E " srcdir=. sh ./osdef.sh
AWK=gawk CC="gcc -g -O2" srcdir=. sh ./comm.sh
AWK=gawk srcdir=. sh ./term.sh
gcc -c -I. -I.    -g -O2 screen.c
gcc -c -I. -I.    -g -O2 ansi.c
gcc -c -I. -I.    -g -O2 fileio.c
gcc -c -I. -I.    -g -O2 mark.c
gcc -c -I. -I.    -g -O2 misc.c
misc.c: In function `xsetenv':
misc.c:619: error: 関数 `setenv' への引数が少なすぎます
make: *** [misc.o] エラー 1

…続く orz
Referrer (Inside): [2007-03-16-1]

Cygwin に screen インストール
2005-06-09-1 / カテゴリ: [win][cygwin][screen] / [permlink]

パッケージはないのでソールから。
でも、./configure で
rm: cannot remove `conftest.exe': Permission denied
が、大量にでて、Makefile ができない…なんで? パーミッションは別におかしくないし…。でもシェル上から手動で rm も効かない。
Referrer (Inside): [2005-09-25-3]

screen パスワード
2004-11-26-2 / カテゴリ: [linux][command][screen] / [permlink]

コマンドライン上の
password [crypted_pw]
は、crypt で暗号化されたパスワード を設定
プレーンな文字列をセットすると、resumeできなくなるので注意
なので、まずは、引数無しで
password
を実行。パスワードを2回聞かれるので入力すると、cryptで暗号化された
パスワードが screen のコピーバッファに入る(バージョンによっては
この時点でパスワードが設定される?)ので、次は
password [screenバッファのpaste]
を実行

screen 画面分割
2004-11-26-1 / カテゴリ: [linux][command][screen] / [permlink]

C-a Shift-s で分割
C-a shift-q で解除
C-a C-i でフレーム(?)移動
移動した後、C-a n/p でバッファ(?)切り替える必要あるけど

screen のステータス行にいろいろ表示してみる
2004-10-01-1 / カテゴリ: [unix][linux][command][screen] / [permlink]

結局
hardstatus alwayslastline "%{= kw}%-w%{= rw}% %t%{= kw}%+w %=%H %c / %l"
になりました。
%H .. ホスト名
%l .. ロード
などなど

screen 使い方2
2004-06-16-1 / カテゴリ: [unix][linux][command][screen] / [permlink]

C-a C-c 新規ウインドウの生成・ウインドウ切り替え
C-a (num:0~9) ウインドウの切り替え
C-a C-n 次のウインドウに切り替え(C-a n / C-a SPC でもOK)
C-a C-p 前のウインドウに切り替え(C-a p / C-a h / C-a BS でもOK)
C-a N 現在のウインドウ番号の表示
C-a C-w ウインドウリストの表示
C-a C-k 現在のウインドウを破棄(C-a k でもOK)
C-a ? キーアサインの表示

screen 設定
2004-06-08-2 / カテゴリ: [unix][linux][command][screen] / [permlink]

.screenrc
escape ^t^t
defhstatus "screen [^En:^Et] <${USER}@${HOST}:${PWD}>"
hardstatus string "screen@%H[%n] %h"
vbell off
これで、コマンドキーが C-t に。

screen 使い方基本
2004-06-08-1 / カテゴリ: [unix][linux][command][screen] / [permlink]

起動
$ screen

detached(screenを残して落ちる)
C-a d

resume(セッションの再開)
$ screen -r

既に起動・セッション中のscreenを横取り(先方はdetached)
$ screen -d -r

既に起動・セッション中のscreenを横取り(先方はdetached&ログアウト)
$ screen -D -r

既に起動・セッション中のscreenを共有
$ screen -x

screen インストール(Solaris)
2004-05-12-1 / カテゴリ: [unix][Solaris][command][screen] / [permlink]

src: ftp://ftp.uni-erlangen.de/pub/utilities/screen/
解説: http://www.kawaz.jp/pukiwiki/?screen など
./configure --prefix=/export/home/miyazaki/local/screen-4.0.2
カテゴリ: screen

最終更新時間: 2013-05-02 16:12