X-Git-Url: http://git.grml.org/?a=blobdiff_plain;f=usr_bin%2Fgrml-screen;h=a33131a1a1c0627f0569a27361a0292fdf3956a5;hb=80e422b789147a8706e450722c6e45bd42b3a5d1;hp=cd405032ae3c69656ad853c3cb2fb8b46d1d510d;hpb=9c0fa3ec198ddfffeae16dd1d12fc3fb11056664;p=grml-scripts.git diff --git a/usr_bin/grml-screen b/usr_bin/grml-screen index cd40503..a33131a 100755 --- a/usr_bin/grml-screen +++ b/usr_bin/grml-screen @@ -4,7 +4,6 @@ # Authors: grml-team (grml.org), (c) Michael Prokop # Bug-Reports: see http://grml.org/bugs/ # License: This file is licensed under the GPL v2. -# Latest change: Mit Mär 21 15:39:00 CET 2007 [mika] ################################################################################ # export variable USER for use withing GNU screen: @@ -15,6 +14,49 @@ sudo chmod 660 $TTY sudo chown $USER.tty $TTY +# FIXME: fix for screen race-conditions +PID_FILE_="/var/lock/grml-screen" +PID_FILE_CREATED_="false" +MY_PID_="$$" +if [ ! -d "/var/run/screen/S-$USER" ]; then + # no /var/run/screen/S-$USER and possible no /var/run/screen either -> locking + for i in `seq 40`; do # 40*0.25 = 10 seconds + if lockfile-create --retry 0 $PID_FILE_; then + echo $MY_PID_ >$PID_FILE_ + PID_FILE_CREATED_="true" + break + else + PID_FILE_CREATED_="error" + fi + sleep 0.25 + done +fi +if [ $PID_FILE_CREATED_ = "true" ]; then + # FORK BEGIN + ( + for i in `seq 40`; do # 40*0.25 = 10 seconds + if [ ! -d "/var/run/screen/S-$USER" ]; then + sleep 0.25 # educated guess + else + break + fi + done + if [ `cat $PID_FILE_` = $MY_PID_ ]; then + rm $PID_FILE_ + lockfile-remove $PID_FILE_ + fi + )& + # FORK END +elif [ $PID_FILE_CREATED_ = "error" ]; then + SLEEP_TIME_="$(( $$ % 5 * 5 + 5 ))" + echo "grml-screen: Error could not create lockfile! (sleeping for $SLEEP_TIME_)" >&2 + sleep $SLEEP_TIME_ +elif [ $PID_FILE_CREATED_ = "false" ]; then + echo "nothing to do" &>/dev/null +else + echo "grml-screen: internal error - PID_FILE_CREATED_ == \"$PID_FILE_CREATED_\"" >&2 +fi + # now run screen with config cd $HOME # important for e.g. hardcopy-feature # do we have a utf8 enabled terminal?